I made the 495 palettes by having Claude write them from three prompts, all checked in next to the validator: a general one, one that focuses on a single color, and one that asks for specific named palettes. They are not as beautiful as the palettes fractal artists tailor by hand to one particular location, but they serve this project well, where a palette has to work across thousands of places.
The general prompt is short, and it's specific: it says
what "dramatic" means in measurable terms, spreads each batch across a set of
structural templates so the batch isn't twenty versions of one idea, and ends with a
schema. Paste it into a Claude conversation, set the four lines at the top (batch
size, mood family, complexity band, value key), and you get a JSON array of
palettes, each stop in
OKLCH. Run the
validator on the result. It checks the mechanical rules: the loop closes, the number
of stops fits the complexity band, the bright band is feathered rather than cut, a
hard edge carries only a small step, a big hue jump routes through black or white.
To add a batch, put it in data/palettes/batches/<name>/ and run
fractal-wallpapers palettes ingest --drop <name>. Only then does it
become palettes the pipeline can use.
- The palette prompt: data/palette_authoring/generator_prompt.md (v3.1)
- The validator: data/palette_authoring/validate_palettes.py
- What each authored palette was made from: data/palettes/provenance.jsonl
Mood families in the prompt: fire-ice · jewel-earth · atmospheric-deep · antique-faded · high-key-luminous · pastel-iridescent · autumn-ember · oceanic · orchid-twilight · verdigris-copper · ember-in-ash · tonal-restrained · sapphire-rose. Both the mood-family and the value-key lines also accept span, which asks the batch to vary that axis instead of holding it; four of the shipped batches set the mood family that way.