Skip to content
HexSlate

Color Blindness Simulator

Severity100%
Every colour in the palette as it is, then as each of the four simulations renders it. Each column heading counts the pairs that become indistinguishable under that simulation.
Original Protanopia2 pairs mergeDeuteranopia1 pair mergesTritanopiaNo pairs mergeAchromatopsia3 pairs merge
#1f77b4 #4e75b4 #4671b4 #00827c #727272
#ff7f0e #a99215 #c5a800 #fc8500 #a3a3a3
#2ca02c #ad962a #988534 #4c9793 #8b8b8b
#d62728 #5f542b #8c7817 #d04400 #6f6f6f
#9467bd #3b71bd #5d7fbc #857871 #7b7b7b

Pairs that collapse under Deuteranopia at 100%

1 pair merges
  • #2ca02c and #d62728 both arrive as #988534 and #8c7817, which is one colour to a viewer with Deuteranopia.

    OKLab distance 0.34 before, 0.043 after · luminance contrast between the two afterwards 1.19:1

Luminance contrast is the number to act on. It is the one difference that survives every simulation on this page, so two categories separated by lightness stay separated whatever the viewer's cones do.

5 coloursDeuteranopia at 100%1 pair merges

The palette opens on the first five colours of matplotlib's tab10, the default series palette behind a large share of the charts on the internet, and three of the four simulations collapse a pair in it. What comes back is a count rather than an impression: which pairs stop being separable, how much perceptual distance each one lost, and what luminance contrast is left between the two afterwards.

About 1 in 12 men cannot separate a red series from a green one

Roughly 8% of men and 0.5% of women of Northern European descent have some form of colour vision deficiency. In a mostly male audience that is about one person in twelve, and red against green is the pair that fails for them. It is also the pair everything defaults to: pass and fail badges, up and down arrows, and the first two series a chart library hands out.

The sexes differ so sharply because of where the genes sit. The long-wavelength and medium-wavelength cone pigments are both coded on the X chromosome. Men have one X, so a single faulty copy is the whole story; women have two, and a working copy on either is usually enough, which puts the female rate near the square of the male one. The short-wavelength pigment is coded on chromosome 7, is not sex-linked, and fails far more rarely: tritanopia is on the order of 1 in 10,000 and affects both sexes equally. That is why colour vision deficiency in practice nearly always means red and green.

The transform is Brettel 1997, not a channel swap

Colour vision runs on three cone types: L peaks near 560 nm, M near 530 nm, S near 420 nm. No cone reports a colour on its own. Colour is the ratio between the three responses, which is why losing one type costs a dimension rather than a colour.

This page uses the transform in Brettel, Viénot and Mollon (1997), "Computerized simulation of color appearance for dichromats", JOSA A 14(10):2647. Each colour is linearised, converted into LMS cone space, projected onto the surface a dichromat's gamut occupies, and converted back. That surface is two half-planes hinged on the neutral axis rather than one, and the difference is visible: the single-plane simplification is fitted to the yellow side of the confusion axis and renders saturated blues and violets as colours no dichromat reports seeing. The channel swaps that circulate in blog posts do not model cone space at all. The output was cross-checked against libDaltonLens, agreeing to within 2 of 255 on one channel over a 421,000 colour grid.

Achromatopsia is the separate case: a luminance projection using sRGB's own weights on linear light, not an average of the three channels. The eye is roughly ten times more sensitive to green than to blue, and averaging turns a readable green-on-blue chart into a flat rectangle.

The pair check is a second step. Each pair is measured by Euclidean distance in OKLab before and after, and a pair that was clearly apart before and lands under 0.05 after is reported as merged. For scale, 0.05 is about the gap between #808080 and #8f8f8f. Pairs already that close beforehand are excluded: blaming a colour vision deficiency for two near-identical swatches sends you off to fix the wrong thing.

Dichromacy, anomalous trichromacy, and what Severity does

Most people with a colour vision deficiency are not missing a cone type. In anomalous trichromacy, which covers protanomaly and deuteranomaly, the third cone is present but its peak has shifted toward its neighbour, so discrimination along that axis is compressed rather than gone. Deuteranomaly alone is around 5% of men, more than every form of dichromacy together. A simulator fixed at 100% overstates what most of its audience experiences, which is why severity is a control.

Be clear about what that control is: it blends toward the dichromat result in linear light. Shifting a cone's peak is a different operation from blending, so 60% here means milder than a dichromat, not deuteranomaly. The 100% position is the one the published model backs.

What to change when a pair is flagged

Hue is the channel that fails, so every fix moves the meaning somewhere else.

  • Never let hue be the only difference. Add a dash pattern, a marker shape, a fill texture, a position, or a label written on the line instead of a legend keyed by colour.
  • Check luminance contrast between adjacent categories. Lightness survives every simulation on this page, achromatopsia included, so categories that differ in lightness stay separable whatever the viewer's cones do. The contrast checker gives that number for any pair.
  • Order a categorical scale by lightness rather than by hue. A scale stepped that way also reads correctly in greyscale, on a failing projector and in a photocopy.
  • Start from a set that already passes. The Okabe-Ito colour universal design palette, on the button to the left, clears all three dichromacies here. Build from it, or take it into the palette generator.

What this simulation is not

It is a simulation of a model, not a window into anybody's eyes. Brettel's transform predicts what a colour reduces to under an idealised dichromacy on an sRGB display. Real perception varies with severity, with adaptation, with the screen in front of the person, and with the colours next to the one being judged, and no two people with the same diagnosis describe the same thing. Treat the output as a design check on your palette. It is not a medical test, it diagnoses nothing, and a result here says nothing about your own vision. Ishihara plates and an anomaloscope exist for that, read by someone qualified.

Common problems

  • The table flags a pair I can still tell apart. The threshold is an OKLab distance of 0.05, calibrated for the judgement that matters: two chips on opposite sides of a chart, not two patches touching. Colours that close are separable edge to edge and not separable across a legend.
  • Nothing changes when I switch deficiency. Your palette varies mostly in lightness rather than hue. That is the good case, and the property worth keeping as you add colours.
  • The image preview is smaller than my file. It is resampled to 1200 pixels on the longest edge. The transform has no spatial component, so the preview shows exactly what the original would, and the resample is what keeps a 24-megapixel photo from locking the tab on every slider move.
  • A colour I typed vanished from the table. Only fields that parse are simulated, so a half-typed value is left out rather than treated as black. The status bar counts them.

Frequently asked questions

Which simulation should I design against?

Deuteranopia first: deuteran deficiencies are the most common by a wide margin, which is why it is the default here. Then protanopia, which confuses a similar set of pairs and darkens reds as well. Tritanopia is rare enough to be a check rather than a constraint, and achromatopsia doubles as your greyscale and printing test.

Is this a colour blindness test?

No, and it cannot be one. It transforms colours you supply and measures nothing about the person at the screen. For your own vision, see an optometrist.

Does my image leave my device?

No. The file is decoded by your browser, drawn to a canvas and transformed pixel by pixel in this tab. There is no upload, no server to upload to, and no size limit beyond your own memory. Open the network tab and drop a file: the request count does not move. The palette and the two settings travel in the URL; the image deliberately does not.

Is a colourblind-safe palette enough on its own?

No. A safe palette means no two categories collapse into each other, which is necessary and not sufficient. Colour still fails on a bad projector, in a printed handout, on a phone in sunlight, and in a screenshot pasted into a ticket. Colour vision deficiency is simply the case predictable enough to simulate.

Why does the palette stop at 16 colours?

The pair check is quadratic and a shareable link has to stay a link. It is not much of a constraint: twelve series is already hard for readers with ordinary colour vision, and the fix is fewer series or direct labels, not more colours.