OOP Clothing 🥼
Top, bottom and two colors — dress your character without tag surgery
- OOP_CLOTHING
Outfit prompts are a formatting nightmare. "Red sweater, gray sweatpants" is easy until you try to make the model keep the color attached to the right garment - then it's a game of "why is the sweater gray." OOP Clothing 🥼 from the ComfyUI-OOP pack handles the two big slots for you: a top, a bottom, and a color each, emitted as a clean structured label.
What it builds
Same DNA as every node in this pack: it assembles a labeled string and outputs it as a custom OOP_CLOTHING type. It never touches pixels, never calls a model - it's pure prompt construction.
The required inputs:
- upper_type - 19 options:
Nude,TShirt,Sweater,Jacket,Shirt,Blouse,Hoodie,Coat,TankTop,Vest,Cardigan,Poncho, and more. DefaultSweater. - lower_type - 19 options:
Nude,Jeans,Shorts,Skirt,Trousers,Leggings,Sweatpants,Cargo Pants,Chinos,Dress,Short Skirt,Overalls, and more. DefaultJeans.
Optional, but you'll usually set them:
- upper_color and lower_color - 13 colors each (Black through Beige, plus a couple more). Default
" "means "no color specified," which the node treats as "don't add a color tag."
Pick Sweater + Red and Sweatpants + Gray, and the node emits:
Top::Garment:Sweater, color:Red, Bottom::Garment:Sweatpants, color:Gray
The Top::Garment: prefix is the pack's way of keeping each garment scoped - it's the same structure you see in the README's example scene. There's also randomize, which on each queue rolls a random top, bottom and two colors. The IS_CHANGED method re-rolls on every run, so keep it off when you want a specific outfit to stick.
Where it goes
OOP_CLOTHING plugs into the clothing input on OOP Person 👤, which bundles it with hair, eyes, mouth and poses. The final prompt assembly and CLIP encoding happen in the OOP Node 💫, whose STRING output shows you the actual text. If the model ever misreads an outfit, read that string and hand-edit.
One detail the code gets right: if you pick Nude for a slot, the node deliberately omits that garment's color - a red nude would be nonsense, and the author accounted for it.
Install
It ships with the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/0xRavenBlack/ComfyUI-OOP
Restart ComfyUI. Manager works too - search ComfyUI-OOP in the Custom Nodes Manager. No requirements.txt, no model files, no dependency hell. This is one of the least fiddly installs in the ecosystem.
Gotchas
- SDXL-first. The pack's aggregator hardcodes CLIP skip −2 and 1024×1024 sizing; the demo workflow runs an SDXL empty latent (euler/karras, cfg 8, 20 steps). Garment tags like
CardiganandCargo Pantsbehave on SDXL and booru-trained models; on Flux or 2026 LLM-encoder checkpoints they're weaker signal. - The lists are fixed. No "kimono," no "puffer jacket," no custom slot. Pick the closest and edit the output string when the list doesn't have it - the
STRINGoutput is there precisely so you can. - Blank color = no color tag. Leave
upper_colorat" "and the node just won't write a color, which is sometimes exactly what you want (the model picks).
Small, quiet pack (built early 2025, ~15 stars, dormant since). It's not a fashion studio - it's a consistent way to keep outfits out of the typo pile, and it does that fine.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| upper_type | COMBO | Sweater | 19 options: Nude, TShirt, Sweater, Jacket, Shirt, Blouse, +13 |
| lower_type | COMBO | Jeans | 19 options: Nude, Jeans, Shorts, Skirt, Trousers, Leggings, +13 |
| upper_coloropt | COMBO | 13 options: , Black, White, Gray, Red, Blue, +7 | |
| lower_coloropt | COMBO | 13 options: , Black, White, Gray, Red, Blue, +7 | |
| randomizeopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| OOP_CLOTHING | OOP_CLOTHING | — |