Johannes Itten & the Bauhaus
Johannes Itten (1888–1967) was a Swiss painter and one of the first masters at the Bauhaus, where he ran the famous preliminary course. His book The Art of Color (1961) laid out a practical grammar of color: a wheel to organize the hues, and a set of seven contrasts describing the distinct ways two or more colors can act on each other. Place Itten borrows both — the wheel supplies the colors, the contrasts decide how they're paired.
The 12-hue wheel (Farbkreis)
Itten's wheel starts from the three primaries — yellow,
red, blue — mixes them into three secondaries, and fills
the gaps with six tertiaries for twelve hues in all.
Two facts about this ordering drive everything downstream: colors
directly across the wheel (positions i and
i + 6) are complementaries, and the wheel
divides into a warm half (yellow → red-violet) and a
cool half (violet → yellow-green).
- yellow #F7D417
- yellow-orange #F59B00
- orange #ED6A00
- red-orange #E1470E
- red #BE1E2D
- red-violet #A2195B
- violet #652D86
- blue-violet #2E3192
- blue #0061A8
- blue-green #00A19A
- green #00A651
- yellow-green #8CC63F
The seven contrasts
Each contrast is a different relationship between colors. Place Itten
implements all seven as palette generators; the live image beside each
one is produced by this service right now. Force any of them with
?contrast=.
From theory to PNG
Every request walks the same deterministic pipeline. The same URL always produces byte-identical pixels, which is what makes the images usable as stable mockup placeholders.
-
A seed is taken from
?seed=, or derived from the requested dimensions when none is given. -
The seed is hashed (
xmur3) into a 32-bit number that feeds a tiny seeded PRNG (mulberry32) — deterministic randomness. -
That PRNG (or your
?contrast=override) picks one of the seven contrasts. - The contrast's generator pulls hues from the 12-hue wheel and returns a palette: a list of colors plus area weights.
- A second, independent PRNG stream chooses a Bauhaus layout — weighted split, stripes, a Mondrian-style grid, a diagonal, or floating shapes. (The extension contrast always uses the weighted split, so its area ratios stay visible.)
-
pureimagerasterizes the composition and encodes it to a PNG — pure JavaScript, no native dependencies, happy on a serverless function.