OOP Hair 🦰
Hair color and style as dropdowns, not a 40-word tag gamble
- OOP_HAIR
Hair is the detail everyone typos. "long wavy platinum blonde" comes out as "long wayv platnum blond" on a bad night, and the model dutifully renders... something. OOP Hair 🦰 sidesteps that entirely: you pick a style and a color from clean dropdowns, and the node writes the prompt for you. It's one of the simpler nodes in the ComfyUI-OOP pack, and the most searched, probably because hair is where most people start building a character.
How it works
Same trick as the rest of the pack: no image math, no API, no model weights. The node builds a labeled string and emits it as a custom OOP_HAIR type. Pick Ponytail + Red and you get color:Red, style:Ponytail - which the pack's Person node and OOP Node will weave into the scene text.
The inputs that matter:
- style - 11 options:
Short,Long,Curly,Straight,Wavy,Bald,Ponytail,Braided,Bun,Spiky,Undercut. No default listed, so it starts on the first entry. - main_color - 46 colors, from the natural (
Black,Brown,Blonde,Red) to the full fantasy palette (Teal,Lavender,Platinum, and more). DefaultBlack. - optional_color - the same 46-color list, for a secondary tone (ombre, highlights, dual-color). Default is
" "- a blank entry that means "no second color," so you can ignore it. - randomize - flip it on and each queue grabs a random style plus one or two random colors, forcing a fresh look every run.
If you're batch-generating character portraits and want variety without thinking, randomize here plus the same toggle on the other leaf nodes gives you an endless parade of OCs. Turn it off the moment you need a specific look - the re-roll happens on every queue, so a "one-time" random pick never stays.
Wiring it up
The output is OOP_HAIR, and it plugs into the hair input on OOP Person 👤. From there it flows into the OOP Node 💫, which encodes the whole structured prompt and also exposes a plain STRING output so you can see the final text. That's the trick for debugging: read the string, see what the dropdowns actually produced.
Install
It ships with the pack, so install once and you get all twelve nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/0xRavenBlack/ComfyUI-OOP
Restart ComfyUI after cloning. Manager works too - search ComfyUI-OOP in the Custom Nodes Manager. There's no requirements.txt and no model download; this is pure Python building strings, so installation is about as painless as ComfyUI custom nodes get.
Gotchas
- It's an SDXL-era tool. The pack's aggregator hardcodes CLIP skip −2 and 1024×1024 conditioning, and the demo workflow uses an SDXL empty latent (1152×896, euler/karras, cfg 8, 20 steps). Hair tags like
Ponytail/Undercutread well on SDXL and booru-trained checkpoints; on Flux or a 2026 LLM-encoder model, they're weaker signal. - The
" "placeholder is the off switch.optional_colorleft as a space means "none." Don't delete the space expecting an empty string - the node treats it as the sentinel. - Hair color lists are opinionated.
OliveBeige,Mustard,Periwinkle- some of these map fine on booru models and not at all on photorealistic ones. If a pick looks off, read the assembled string and replace the color by hand.
The pack's a small, quiet project (built in early 2025, ~15 stars, dormant since). Don't expect updates - expect a neat little string-building utility that keeps your character prompts consistent.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| style | COMBO | 11 options: Short, Long, Curly, Straight, Wavy, Bald, +5 | |
| main_color | COMBO | Black | 46 options: , Black, Brown, Blonde, Red, White, +40 |
| optional_coloropt | COMBO | 46 options: , Black, Brown, Blonde, Red, White, +40 | |
| randomizeopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| OOP_HAIR | OOP_HAIR | — |