EBU PromptHelper Color Palette
A color palette with an opinion — the pack's showpiece
- palette_string
- color1
- color2
- color3
- color4
- color5
- palette_type
- hex_values
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_*_palettestoggles - 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.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| include_analogous_palettes | BOOLEAN | true | — |
| include_art_house_palettes | BOOLEAN | true | — |
| include_chaotic_palettes | BOOLEAN | true | — |
| include_complementary_palettes | BOOLEAN | true | — |
| include_compound_palettes | BOOLEAN | true | — |
| include_split_complementary_palettes | BOOLEAN | true | — |
| include_tetradic_palettes | BOOLEAN | true | — |
| include_triadic_palettes | BOOLEAN | true | — |
| palette_size | COMBO | 4 colors | 3 options: 3 colors, 4 colors, 5 colors |
| prefer_color_family | COMBO | None | 16 options: None, Reds, Pinks, Oranges, Yellows, Greens, +10 |
| avoid_color_family | COMBO | None | 16 options: None, Reds, Pinks, Oranges, Yellows, Greens, +10 |
| seed | INT | 00–18446744073709550000 | — |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| palette_string | STRING | — |
| color1 | STRING | — |
| color2 | STRING | — |
| color3 | STRING | — |
| color4 | STRING | — |
| color5 | STRING | — |
| palette_type | STRING | — |
| hex_values | STRING | — |