OC Character Outfit Block
Stitch outfit parts into one coordinated OC block
- base_style_part
- upper_part
- outer_part
- lower_part
- legwear_part
- footwear_part
- neckwear_part
- handwear_part
- waist_part
- headwear_part
- facewear_part
- jewelry_part
- decoration_part
- palette
- oc_block
- prompt_preview
- debug_text
This is the middle-management node of ComfyUI-OC-Generator. The outfit part nodes - one per clothing slot, like upper, pants, footwear, jewelry - each produce a typed OC_PART fragment. OC Character Outfit Block is where those fragments get gathered into a single OC_BLOCK of category "Outfit," ready to feed OC Generator alongside your body, face, and hair blocks.
It exists for the same reason nobody writes a character sheet as one blob of text: you think of a character as a stack of decisions - style, then top, then bottoms, then the jewelry. This node keeps those decisions separate while still presenting the sampler with one tidy outfit phrase.
The slots
The node exposes 13 optional slot inputs, each taking one specific part type: base_style_part, upper_part, outer_part, lower_part, legwear_part, footwear_part, neckwear_part, handwear_part, waist_part, headwear_part, facewear_part, jewelry_part, and decoration_part. Leave a slot unconnected and it's simply skipped - an outfit built from just a style, a top, and boots works fine. The parts are assembled in a fixed slot order, not in the order you wire them, so your output stays predictable.
Two required controls on top:
separator- how slot fragments get joined, default", ".dedupe- on by default. When the same fragment shows up twice (you'll see this with overlapping catalogs), the duplicate is dropped.
The palette twist
There's also an optional palette input (OC_PALETTE), and it's the cleverest thing in the pack. If you connect an OC Palette Block, each part can consume a color role - primary, secondary, accent, neutral - and the outfit block prefixes the matching palette color onto that part's prompt, so a "red dress" becomes coordinated rather than accidental. Every part carries a color_role (default auto), and auto assigns a sensible default per slot: upper and outer are primary, lower is secondary, legwear and footwear are neutral, neckwear and jewelry are accent. Set color_role to none on a part and the palette leaves it alone. It's a small system, but it's the difference between an outfit that reads as designed and one that reads as random tags.
The outputs
Same trio as the rest of the pack:
oc_block- the composed Outfit block; wire it into OC Generator.prompt_preview- the assembled outfit phrase, so you can eyeball it without tracing wires.debug_text- a slot-by-slot summary showing mode, resolved color role, and applied color. When a part silently contributes nothing, this is where you find out why (spoiler: it's usually because the part node is still inunsetmode - see below).
Installing it
One pack, one install:
cd ComfyUI/custom_nodes
git clone https://github.com/Zhuozhuo-219/ComfyUI-OC-Generator
Restart ComfyUI, or use ComfyUI Manager and search ComfyUI-OC-Generator. No PyPI dependencies, no model downloads - all data ships in-repo.
The trap to watch for
The #1 failure mode with this node is silent outfits. Every part node defaults to mode: unset, which emits nothing. You wire up a full wardrobe, hit run, and the outfit block reports "Outfit: no active parts" because every part is still unset. Set each part's mode to fixed (or randomize) or it won't contribute a single tag. Relatedly: Pants and Skirt both output the OC_PART_OUTFIT_LOWER type, so they fight over the same lower_part socket - pick one, or use a switch. This pack is new and quiet, so keep the debug output handy; it's the fastest path to understanding what your outfit is actually doing.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| separator | STRING | , | String used to join outfit slot prompts. |
| dedupe | BOOLEAN | true | Remove duplicated outfit fragments during composition. |
| base_style_partopt | OC_PART_OUTFIT_STYLE | Outfit style input. | |
| upper_partopt | OC_PART_OUTFIT_UPPER | Upper clothing input such as tops and shirts. | |
| outer_partopt | OC_PART_OUTFIT_OUTER | Outerwear input such as coats and jackets. | |
| lower_partopt | OC_PART_OUTFIT_LOWER | Lower clothing input such as pants or skirts. | |
| legwear_partopt | OC_PART_OUTFIT_LEGWEAR | Legwear input such as socks or stockings. | |
| footwear_partopt | OC_PART_OUTFIT_FOOTWEAR | Footwear input such as shoes or boots. | |
| neckwear_partopt | OC_PART_OUTFIT_NECKWEAR | Neckwear input such as scarves and collar accessories. | |
| handwear_partopt | OC_PART_OUTFIT_HANDWEAR | Handwear input such as gloves, wristwear, and arm decorations. | |
| waist_partopt | OC_PART_OUTFIT_WAIST | Waistwear input such as belts and waist accessories. | |
| headwear_partopt | OC_PART_OUTFIT_HEADWEAR | Headwear input such as hats or hair decorations. | |
| facewear_partopt | OC_PART_OUTFIT_FACEWEAR | Facewear input such as glasses or masks. | |
| jewelry_partopt | OC_PART_OUTFIT_JEWELRY | Jewelry input such as earrings and necklaces. | |
| decoration_partopt | OC_PART_OUTFIT_DECORATION | Decorative accessory input. | |
| paletteopt | OC_PALETTE | Optional coordinated outfit palette. When connected, each part can consume a palette role such as primary or accent. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| oc_block | OC_BLOCK | Structured Outfit block composed from connected outfit parts. |
| prompt_preview | STRING | The final outfit prompt fragment assembled from slot inputs. |
| debug_text | STRING | Readable slot-by-slot summary for the composed outfit. |