FLUX VTO is a free AI-powered virtual try-on tool from Black Forest Labs, the team behind the FLUX image generation model.
It takes a person image and a garment reference image, then outputs a realistic result showing the person wearing that garment.
Most virtual try-on tools work well on front-facing full-body photos with clean packshot garments, then fall apart on accessories, complex poses, or on-model garment references.
FLUX VTO handles all three reference types: single-garment packshots, multi-garment compositions combined into one canvas, and model-to-model transfer where the garment source image already shows a different person wearing it.
Case Study
I used a sample image that I often use for AI photo tool examples: an Asian woman wearing a white dress. I selected a pair of sunglasses as the try-on item.
The sunglasses appeared on the woman’s face after I clicked Try-on. The fit followed the face shape well, and the result did not look like a pasted object. The glasses matched the facial angle and looked natural enough for a quick visual preview.


Features
- Generates try-on results from a person image and a garment reference.
- Supports single garments, multi-garment outfits, and model-to-model garment references.
- Accepts person and garment images from upload, drag and drop, click selection, or clipboard paste.
- Compares before and after results.
- Runs an asynchronous API workflow for developer products.
Use Cases
- Preview outfits on a model photo before a product shoot or campaign asset.
- Test sunglasses, jackets, shirts, caps, pants, and complete looks on a portrait.
- Create product visuals for online fashion stores and apparel landing pages.
- Build a virtual fitting room inside an e-commerce or style recommendation app.
- Generate social media fashion previews from model and garment images.
How to Use FLUX Virtual Try-On (Web Version)
1. Upload a person image by drag and drop, file picker, or clipboard paste.
2. Select a garment from the left sidebar, or upload your own garment image.
3. Click the Try-On button. The result typically appears within a few seconds.
4. Click Compare to view the before-and-after overlay.
5. Download the final image.
API Endpoints
The web version works best for quick evaluation, examples, and one-off image generation. Treat the API as the better path for fitting rooms, batch workflows, product apps, and automated try-on systems.
| Task | Endpoint |
|---|---|
| Submit try-on job | https://api.bfl.ai/v1/flux-tools/vto-v1 |
| Poll result | https://api.bfl.ai/v1/get_result?id=<TASK_ID> |
| Europe regional endpoint | https://api.eu.bfl.ai/v1/flux-tools/vto-v1 |
| US regional endpoint | https://api.us.bfl.ai/v1/flux-tools/vto-v1 |
Submit a try-on job:
curl -X POST https://api.bfl.ai/v1/flux-tools/vto-v1 \
-H "x-key: $BFL_API_KEY"Poll for the result:
curl https://api.bfl.ai/v1/get_result?id=<TASK_ID> \
-H "x-key: $BFL_API_KEY"API Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
prompt | string | Yes | Natural-language styling instruction. |
person | string | Yes | Person image as URL or base64. |
garment | string | Yes | Garment reference as URL or base64. |
seed | integer | No | Reproducibility control. |
safety_tolerance | integer | No | Moderation strictness from 0 to 5; default is 2. |
output_format | string | No | jpeg, png, or webp; default is jpeg. |
webhook_url | URL | No | Async callback URL. |
webhook_secret | string | No | Signature secret for webhook verification. |
Python API Example
#!/usr/bin/env python3
import base64
import os
import time
import requests
API_KEY = os.environ["BFL_API_KEY"]
BASE = "https://api.bfl.ai"
HEADERS = {
"accept": "application/json",
"x-key": API_KEY,
"Content-Type": "application/json",
}
PROMPT = "The person of image 1, maintaining exactly their face and pose, wearing the white t-shirt of image 2."
PERSON_PATH = "/path/to/person.png"
GARMENT_PATH = "/path/to/garment_top.png"
with open(PERSON_PATH, "rb") as f:
person_b64 = base64.b64encode(f.read()).decode()
with open(GARMENT_PATH, "rb") as f:
garment_b64 = base64.b64encode(f.read()).decode()
payload = {
"prompt": PROMPT,
"person": person_b64,
"garment": garment_b64,
"output_format": "webp",
}
submit = requests.post(
f"{BASE}/v1/flux-tools/vto-v1",
headers=HEADERS,
json=payload,
)
submit.raise_for_status()
meta = submit.json()
task_id = meta["id"]
poll_url = meta.get("polling_url", f"{BASE}/v1/get_result?id={task_id}")
while True:
r = requests.get(
poll_url,
headers={"accept": "application/json", "x-key": API_KEY},
)
r.raise_for_status()
result = r.json()
status = result.get("status")
if status == "Ready":
print("Result URL:", result["result"]["sample"])
break
if status in {"Error", "Request Moderated", "Content Moderated", "Task not found"}:
raise RuntimeError(f"VTO failed with status: {status} | payload: {result}")
time.sleep(1)API Response Format
Initial response:
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"polling_url": "https://api.bfl.ai/v1/get_result?id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}Successful polling response:
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "Ready",
"result": {
"sample": "https://delivery.bfl.ai/..."
}
}The API returns the generated image URL in result.sample after the status changes to Ready.
Signed delivery URLs expire after 10 minutes, so download or store the result promptly inside your application workflow.
Alternatives and Related Tools
- FLUX VTO API Documentation: Build a try-on workflow with person images, garment references, prompts, polling, and webhooks.
- BFL API Pricing: Check current API pricing before production use.
- AI Clothes Changer: Try a related free AI outfit change tool on ScriptByAI.
- HeyBeauty Virtual TryOn: Explore a virtual try-on MCP server for HeyBeauty API workflows.
- IC-Custom: Use position-aware image customization for product placement and try-on style workflows.
- Tinker: Explore a mobile creative toolkit with virtual try-on and product visuals.
Pros
- Browser demo is free.
- FLUX image foundation.
- Custom garment references.
- Multi-garment support.
- API workflow available.
Cons
- API requires a paid BFL API key.
- Signed delivery URLs expire in 10 minutes.
- No self-hosted or open-source option.
- Garment image quality directly affects output quality.
FAQs
Q: What images work best with FLUX Virtual Try-On?
A: Clear person photos and clean garment references work best. Packshot garment images on plain backgrounds usually give stronger results than cluttered on-model product photos.
Q: Does FLUX Virtual Try-On support multiple garments?
A: FLUX Virtual Try-On supports multi-garment references. Place all garments on one canvas before upload when you want to generate a complete outfit.
Q: What are the main limitations of FLUX Virtual Try-On?
A: Existing clothing artifacts may remain in the generated image. Results improve when the person photo uses plain, tight-fitting base clothing and the garment reference has clear shape, texture, and lighting.





