A color tool for designers. Pick a hue, decide its saturation, and choose how bright the main color is. Optional hue drift adds warmer darks or cooler lights. Built in OKLCH, where equal lightness reads as equal brightness across every hue.

Desen OKLCH Color Schema Generator

100
200
300
400
500
600
700
800
900
1000
1100
93FFBFL0.92
FFFFFFL1.00
E2FDEBL0.97
B2EFC8L0.90
89E2ACL0.84
5ED492L0.78
20C678L0.73
1C8551L0.55
00502CL0.38
00270EL0.24
000801L0.12
000000L0.00


Why OKLCH?

In HSL, “50% light” yellow looks blinding while “50% light” blue looks heavy — same number, different perceived weight. OKLCH was built so a lightness value means the same thing across the wheel. All three swatches below sit at L = 0.7, C = 0.14 in different hues. They feel equally bright.

H25
H145
H240
How it works

Three inputs run everything: a hue, a peak chroma, and a hero lightness. Light and dark anchors stay constant across every scale so families align, while accent and soft pull toward your hero to give each family its character. Chroma follows a bell curve peaking at the hero — and optional hue drift lets warm or cool tones creep in at the ends without breaking the math above.

Lightness (L)

Step 600 lands at your hero lightness. Step 100 is white, step 1100 is black. Everything in between is derived.

StepNameFormula
100white1.000
200wash0.970
300tint0.900
400softheroL + (2/3) × (tint − heroL)
500accentheroL + (1/3) × (tint − heroL)
600heroheroL (input)
700heroL × 0.75
800heroL × 0.52
900heroL × 0.32
1000heroL × 0.15
1100black0.000

Soft + accent split [hero → tint] into equal thirds so steps 300 / 400 / 500 / 600 all get the same L gap, regardless of where the hero sits on the axis.

Dark decay uses positions {0.25, 0.48, 0.68, 0.85}instead of equal 1/5 steps. Gaps shrink as L decreases — Weber-aware, so each dark step stays perceivably distinct rather than mathematically equidistant. At default darkCap = 0 this evaluates to heroL × {0.75, 0.52, 0.32, 0.15}.

Hue per step = hue + lightShift + (darkShift − lightShift) × (i / 10). With both shifts at 0 (default), every step sits at the base hue. Non-zero shifts drift the hue at the extremes — subtle ones read as “warm in the shadows” or “cool in the highlights” depending on direction.

Chroma (C)

Saturation per step as a ratio of your peak. The bell curve below keeps the lightest and darkest tones from feeling muddy.

StepRatioIntent
1000pure white
2000.22soft wash
3000.48tint
4000.68soft accent
5000.85strong accent
6001.00full hero
7000.72strong shade
8000.54mid shade
9000.42deep shade
10000.28near-dark
11000pure black

Final chroma = peakC × ratio. Designers tweak peakC with the Saturation slider.

Neon (off-scale)

Sits at step 0, outside the 100–1100 ramp. Computed independently: binary-search for the maximum reachable chroma at L ≥ 0.70 for the given hue, with per-hue targets for the hues that naturally hold more saturation.

HueFamilyTarget C
28°red0.185
55°orange0.170
239°blue0.165
300°purple0.185
350°plum0.185
any other0.138

Floor: L ≥ 0.70. If the target chroma isn't reachable at L = 0.70, the algorithm climbs slightly to maximize C × L instead.

Design Tool·2026