Color Blindness Simulator

Simulate protanopia, deuteranopia, tritanopia and achromatopsia on a pasted hex palette and on an uploaded image, side by side, free and in your browser.

🌐 Español

ColorOriginalDeuteranopiaProtanopiaTritanopiaAchromatopsia
#e63946#e63946#988940#6c6545#fd0040#7c7c7c
#2a9d8f#2a9d8f#858890#95948f#00a099#8d8d8d
#e9c46a#e9c46a#dfcc6d#d6c262#fab7af#c8c8c8
#264653#264653#384053#3f4554#0d4a4a#424242
#457b9d#457b9d#5f719c#6b7a9f#008486#757575
Simulate a photo, screenshot or design (optional)

These simulations are approximations of how a person with each color vision deficiency may perceive colors — full dichromacy (protanopia, deuteranopia, tritanopia) and total achromatopsia. They are not a medical or diagnostic tool, individual perception varies, and milder (anomalous) deficiencies are not modeled. Everything runs in your browser; your colors and images never leave your device.

🔒 Private by design: everything runs locally in your browser and never uploaded to any server.

Design software shows you the colors you picked. This page shows you the colors a meaningful share of your audience actually receives, side by side with the originals, for a pasted list of brand codes and for a screenshot or photo at the same time.

The four simulated views, and the original beside them

The table starts with a Color column echoing the hex code you typed, then Original, then four simulated views. Deuteranopia and Protanopia are the two red-green dichromacies, missing green and red cones respectively, and they are the ones almost every real-world failure comes down to. Tritanopia is the blue-yellow dichromacy and is rare. Achromatopsia is total color blindness, where only brightness survives.

Each of those five headings carries a hover note, one line describing what you are looking at, so you can identify a column without leaving the table.

Pasting a palette, then dropping in a screenshot

  1. Replace the contents of the Palette colors box with your own codes. The leading hash is optional, three-digit shorthand is expanded, and commas, spaces, semicolons and line breaks are all treated as separators.
  2. Read the table row by row. Every cell renders the simulated swatch and prints its resulting hex code underneath, so you can compare output values numerically instead of squinting at two squares.
  3. Load a chart, map, dashboard or photo through the Simulate a photo, screenshot or design (optional) file field. Five captioned canvases appear below, one per column.
  4. Press Choose another image to clear the current preview, then pick a new file from the same field. The palette table and the image preview are independent, so both can sit on screen together.

Unreadable tokens are skipped rather than rejected. Paste a line containing a stray label or a CSS keyword such as rebeccapurple and only the parseable hex codes survive into the table.

The linear-light step that separates this from a CSS filter

The three dichromacy columns use the Machado, Oliveira and Fernandes (2009) severity-1.0 matrices, reproduced verbatim from the published tables. The matrix itself is the easy part. Where quick simulators usually go wrong is what they multiply: sRGB bytes are gamma encoded, and these coefficients are defined on linear light. Here every channel is decoded with the exact sRGB transfer curve first, multiplied, clamped into range, and only then re-encoded back to a byte. Skipping the decode produces results that look plausible and are wrong, especially through the mid-tones where the gamma curve bends hardest.

For the image path the decode is folded into a 256-entry lookup table before the pixel loop begins, since a byte only has 256 possible values, and the alpha byte of every pixel is copied straight through.

Achromatopsia is a luminance grayscale, not a channel average

The last column is not a Machado matrix. It computes Rec.709 relative luminance, 0.2126 R plus 0.7152 G plus 0.0722 B, on linear light, then writes that single value into all three output channels. The naive average of the three channels is deliberately avoided, because it scores a saturated blue and a saturated green as equally bright when they are nowhere close.

Treat that column as the worst case worth designing against. If a status badge or a chart series still reads with hue removed altogether, it reads for everybody. Because each cell prints its hex code as well as its swatch, you can read the two grays off the page directly, or drop the originals into the color converter to see the same gap expressed as HSL lightness. If the colors you want to test are locked inside a screenshot rather than a style sheet, the image color picker will pull them out as hex codes you can paste back in here.

A red and a green that both land on olive

Two colors a dashboard reaches for by reflex: #d62828 for an error state, #2a9d20 for success. Feed both into the box and the deuteranopia column returns #8c7d1f and #94852f. Two olives, eight levels apart in both the red and the green channel. Nothing about the hue distinction that carried the meaning survives.

The same pattern shows up in a palette that looks nothing alike. The default list on the page opens with #e63946 and #2a9d8f, a red and a teal. Under achromatopsia they resolve to #7c7c7c and #8d8d8d, seventeen levels apart on the 0 to 255 scale. That is why the answer is almost never “pick different colors” but “stop carrying the meaning in hue alone”: add an icon, a label, a pattern, or spread the pair further apart in lightness.

Where full dichromacy stops being the whole story

Only severity 1.0 is modeled. Anomalous trichromacy, where a cone is shifted in sensitivity rather than missing, is more common than full dichromacy and lands somewhere between these columns and unmodified vision. Take what you see as the strong end of a range rather than as the single outcome, which is the same point the widget makes in the disclaimer it prints beneath itself.

Everything happens in the tab. The picture is decoded with createImageBitmap into a canvas your browser owns, and there is no request that could carry an unreleased mockup anywhere. Once the palette survives this page, take the pairs that also carry text through the WCAG contrast checker, since distinguishable and legible are separate tests. If a palette collapses badly here, the color palette generator is a reasonable place to roll a replacement set, and the rest of the developer tools hub covers the surrounding formatting and encoding work.

See it in action

Screenshot of the Color Blindness Simulator tool with an empty dropzone waiting for an image to simulate colour-vision deficiencies against
Color Blindness Simulator mid-process: an empty dropzone waiting for an image to simulate colour-vision deficiencies against.
Screenshot of the Color Blindness Simulator result screen showing the image rendered as it appears under different types of colour blindness, side by side with the original
The finished result: the image rendered as it appears under different types of colour blindness, side by side with the original. The download link is a local blob URL — the file never leaves your device.

Frequently asked questions

Which deficiencies does the table cover, and in what order?

Five columns, left to right, after the column holding your own hex code. Original comes first, then Deuteranopia (green cones absent), Protanopia (red cones absent), Tritanopia (blue cones absent) and Achromatopsia (no color at all). The first two are the red-green forms and by far the most frequently encountered; tritanopia and achromatopsia are both rare. Hovering a column heading shows a one-line note describing that deficiency.

Does the palette box accept anything other than six-digit hex codes?

It accepts three-digit shorthand and makes the leading hash optional, so a bare f0a is expanded to the same color as the full six-digit form. Commas, spaces, semicolons and line breaks all work as separators, so a list copied out of a design tool usually pastes in without editing. Tokens it cannot read are dropped in silence rather than raising an error, which is what lets the table keep rendering while you are still halfway through typing a code.

Why do white, mid gray and black come back unchanged in every column?

Because that is what a correct model does. Each of the three Machado matrices has rows that sum to almost exactly 1.0, so an input where red, green and blue are equal passes through untouched, and the achromatopsia column is a grayscale conversion, which cannot alter something already gray. Paste pure white, mid gray and black and every one of them comes back with the same code in all five columns. It is a quick sanity check that the transform is behaving.

Is the uploaded image simulated at its original resolution?

Not always. Before anything is computed the picture is drawn into a working canvas capped at 1000 pixels on its longest side, which keeps five parallel canvases and four full pixel passes responsive on a large photo. Smaller pictures are used at their own size. Judging whether two colors remain distinguishable does not need more resolution than that, and the palette swatches above are computed from your exact hex values with no downscaling at all.

Does passing this check mean my colors also pass WCAG contrast?

No, these are two different questions. This page asks whether two colors stay distinguishable from each other once cone response changes; WCAG contrast asks whether text is legible against the surface behind it, which is a luminance ratio and is unaffected by which cones you have. A palette can survive every column here and still put light gray text on white. Run the pair through the site's WCAG contrast checker as well.

Can I use this to find out whether I am color blind?

No. It renders an approximation of how someone with a given deficiency may perceive a color, which is the opposite direction of travel from a diagnosis, and the page says as much in the disclaimer under the widget. Real perception varies between individuals with the same nominal diagnosis. Anything that matters clinically belongs with an optometrist and a proper plate or anomaloscope test.

Related tools