IMAGDressingNode
Dress a person in any garment — no LoRA, no person photo needed
- cloth
- prompt
- pose
- face
- model_image
- IMAGE
This is the ComfyUI port of IMAGDressing-v1, the AAAI 2025 "customizable virtual dressing" model from muzishen's group (paper: arXiv 2407.12705). Feed it a photo of a shirt, dress, or jacket, and it generates a plausible person wearing it - no person photo, no pose reference, and crucially no per-garment LoRA training. That "rapid customization in seconds" is the whole pitch, and it's why you'd reach for this over an image-editing workflow.
Set expectations: it's built on SD 1.5 - Realistic Vision V4.0 under the hood, with a separately-downloaded sd-vae-ft-mse VAE. That means 2024 research-model quality: excellent fabric fidelity, SD1.5-era faces, fixed 512×640 output. Not the frontier of 2026 photorealism - more like the best open virtual-dressing tool of its generation, and worth treating as exactly that.
How it works
The garment image is encoded twice: VAE-latent-encoded as the "reference image" for a second, cache-attention UNet that runs alongside the main one, and CLIP-encoded as an IP-Adapter-style image prompt (a 16-token resampler, the same trick as classic IP-Adapter). The reference UNet's cached attention injects the garment's spatial detail while the text prompt describes the rest. That dual-conditioning is why the fabric comes out recognizable instead of merely "inspired by."
The interesting part is that IP-Adapter, ControlNet, and FaceID aren't separate nodes you stack - they're baked into the use_case dropdown:
base- cloth + prompt, that's it.controlnet- addspose: an openpose skeleton the openpose ControlNet (control_v11p_sd15_openpose) uses to fix the body pose.ipa_controlnet- addsfaceon top; InsightFace extracts a FaceID embedding and an IP-Adapter FaceID Plus v2 LoRA steers identity.cartoon- same as base but swaps incounterfeit-v30, an anime SD1.5 checkpoint.inpainting- the reverse:model_imageis a photo of a real person, and the node auto-runs human parsing + openpose to mask the upper body, then re-dresses just that region with the ControlNet-inpaint model. The mask is automatic, not something you draw.
The inputs that matter
Only a handful are worth your attention:
cloth(IMAGE, required) - the whole point of the node. A clean, front-on garment photo works far better than an angled one.use_case- the five modes above. Switching it tears down and rebuilds the entire pipeline, which is slow; pick one and stick with it per session.prompt(TEXT) - describes the model (e.g. "a beautiful woman"). The node appendsbest quality, high qualityand bakes in a fixed negative:bare, naked, nude, undressed, ....num_inference_steps(50),guidance_scale(7.5),seed(42) - the standard trio. Defaults are fine to start.
The output is one IMAGE tensor at 512×640 - wire it into a PreviewImage or SaveImage. That's the whole output.
Installing it
ComfyUI Manager can find it by searching "IMAGDressing", or clone it by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/AIFSH/IMAGDressing-ComfyUI.git
cd IMAGDressing-ComfyUI
pip install -r requirements.txt
Then restart ComfyUI. Two things to know first: the requirements file is the upstream repo's pinned list (diffusers, transformers, insightface, onnxruntime-gpu, bitsandbytes, deepspeed) and it installs into your shared ComfyUI environment - the classic dependency-conflict risk. And the weights are not in your models/ folder: everything auto-downloads from HuggingFace into pretrained_models/ inside the pack on first run - several GB covering the SD1.5 base, VAE, IP-Adapter encoders, the adapter weights (feishen29/IMAGDressing), openpose/inpaint ControlNets, FaceID Plus v2, and the IDM-VTON parsing ONNX files for inpainting. First run is a long download; after that it's cached per use case.
Where people get burned
ModuleNotFoundError: No module named 'cuda_malloc'- the most likely reason this node shows as missing. The pack's__init__.pyimports acuda_mallochelper that ships neither in the repo nor in its requirements. Fix is a one-line shim: drop acuda_malloc.pyinto the pack folder containingdef cuda_malloc_supported(): return True(ortorch.cuda.is_available()) and restart.- The seed is a lie. It's only applied when the pipeline builds - changing the seed widget after your first run does nothing until you switch
use_case. "Randomize" won't behave like a normal ComfyUI seed. - VRAM. The author tested on a 2080 Ti 11GB (torch 2.3.0+cu121, Python 3.10). It's fp16 and 512×640, so 11GB is comfortable and 8GB is marginal.
- It's less tunable than the paper's demo. The upstream Gradio demo got the usual "doesn't work well with my own pictures" complaint, and the fix there was weight sliders - which this node doesn't expose. You get
guidance_scaleand that's it. - The README's "ask for an answer" is a WeChat donation pitch for a paid Windows one-click pack. The author does answer issues, but expect a commercial nudge, and the inpainting path pulls IDM-VTON (non-commercial research) models - fine for personal use, not for a product.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| cloth | IMAGE | — | |
| prompt | TEXT | — | |
| use_case | COMBO | 5 options: base, controlnet, ipa_controlnet, cartoon, inpainting | |
| num_inference_steps | INT | 50 | — |
| guidance_scale | FLOAT | 7.50 | — |
| seed | INT | 42 | — |
| poseopt | IMAGE | — | |
| faceopt | IMAGE | — | |
| model_imageopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |