Nodes/comfyui-magic-hour/Magic Hour: AI Clothes Changer
ComfyUI Node

Magic Hour: AI Clothes Changer

Magic Hour: AI Clothes Changer

By magichourhq·Created about 17 hours ago·Updated about 16 hours ago· 0
Magic Hour: AI Clothes Changer
  • person
  • garment
  • image
  • image_paths
  • credits_charged
◄garment_typeentire_outfit►

Virtual try-on, for people who don't say virtual try-on. Two images - a person, a garment - and you get the person wearing it. No mask, no prompt, no regional attention tuning.

Why bother when inpainting exists

You can absolutely do this locally: mask the torso, crop the garment into a reference for an IP-Adapter or a Flux Kontext edit, then fix the collar by hand. It works, and the KB's inpainting doc is the place to learn it. But garment transfer has a specific set of demands that generic inpainting is bad at - cloth drape, folds that follow the body, the way a hem falls, keeping the print on a shirt legible while it bends. A model trained on exactly that job beats a general edit model on it, which is the whole reason try-on is its own product category.

So: local inpainting when you want control and free iterations, this node when you want the dress to actually look like it's being worn.

How it works

Both images are converted to temp PNGs and uploaded together as a person asset and a garment asset, plus your garment_type. The remote model segments the target region, fits the garment, and returns a single composited image, which the node downloads into ComfyUI/output/magic_hour/.

Worth internalising: only the first image of a batch is used for each input. A batch of six product shots doesn't give you six try-ons - it gives you one, on frame zero.

Inputs

| field | what it is | | --- | --- | | person | the photo being dressed. Standing, front or three-quarter, arms not crossed over the torso | | garment | the clothing item. Clean product shot on white is ideal - the model has to read the cut of the garment from this | | garment_type | entire_outfit, upper_body, lower_body, dresses |

garment_type defaults to entire_outfit and that default is a trap in both directions. Tell it entire_outfit when you only supplied a hoodie and the model may replace the trousers too - you asked for a full outfit and it will try to complete one. Conversely, upper_body when your garment is a jumpsuit gets you a top that stops at the waist. Pick the narrowest type that matches the item you actually uploaded.

Outputs

image is the dressed photo as an IMAGE batch, ready for Preview, Save Image, or another upscale pass. image_paths is a STRING with the saved path(s), newline-joined if several files came back. credits_charged is an INT with the actual cost of the run - useful for realising that a per-image price times fifty product photos is a real budget line.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/magichourhq/comfyui-magic-hour
pip install -r comfyui-magic-hour/requirements.txt

Restart, and the nodes appear under Magic Hour. One dependency: magic-hour>=0.87.1. No model files - the whole point is that the heavy model isn't on your disk. ComfyUI Manager users can search "Magic Hour" instead.

export MAGIC_HOUR_API_KEY=your_key_here

before launching ComfyUI, or write the bare key into comfyui-magic-hour/api_key.txt. The author keeps the key out of node widgets on purpose: widget values end up in the saved workflow JSON and travel with any graph you share.

What actually goes wrong

Pose matters more than the garment. A photo of someone sitting, slouching, or shot from above gives the model a hard fitting problem. Straight-on standing shots make it look like magic; anything else makes it look like a bad Photoshop.

Patterns and logos warp. Text on a t-shirt is a stress test, and it will bend along the drape, which is correct behaviour and still looks wrong to your eye. Check that legibility matters before you rely on it.

The garment's cut is only as good as the reference photo. A crumpled item on a bed gives it nothing to work with. Flat-lay on white, or a well-lit product shot on a mannequin.

402. Credits. The error text from Magic Hour comes through in the node's exception message - read it, because "not enough credits" and "this needs a paid plan" are different problems.

Faces drifting slightly. This is a clothes changer, not an identity-preserving edit. If the face has to stay exact, chain a face swap after it or keep the person's face region out of the change with upper_body rather than entire_outfit.

And the one that isn't technical: this is a likeness-and-garment tool. The node's description carries the author's own note - only use photos you have the right to use. Dressing someone else's photo of someone else's model without permission is the sort of thing that goes badly, and it doesn't become fine because a node made it easy.

CategoryMagic Hour

Inputs (3)

NameTypeDefaultDescription
personIMAGE—
garmentIMAGE—
garment_typeCOMBOentire_outfit4 options: entire_outfit, upper_body, lower_body, dresses

Outputs (3)

NameTypeDescription
imageIMAGE—
image_pathsSTRING—
credits_chargedINT—