How the numbers are checked

On a site that lists things, a bug looks like a missing row. On a site that computes, a bug looks like a plausible wrong number — and nobody notices. So every formula here is anchored to something published outside this site.

Colour difference — CIEDE2000

Checked against the 34 reference pairs published by Sharma, Wu and Dalal alongside the formula. Those pairs were chosen to sit on its discontinuities: hue either side of the 0°/360° seam, one colour with no chroma at all, the pairs where the rotation term flips sign. An implementation can be right on every colour you would think to try and still fail them. The build refuses to run if a single pair drifts by more than half a unit in the fourth decimal.

What a ΔE00 number means — our reading, not a standard

The CIE publishes a formula, not a table of adjectives. The words this site puts next to a distance are ours:

Below 1.0

Not distinguishable — an ordinary observer cannot tell them apart even side by side.

1 to 2

Barely distinguishable — a trained eye spots it when the two touch.

2 to 5

Visibly different when compared, easily mistaken from memory.

5 to 10

Clearly different — nobody would call these the same colour.

Above 10

Different colours, related only in that both are colours.

Conversions

sRGB, CIELAB and OKLCh, following CSS Color 4 — which means CIELAB here is relative to the D50 white point, so a lab() value printed on a page is the colour your browser will actually render. The conversions are checked two ways: every one round-trips to within 1e-10, and the sRGB primaries land on their published positions in Lab.

A detail worth stating because it surprised us: the matrices published for the two directions are rounded independently and are not exact inverses of each other. Ours are computed from the forward matrices, which is also why pure white comes out at exactly L* 100 here rather than 100.0000014 — and why "is this colour neutral" has an exact answer.

Contrast — two measures, and why both

WCAG 2.1 is the normative one and it is anchored to a value anyone can verify: black on white is exactly 21:1. The thresholds printed on this site are the ones the standard sets — 4.5:1, 3:1, 7:1 — and nothing else.

Its known weakness is that it is a luminance quotient and therefore symmetric: swap the text and the background and the number does not move. Anybody who has built a dark theme has met the consequence. APCA, drafted for WCAG 3, is polarity-aware — light text on dark returns a negative Lc, and that sign is the information the ratio throws away.

APCA is a set of exponents and clamps rather than a derivation, so a mistyped constant gives a plausible two-digit number with nothing to catch it. This site therefore ships 900 reference pairs generated by the authors' own published implementation — both polarities, the near-black soft clamp, the low-contrast clip and the extremes — and the build fails if one of them drifts by more than 1e-4. What this site will not do is turn an Lc into a verdict of its own: the levels below are the draft's, quoted.

Colour vision deficiency

The three dichromacies are simulated as what they are: a projection in LMS cone space, following Viénot, Brettel and Mollon. Every colour collapses onto the plane the two remaining cone types can still span.

That construction comes with two properties that are arithmetic rather than opinion, and both are asserted over the sRGB cube before a page is built: white must come out white (the projection is built to fix the neutral axis), and running it twice must change nothing the second time. A "simulation" built by scaling channels — which is what most quick implementations are — fails the second one immediately.

What this does not model is anomalous trichromacy, which is far commoner: there the cone is present but shifted, and such a viewer sees more difference than these pictures show and less than you do. No single image represents it, so the site names the conditions it models and claims nothing more.

How the core set is chosen

The scale pages and the pair pages are built from a core set, and the rule is the whole selection — there is no hand-picking, because "editor's picks" from a machine is a lie. For each hue family, and for each of seven target lightnesses in OKLCh (18%, 30%, 42%, 54%, 66%, 78%, 90%), take the curated colour whose lightness is nearest that target; where two are equally near, the one using more of the available chroma wins, and where that still ties, the alphabetically first. Duplicates — a family handing the same colour to two neighbouring targets — are dropped rather than replaced, because replacing them would need a tie-break nobody could check. Ten groups times seven lightnesses is seventy; 69 survive.

How a colour gets put in a family

Nine families, each anchored on a colour nobody argues about. The line between two neighbours is the midpoint between their positions in OKLCh — and those positions are measured by the same conversions this site runs, not taken from a colour wheel drawing.

That distinction is not pedantry. The first version of this site cut the circle into twelve even 30° slices starting at zero and confidently called #c93f38 — a plain red — an orange, because in OKLCh pure red sits at 29.2°, not at 0°. Twelve even slices also produce families a few degrees wide that almost nothing lands in: green and cyan are 52° apart, cyan and blue 69°.

pink

345.4° → 15.8°

anchor #ff0080 at 2.5°

red

15.8° → 41.1°

anchor #ff0000 at 29.2°

orange

41.1° → 81.4°

anchor #ff8000 at 53°

yellow

81.4° → 126.1°

anchor #ffff00 at 109.8°

green

126.1° → 168.7°

anchor #00ff00 at 142.5°

cyan

168.7° → 229.5°

anchor #00ffff at 194.8°

blue

229.5° → 279°

anchor #0000ff at 264.1°

violet

279° → 311.1°

anchor #8000ff at 293.9°

magenta

311.1° → 345.4°

anchor #ff00ff at 328.4°

Chroma is consulted first: below 0.03 a colour has no hue worth naming and goes to theneutrals, which is where a quarter of the dataset (8,008 colours) ends up.

The shelf this site does not stock

The most asked question in this corner of the web is how to convert a proprietary colour system into a hex value. Those catalogues are registered names attached to licensed, measured colour books, and republishing their numbers is not a grey area — it is the product itself. So there is not one of them anywhere on this site: not in the brand, not in a title, not in a URL, not in body copy, and not in the dataset. A test fails the build on any of them, and it is the reason two names were dropped from the 31,916 before a single page was generated.

Where the colour names come from

The color-names dataset, MIT licence — 31,916 names, each mapped to exactly one hex. The file is pinned by its SHA-256 in the build script, so an updated dataset is a deliberate decision rather than a silent republication of several thousand different numbers.4,959 of them are marked as good names by the dataset's own author, and those are the ones with pages here. That selection is not our judgement and we do not present it as ours.

The dataset gives a name and a hex and nothing else. So this site says nothing about what a colour means, what it does to a mood, or what it says about a brand. There is no data behind any of that, and inventing it is how reference sites stop being reference sites.

What the site knows about you

Nothing you type leaves the page. The contrast tool, the difference tool and the accessible colour search all run in your browser, on the same code that built the pages.The privacy page says it in full.