Flux Virtual Try-On (BFL)
Dress a person in a garment they never wore, from two photos
- config
- IMAGE
Flux Virtual Try-On (BFL) does exactly what the name says: give it a photo of a person and a photo of a garment, and it returns the person wearing the garment. It's BFL's flux-tools/vto-v1 endpoint wrapped for ComfyUI, part of the same ComfyUI-FLUX-BFL-API pack as the erase and outpaint tools. For e-commerce mockups, "how would I look in this" previews, or dressing a character reference, it's about as turnkey as this gets - no ControlNet, no segmentation model, no garment-mask pipeline.
The local alternatives are a pain by comparison. Dedicated try-on models need pose estimation, garment segmentation, and a pile of VRAM; this is two images and a prompt, and the whole thing runs in BFL's cloud. The tradeoff is the usual one: it's a paid API call, it takes a while, and moderation is in play.
How it works
You supply two base64 images - person (the subject to dress) and garment (the clothing to apply) - plus a prompt describing how the garment is worn. The node POSTs to flux-tools/vto-v1, polls get_result?id=... until ready, and returns a single IMAGE tensor. The model does the garment transfer while trying to preserve the person's face, pose, and the garment's look. The default prompt is the sensible one: TRY-ON: The person of image 1 wearing garments of image 2. - you can edit it, and you should describe specifics ("open jacket over a white shirt, sleeves rolled") when the default isn't cutting it.
The inputs that matter
- person - base64 of the subject to dress. Straight, front-facing photos of the full garment area work best.
- garment - base64 of the clothing. A clean product-style shot of the item gives the model the most to work with.
- prompt - how it's worn, and what to preserve (face, pose). The default covers the basics.
- safety_tolerance - 0–5, default 2. Moderation strictness; this endpoint is content-filtered and BFL's filters are not shy.
- output_format - jpeg (default) or png. JPEG is fine for a web mockup; pick png if it feeds a compositing chain.
- Optional seed, webhook_url/secret, config.
Installing it
Standard single-pack install:
cd ComfyUI/custom_nodes
git clone https://github.com/gelasdev/ComfyUI-FLUX-BFL-API.git
Restart, key in config.ini or via a Flux Config (BFL) node. No models to download; the pack's only dependency is torch.
Where people get burned
- Photos of people in the wrong pose. The model preserves the person's pose, so a side-angle person with a front-facing garment can come out awkward. Shoot or pick straight-on photos for the best transfers.
- Garment detail drift. Complex patterns, logos, and fine textures are where try-on models wobble. Give it a high-quality garment image and don't expect a pixel-perfect reproduction of every button.
- Black image output. The pack's universal failure signal - moderation bounce, API error, or poll timeout. Check
[BFL]logs and the printed curl equivalent to see what BFL actually returned. - Expecting a full outfit. This handles garments, singular. A full look needs iterative runs or the local stack.
One tip from the pack's own docs: there's now a v2 variant (Flux Virtual Try-On v2 (BFL), same pack) that does sharper face preservation and garment detail with inputs up to 4MP. If the base v1 output isn't sharp enough around the face, that's your upgrade - same inputs, same workflow.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| person | STRING | Person image (base64-encoded string). The subject to dress. | |
| garment | STRING | Garment image (base64-encoded string). The clothing to apply. | |
| prompt | STRING | TRY-ON: The person of image 1 wearing garments of image 2. | Text guidance for the try-on. Describe the garment and how it is worn while preserving the person's face and pose. |
| safety_tolerance | INT | 20–5 | Tolerance level for input and output moderation. Between 0 and 5, 0 being most strict, 5 being least strict. |
| output_format | COMBO | jpeg | jpeg (default) or png. |
| seedopt | INT | -1 | Optional seed for reproducibility. -1 = random. |
| webhook_urlopt | STRING | URL to receive webhook notifications. | |
| webhook_secretopt | STRING | Optional secret for webhook signature verification. | |
| configopt | BFL_CONFIG | Optional Flux Config (BFL) override for x-key, base URL, and region. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |