Nodes/EBU PromptHelper/EBU PromptHelper Color Palette
ComfyUI Node

EBU PromptHelper Color Palette

A color palette with an opinion — the pack's showpiece

By burnsbert·Created 2 years ago·Updated 24 days ago· 2
EBU PromptHelper Color Palette
    • palette_string
    • color1
    • color2
    • color3
    • color4
    • color5
    • palette_type
    • hex_values
    include_analogous_palettestrue
    include_art_house_palettestrue
    include_chaotic_palettestrue
    include_complementary_palettestrue
    include_compound_palettestrue
    include_split_complementary_palettestrue
    include_tetradic_palettestrue
    include_triadic_palettestrue
    palette_size4 colors
    prefer_color_familyNone
    avoid_color_familyNone
    seed0

    Random Color Palette is the node EBU PromptHelper is named for. Where the rest of the pack shuffles words, this one generates actual color palettes using real color-theory methods - analogous, complementary, triadic, tetradic, split complementary, compound, and two wildcards ("art house" and "chaotic") - then hands you the colors as names, as individual outputs, and as hex codes. You get a coherent scheme rather than a random grab-bag of hues, which is exactly what you want when you're describing a scene's palette to a model: analogous schemes read calm, complementary schemes read loud, and the node picks the method for you.

    How it works

    This is the deepest mechanism in the pack. Each palette type has its own generator that works off a master color wheel (a 143-entry COLORS dictionary of named colors mapped to hex, plus color-family groupings in color_data.py). For a given run the node picks one enabled palette type at random, generates a palette of your chosen size (3, 4, or 5 colors), and returns it lowercased. The interesting bit is the prefer/avoid color-family logic: if you ask to prefer Reds, it regenerates up to 50 times until the palette actually contains a red; if you say avoid Neutrals, it keeps trying until none slip in. Unsurprisingly, it gives up after 50 tries with a console warning and returns whatever it last generated - so a "prefer Metallics" request can occasionally fail to satisfy itself. It also cancels out if you set prefer and avoid to the same family, with a warning in the console.

    The inputs that matter

    • 8 include_*_palettes toggles - all default on. Turn off the ones you don't like; turn them all off and it defaults back to all types with a warning.
    • palette_size - "3 colors", "4 colors" (default), or "5 colors".
    • prefer_color_family / avoid_color_family - dropdowns: Reds, Pinks, Blues, Metallics, Pastels, Warm Colors, Cool Colors, etc. This is where you steer the mood.
    • seed - 0 for non-deterministic; fix it to reproduce a palette.

    Outputs: palette_string (comma-separated names), color1–color5 (individual colors; empty strings for slots beyond the size you chose), palette_type (which method was used), and hex_values (comma-separated hex). The hex output is the sleeper hit - feed it to a UI or use it to double-check what the names actually are.

    Where it fits

    The pack's example workflow runs this with triadic-only and 3 colors, then feeds the names into Consume List Item nodes to fill MY_COLOR1/2/3 placeholders - each generation gets a fresh, coherent color story. Drop palette_string straight into a prompt block ("palette of deep blues, teal, and warm grey") and let the encoder handle it, which works especially well on modern models that read descriptive text. It's also just fun to run standalone and steal palettes from.

    Install

    Part of EBU PromptHelper. ComfyUI Manager: search "EBU PromptHelper", or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/burnsbert/ComfyUI-EBU-PromptHelper
    

    then restart. No models, no extra dependencies (stdlib only) - the palette math is all in-pack Python.

    Troubleshooting

    Two honest warts. First, the 50-attempt cap: with a restrictive avoid plus a picky prefer, you'll sometimes get a palette that doesn't meet the spec and a warning in the console - rerun (new seed) or loosen the constraints. Second, "3 colors" is implemented by generating 4 and slicing, so a few 3-color palettes can feel like they're missing their best color - cosmetic, not broken. And remember seed 0 = new palette every run; fix the seed once you see a scheme you want to keep while you tune the rest of the workflow.

    CategoryPrompts

    Inputs (12)

    NameTypeDefaultDescription
    include_analogous_palettesBOOLEANtrue
    include_art_house_palettesBOOLEANtrue
    include_chaotic_palettesBOOLEANtrue
    include_complementary_palettesBOOLEANtrue
    include_compound_palettesBOOLEANtrue
    include_split_complementary_palettesBOOLEANtrue
    include_tetradic_palettesBOOLEANtrue
    include_triadic_palettesBOOLEANtrue
    palette_sizeCOMBO4 colors3 options: 3 colors, 4 colors, 5 colors
    prefer_color_familyCOMBONone16 options: None, Reds, Pinks, Oranges, Yellows, Greens, +10
    avoid_color_familyCOMBONone16 options: None, Reds, Pinks, Oranges, Yellows, Greens, +10
    seedINT00–18446744073709550000

    Outputs (8)

    NameTypeDescription
    palette_stringSTRING
    color1STRING
    color2STRING
    color3STRING
    color4STRING
    color5STRING
    palette_typeSTRING
    hex_valuesSTRING