zhenzhen-flux-pro-vto-fal
Put the garment on the person, server-side
- human_image
- garment_image
- images
- response
- image_urls
Virtual try-on is one of those tasks where the local ecosystem still lags: keeping the person's identity while convincingly draping a new garment over them is hard, and the models that do it well are big and fiddly. Comfly_flux_pro_vto_fal skips the whole problem by calling BFL's Flux Pro Virtual Try-On model (fal-ai/flux-pro/v1/vto) through the Zhenzhen relay's fal route. You feed it a photo of a person, a photo of a garment, and a prompt, and it returns the person wearing the garment - as an IMAGE tensor in your graph.
E-commerce people, this is your node. Product shots, "what would this look like on a model" checks, one-person-many-outfits catalogs. The fal route is prepaid-credit style: the relay holds a base and the final bill lands after the job, so don't be alarmed if the cost line moves.
The two inputs that matter
- human_image (or
human_image_url) - the person. A clean, well-lit, front-facing photo works best; the model is much happier with a good subject than a grainy selfie. - garment_image (or
garment_image_url) - the clothing on a flat lay or hanger. Same advice: clean and isolated beats busy background.
You need both - the node validates this and errors out if either is missing. prompt is optional but useful for nudging ("keep the original lighting," "product on a model, front view"). num_inference_steps defaults to a snappy 4 (max 50) - more steps cost more and buy marginal quality; start low. output_format is jpeg or png. image_way (base64 or image_url) chooses how your images travel to the endpoint - base64 is the default and fine for most sizes. seed is capped at FAL's 65535 (0 = random). poll_interval and max_poll_attempts control the wait loop - the default 600 × 6s is a one-hour timeout, generous for a VTO job.
Outputs: images (IMAGE tensor), response (full JSON), and image_urls (the hosted results, newline-separated).
Setup
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/Comfyui-zhenzhen
Restart (or ComfyUI Manager → "Comfyui-zhenzhen"). The fal nodes in this pack use the same Zhenzhen key - from ai.t8star.org - pasted into api_key; the relay handles the fal endpoint, so you don't need a separate fal.ai account.
Reality check
VTO quality is still "good enough for a catalog draft," not indistinguishable from a real photoshoot - keep expectations there. The fal route is metered and pre-deducted, so an expensive multi-step job shows up as a bigger deduction; the README spells out that fal charges pre-deduct and settles true afterward. Standard relay gotchas apply: 500s are often upstream and a re-run clears them, and both your subject photo and the garment leave your machine. If you're generating a full product catalog on the clock, budget for the per-image cost before you queue fifty jobs.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| human_imageopt | IMAGE | — | |
| garment_imageopt | IMAGE | — | |
| human_image_urlopt | STRING | — | |
| garment_image_urlopt | STRING | — | |
| api_keyopt | STRING | — | |
| num_inference_stepsopt | INT | 41–50 | — |
| output_formatopt | COMBO | jpeg | 2 options: jpeg, png |
| seedopt | INT | 00–65535 | 0 = random seed. FAL seed max is 65535. |
| image_wayopt | COMBO | base64 | 2 options: base64, image_url |
| poll_intervalopt | INT | 61–60 | — |
| max_poll_attemptsopt | INT | 60010–3600 | Default 600*6s = 3600s timeout. |
| skip_erroropt | BOOLEAN | false | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| response | STRING | — |
| image_urls | STRING | — |