FLUX VTO enables you and your customers to generate virtual try-on for any person on any garment! The endpoint is optimized for low latency, making it ideal for interactive applications like virtual fitting rooms and social media filters.Documentation Index
Fetch the complete documentation index at: https://docs.bfl.ml/llms.txt
Use this file to discover all available pages before exploring further.
Try it interactively and for free in our BFL Shop Demo.
Examples
- Single garment
- Multi-garment
- Model to Model
A single garment shown as a packshot. Use this when you have an individual product shot.
The person of image 1, maintaining exactly their face and pose, wearing the olive green bomber jacket with 'Black Forest Labs' branding of image 2.
Prompting tips
- Core prompt formula:
The person of image 1, maintaining exactly their face and pose, wearing the {YOUR GARMENT DESCRIPTIONS} of image 2. - A good default is even a static prompt like
The person of image 1, maintaining exactly their face and pose, wearing the garments of image 2.. But to get higher quality results, we recommend to add a concise description of the garments. Especially for complex garments, a detailed description can significantly improve the outcome.
You can for instance specify the fit and category of the garment like for example:- the oversized tee
- the cap with Keep FLUXing text
- the 7/8 length pants.
- When using another model shot as garment reference, only describe what should be tried on from that image and don’t specify in the prompt what should be kept from the model image.
For instance, if the garment reference image also shows a model wearing pants, but you only want to try on the top, your prompt could be:The person of image 1, maintaining exactly their face and pose, wearing the green jacket of image 2.
Reference images
General guidance
- Input images (both model and garment) up to 2 Megapixels are used as-is. Larger inputs are automatically downscaled to a ~1 Megapixels target while preserving aspect ratio.
- For best results and latency, keep the model image and the garment image at around 1 Megapixels.
- Some artifacts from existing clothing may be retained in the output. If you are consistently seeing this, you can try preprocessing the model image to get a more neutral base for the try-on. A neutral base could mean just wearing tight-fitting, plain clothing.
- For the garment reference, clean, well-lit images with a clear view of the garment details work best. Both packshot and on-model references are supported, but packshot references with a plain background tend to produce the best results.
Designing the garment image
If you want to generate an image with more than one garment, merge them into a single canvas first. This reduces extra file handling overhead and optimizes for latency.
Endpoint
Submit a try-on job:Regional endpoints
To reduce latency, you can pin requests to a specific region by swapping the host:https://api.eu.bfl.ai/v1/flux-tools/vto-v1— Europehttps://api.us.bfl.ai/v1/flux-tools/vto-v1— US
polling_url returned in the submit response will match the region you submitted to — always poll the URL returned in the response rather than rewriting the host.
Follow the regional endpoints guide for more information on the regional endpoints and how to use them.
Quick start
The API uses an asynchronous workflow:Submit a VTO request
POST a person image and one or more garment images, together with a styling prompt, to the model endpoint.
Request parameters
Useperson + garment as the minimum payload.
| Parameter | Type | Required | Description |
|---|---|---|---|
prompt | string | Yes | Natural-language styling instruction |
person | string | Yes | Person image — URL or base64 (mapped to input_image) |
garment | string | Yes | Garment reference — URL or base64 (mapped to input_image_2) |
seed | integer | No | For reproducibility |
safety_tolerance | integer | No | 0–5, defaults to 2. Moderation strictness for input and output |
output_format | string | No | jpeg (default), png, webp |
webhook_url | URL | No | Async callback |
webhook_secret | string | No | Signature secret |
Response format
Initial response
Polling response (success)
status is "Ready", use result.sample.
For the full list of HTTP status codes and polling response types returned by the API, see the Errors reference.
