Nodes/ComfyUI-FASHN-VTON/Fashn VTON Inference
ComfyUI Node

Fashn VTON Inference

Put a garment on a person photo — no prompt, no mask, no drama

By drphero·Created 7 months ago·Updated 7 months ago· 10
Fashn VTON Inference
  • pipeline
  • person_image
  • garment_image
  • person_pose_keypoints
  • garment_pose_keypoints
  • person_segmentation_image
  • garment_segmentation_image
  • IMAGE
garment_photo_typemodel
categorytops
skip_cfg_last_n_steps1
segmentation_freetrue
steps30
cfg1.5
seed0
keep_model_loadedtrue
pose_sourceauto
parser_backendfashn_human_parser

This is the node you actually came for. Fashn VTON Inference takes a photo of a person and a photo of a garment, and renders the garment onto the person. No prompt, no negative prompt, no ControlNet stack to tune. It's a purpose-built diffusion model doing one job, and that single-mindedness is why it beats generic img2img at this specific task. If you've fought the older open-source try-on stacks - Flux-fill wrappers that wanted 24GB of VRAM and a segmentation mask you had to draw by hand - the whole pitch here is "not that."

How it works

Under the hood is FASHN VTON v1.5, an mMDiT transformer adapted from FLUX that generates directly in pixel space, so there's no VAE encode/decode in the loop. The "maskless" bit is real: with segmentation_free on (the default), it skips the clothing-agnostic masking of the person that used to be the fragile step in every VTON pipeline. It still detects the person's pose using the bundled DWPose (the two ONNX files the loader downloaded), encodes the garment, and denoises with a low, FLUX-style guidance scale. The one weird knob is skip_cfg_last_n_steps (default 1), which turns CFG off for the final sampling steps specifically to stop colors from saturating - leave it alone until you see a reason not to.

The inputs that matter

  • pipeline - from (Down)load Fashn VTON. Non-negotiable.
  • person_image / garment_image - any IMAGE, straight from a Load Image node.
  • garment_photo_type - model (worn by a person) or flat-lay (product shot on a plain background). This is the one people get wrong, and it's the one that changes the pipeline's behavior most. A flat-lay shot can't be pose-detected, so the pipeline uses a built-in dummy garment pose instead.
  • category - tops, bottoms, or one-pieces. The model is trained per-garment-class; this isn't cosmetic.
  • steps - 20 fast, 30 balanced, 50 quality (per the tooltip and the README's 30–50 range).
  • cfg - 1.5–3.0 recommended. Crank it and you'll get saturated, plastic-looking fabric.
  • seed - for reproducibility; same seed + same inputs = same output.
  • keep_model_loaded - true keeps the model on the GPU between runs (fast, VRAM-hungry); false shuttles it to CPU and clears cache after each inference.

The output is a single IMAGE - the try-on composite. Wire it to a Preview Image or Save Image node and you're done.

The optional stuff (pose and segmentation)

Four optional inputs unlock the power-user path, and all of them are "connect nothing and it still works":

  • person_pose_keypoints / garment_pose_keypoints - external keypoints produced by Fashn Pose Keypoints Adapter. With pose_source set to auto (default) they're used when connected, otherwise the pipeline falls back to internal DWPose.
  • person_segmentation_image / garment_segmentation_image - external labelmaps, paired with parser_backend = external_fashn_labelmap, produced by Fashn Mask to Labelmap. Invalid or missing data quietly falls back to the internal parser, so you can't break it by half-connecting things - you just won't get the override.

Install and issues

Same story as the rest of the pack: ComfyUI Manager → search "ComfyUI-FASHN-VTON", or git clone into custom_nodes and pip install -r requirements.txt. Two things actually bite people here. First, the fashn_human_parser ModuleNotFoundError on startup - run pip install fashn-human-parser in ComfyUI's own python (portable installs especially). Second, the first inference after install is slow: the loader's auto-download plus ONNX runtime warm-up, so give it a minute before you assume it's stuck.

On results: if you see a faint aura around the person, that's the optional background-restoration pass, not the try-on model misbehaving - FASHN's own team confirmed that on the release thread. And if a worn-by-a-model garment comes out wrong, it's usually because the internal parser didn't cleanly isolate the garment; that's exactly the case where the segmentation adapter route earns its keep.

CategoryFashnAI

Inputs (17)

NameTypeDefaultDescription
pipelineFASHN_VTON_PIPELINE
person_imageIMAGE
garment_imageIMAGE
garment_photo_typeCOMBOmodel'model' if garment is worn by a person, 'flat-lay' for product shots on plain backgrounds
categoryCOMBOtopsGarment category - 'tops', 'bottoms', or 'one-pieces'
skip_cfg_last_n_stepsINT1Skip CFG for final N steps to prevent color saturation
segmentation_freeBOOLEANtrueIf True, skip person clothing-agnostic masking. Set to False to use person segmentation for person mask control.
stepsINT301–100Recommended: 20 (fast), 30 (balanced), 50 (quality)
cfgFLOAT1.51–10
seedINT00–18446744073709550000
keep_model_loadedBOOLEANtrue
pose_sourceCOMBOautoauto: use external keypoints when connected, otherwise internal DWPose fallback.
parser_backendCOMBOfashn_human_parserUse external_fashn_labelmap only when providing segmentation images encoded with FASHN label IDs (0-17).
person_pose_keypointsoptFASHN_DWPOSE_KEYPOINTSOptional external keypoints for person pose. Used when pose_source is auto/external_pose_keypoints.
garment_pose_keypointsoptFASHN_DWPOSE_KEYPOINTSOptional external keypoints for garment pose. Used when pose_source is auto/external_pose_keypoints.
person_segmentation_imageoptIMAGEOptional external person labelmap. Only affects output when segmentation_free is False and parser_backend is external_fashn_labelmap.
garment_segmentation_imageoptIMAGEOptional external garment labelmap. Used when parser_backend is external_fashn_labelmap.

Outputs (1)

NameTypeDescription
IMAGEIMAGE