arkennemasis fal · Flux 2 LoRA Gallery Virtual Tryon · $0.021/MP
Person plus garment in, worn outfit out
- image_1
- image_2
- image_3
- image_4
- image_5
- image_6
- images
- image_paths
- seed
- prompt
- info
Two pictures in, one out: a person and a garment, and you get the person wearing the garment. That's the whole node. fal's flux-2-lora-gallery/virtual-tryon endpoint runs at $0.021 per processed megapixel, and the pack exposes it with the LoRA strength as a knob - which is the single dial that decides whether the clothes fit the body properly or float slightly above it.
How it works
Flux 2 is unusually good at multi-reference conditioning - the KB treats that as its signature strength, and it's the reason the flock-on-4B try-on demos that circulated worked at all. fal trained a LoRA on top for the try-on job specifically, and the node uploads both pictures to fal's CDN before submitting the request. Results go to output/fal/fal-ai_flux-2-lora-gallery_virtual-tryon/.
Inputs
image_1 is required and the tooltip is blunt about the order of business: person image and clothing image. Sockets run up to image_6, and batches are sent in socket order (first picture of socket 1 is number 1) - which matters here because the second image you send is the garment.
prompt describes the result. Empty is allowed and works, but a short instruction about pose and framing ("full-body shot, standing, neutral studio light") helps the model decide what to render rather than cropping to the torso.
lora_scale (0–2, default 1) is effect strength. Under 1 leaves the original clothing partly visible; over 1 makes the garment dominate, sometimes at the cost of body shape. If the garment is landing badly, this is the first thing to move.
guidance_scale (0–20, default 2.5) and num_inference_steps (4–50, default 40) are the Flux 2 settings - 40 steps is not cheap, so halving it is a reasonable exploration mode. acceleration is none or regular. image_size defaults to square_hd; full-body try-on usually wants portrait_4_3, or custom with the width and height set. num_images (1–4) generates variations in one paid call, which is how you'd judge a garment, and seed at -1 randomises. output_format defaults to png; the safety checker returns flagged output as black images.
The shared options: max_cost_usd (default $20, 0 disables) stops a run before anything is uploaded when the estimate is too high; reuse_identical_run returns an identical already-paid result instead of charging again; extra_json merges raw JSON into the request for fal fields with no box; max_concurrent (default 1) limits how many paid fal calls run at the same time across the graph.
Outputs
images is the result - a normal IMAGE batch for saving, compositing on a background, or dropping onto a contact sheet. image_paths, seed, prompt and info come with it; info is the JSON holding the request id, the estimate and fal's full answer.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
Restart, then in the .env next to run_nvidia_gpu.bat:
FAL_KEY=your-key-from-fal.ai/dashboard/keys
The fal provider pulls in no Python packages, so there's nothing to install for these nodes.
Where people get burned
Garment fidelity is the honest weak point: patterns, fine text and logos get reinterpreted, because the LoRA is re-rendering the clothing from an image rather than texturising a 3D body. Flat-lay product photos with clear edges do better than a garment photographed on a hanger in bad light. Second, the person's proportions and skin tone can shift a little - acceptable for a lookbook, worth checking if it's a real customer's photo and they'll notice.
Third, cost: it bills processed megapixels including both inputs, so a 2MP person plus a 1MP garment plus a 1MP output is around $0.084, and a four-image variation pass roughly quadruples it. And the deal you're making is the same as everywhere in this pack: both photographs are uploaded to fal before anything renders, so don't put a client's face or an unreleased design through it without deciding that's fine first.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| image_1 | IMAGE | The URLs of the images for virtual try-on. Provide person image and clothing image. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| prompt | STRING | The prompt to generate a virtual try-on image. | |
| image_size | COMBO | square_hd | The size of the generated image. If not provided, the size of the input image will be used. 'custom' uses the width and height below. |
| image_size_width | INT | 102416–14142 | Width in pixels when image_size is 'custom'. |
| image_size_height | INT | 102416–14142 | Height in pixels when image_size is 'custom'. |
| guidance_scale | FLOAT | 2.500–20 | The CFG (Classifier Free Guidance) scale. Controls how closely the model follows the prompt. |
| num_inference_steps | INT | 404–50 | The number of inference steps to perform. |
| acceleration | COMBO | regular | Acceleration level for image generation. 'regular' balances speed and quality. |
| seed | INT | -1-1–2147483647 | Random seed for reproducibility. Same seed with same prompt will produce same result. -1 leaves it to the model. |
| enable_safety_checker | BOOLEAN | true | Whether to enable the safety checker for the generated image. Disabling it requires account authorization; unauthorized requests are always checked. |
| output_format | COMBO | png | The format of the output image |
| num_images | INT | 11–4 | Number of images to generate |
| lora_scale | FLOAT | 1.000–2 | The strength of the virtual try-on effect. |
| image_2opt | IMAGE | The URLs of the images for virtual try-on. Provide person image and clothing image. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| image_3opt | IMAGE | The URLs of the images for virtual try-on. Provide person image and clothing image. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| image_4opt | IMAGE | The URLs of the images for virtual try-on. Provide person image and clothing image. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| image_5opt | IMAGE | The URLs of the images for virtual try-on. Provide person image and clothing image. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| image_6opt | IMAGE | The URLs of the images for virtual try-on. Provide person image and clothing image. Each socket may carry a batch; they are sent in socket order (the first picture of socket 1 is number 1). | |
| max_cost_usdopt | FLOAT | 20.00–100000 | Safety cap. If the estimated cost of this run is above this many US dollars the node stops BEFORE sending anything to fal. 0 = no cap. |
| reuse_identical_runopt | BOOLEAN | true | If these exact inputs (the settings AND the same pictures/clips/audio) were already paid for and the files are still in output/fal, return them instead of paying again - also after a ComfyUI restart. Turn off for a fresh take with the same settings. |
| extra_jsonopt | STRING | Advanced: a JSON object merged into the request last, for any fal field this node has no box for. Example: {"seed": 7}. Leave empty normally. | |
| max_concurrentopt | INT | 11–32 | How many paid fal calls may run at the same time in one run, across every fal node. 1 (default) = one after another. This node starts its paid part only while fewer than this many fal calls are running. Once any fal node fails, the ones still waiting are not started, so nothing more is billed. |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| image_paths | STRING | — |
| seed | INT | — |
| prompt | STRING | — |
| info | STRING | JSON: request id, cost estimate, saved files and fal's full answer. |