Nodes/ComfyUI-OOP/OOP Hair 🦰
ComfyUI Node

OOP Hair 🦰

Hair color and style as dropdowns, not a 40-word tag gamble

By 0xRavenBlack·Created 2 years ago·Updated about a year ago· 15
OOP Hair 🦰
    • OOP_HAIR
    style
    main_colorBlack
    optional_color
    randomizefalse

    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). Default Black.
    • 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/Undercut read 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_color left 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.

    CategoryObject-Oriented Prompting

    Inputs (4)

    NameTypeDefaultDescription
    styleCOMBO11 options: Short, Long, Curly, Straight, Wavy, Bald, +5
    main_colorCOMBOBlack46 options: , Black, Brown, Blonde, Red, White, +40
    optional_coloroptCOMBO 46 options: , Black, Brown, Blonde, Red, White, +40
    randomizeoptBOOLEANfalse

    Outputs (1)

    NameTypeDescription
    OOP_HAIROOP_HAIR