Online Color Blindness Simulators

This page lets you simulate various color vision deficiencies (CVD) directly in your browser. There are many simulation methods, with varying degrees of accuracy. Several are proposed here and they all have been carefully implemented in DaltonLens-Python by reviewing the state-of-the-art and testing them against reference implementations.

The python algorithms are run unchanged in the browser thanks to Pyodide. It's not as fast as the original numpy Python code, but still reasonable for small images. Otherwise you can use DaltonLens for Desktop for real-time simulations. Warning: the page might have issues on 32bit systems, it was only tested on 64bit browsers.

Simulated types of CVD

You can choose between the three common types of color vision deficiencies and use the severity slider to switch between full dichromacy and anomalous trichromacy. Here are the 3 kinds of CVD that can be simulated:

Protanopia / ProtanomalyDeficient L-cones (roughly centered on red), leading to red-green blindness.
Present in some form in ~2% of males and ~0.04% of females.
Deuteranopia / DeuteranomalyDeficient M-cones (roughly centered on green), also leading to red-green blindness.
Present in some form in ~6% of males and ~0.39% of females.
Tritanopia / TritanomalyDeficient S-cones (roughly centered on blue), leading to blue-yellow blindness.
Present in some form in ~0.002% of males and ~0.001% of females (very rare).
The deficiency type can be determined via color blindness tests. Serious ones have to be done in person with an eye doctor, but online tests like the colorlitelens tests can give you a good hint.

Implemented methods

Brettel 1997From the research paper by Brettel, Viénot & Mollon in 1997 Computerized simulation of color appearance for dichromats. This is the most solid reference, and it is the only one that also models tritanopia reasonably well (blue-yellow blindness). This version has been adapted to modern sRGB monitors.
Viénot 1999 From the research paper by Viénot, Brettel & Mollon in 1999 Digital video colourmaps for checking the legibility of displays by dichromats. A simplification of the Brettel 1997 method for protanopia and deuteranopia, so it's a bit faster. This version is also adapted to modern sRGB monitors.
Machado 2009 From the research paper by Machado, Oliveira & Fernandes in 2009 A physiologically-based model for simulation of color vision deficiency. Pretty similar to Brettel 1997 for full dichromacy (severity 1), but it has a theory to model anomalous trichromacy for protans and deutans. It is not accurate for tritans though.
Vischeck Vischeck was a popular website to simulate color blindness. It implemented the Brettel 1997 approach, but using somewhat outdated parameters (derived for CRT monitors). Still it's one of the most solid reference implementation. The website is not running anymore, but the code is now used in the GIMP display filters.
Machado 2009 (without sRGB decoding) Same as Machado 2009, but without any sRGB decoding. This is supposed to be wrong, but including it as there were some online discussions about this as one of the authors said that it was not necessary for their paper.
Coblis V1 Method that was implemented in the initial version of the Coblis color simulator.. Unfortunately this one is very inaccurate and has no proper background. This method is also sometimes referred as the "ColorMatrix" from colorjack. You can read more about its history here. It is included mostly to show how inaccurate it is. It's still very popular as it was one of the earliest, and is very easy to implement.
Coblis V2 Current method implemented in the Coblis color simulator., based on the HCIRN Color Blind Simulation function. It is better than V1, but still lack a solid background, so I do not recommend it.

To learn more about these CVD simulation methods you can check these technical articles:

How accurate are these color blindness simulations?

These simulations are never perfectly accurate. For one, there are significant per-individual variations, so even two strong-deuteranopes are unlikely to have the same perception. Then the properties of the monitor, ambient light, etc. vary and impact color perception. Last, these models of human perception remain simplified approximations.

This being said you can still expect a reasonable accuracy with Brettel 1997 (and Vischeck) for the 3 kinds of CVD, and with Viénot 1999 and Machado 2009 for protanopia and deuteranopia. I would not recommend the Coblis methods (especially V1) as their background is less solid.

If you have a CVD then you can evaluate the accuracy yourself to some extent. If you have a strong deficiency (dichromat) and if the simulation of your condition were perfect, then you would not see any difference between the original image and the simulated one. If your deficiency is weaker (anomalous trichromacy), you'll need to adjust the severity slider, and the model that allows the differences to vanish with the highest degree of severity would be the most accurate. Note that only the Machado et al. 2009 approach actually tries to model anomalous trichromacy, the other ones are just interpolating with the original image.

In practice it is likely that the simulated image will look very similar for images with small objects like line plots or Ishihara plates, but you might spot more differences on large uniform areas as the deficiencies are less severe in that case.

If you have normal vision then you can't really tell if it's correct or not. This is why some inaccurate methods have remained very popular, most people can't tell that they're wrong :)

Choose an Image

Or upload your own:

Simulation method


Severity: 1
A severity of 1 means full protanopia/deuteranopia/tritanopia.
Python progress...
Current Image
Hint: click on the image at any time to show the original.
filtered = image
simulator = simulate.Simulator_Brettel1997() filtered = simulator.simulate_cvd(image, deficiency=simulate.Deficiency.#{deficiency}, severity=#{severity})
simulator = simulate.Simulator_Vienot1999() filtered = simulator.simulate_cvd(image, deficiency=simulate.Deficiency.#{deficiency}, severity=#{severity})
simulator = simulate.Simulator_Machado2009() filtered = simulator.simulate_cvd(image, deficiency=simulate.Deficiency.#{deficiency}, severity=#{severity})
simulator = simulate.Simulator_Vischeck() filtered = simulator.simulate_cvd(image, deficiency=simulate.Deficiency.#{deficiency}, severity=#{severity})
simulator = simulate.Simulator_Machado2009() simulator.imageEncoding = convert.ImageEncoding.LINEAR_RGB filtered = simulator.simulate_cvd(image, deficiency=simulate.Deficiency.#{deficiency}, severity=#{severity})
simulator = simulate.Simulator_CoblisV1() filtered = simulator.simulate_cvd(image, deficiency=simulate.Deficiency.#{deficiency}, severity=#{severity})
simulator = simulate.Simulator_CoblisV2() filtered = simulator.simulate_cvd(image, deficiency=simulate.Deficiency.#{deficiency}, severity=#{severity})