Drop a chart, heatmap or micrograph here
or click to choose · Ctrl+V to paste · release anywhere on the page
PNG / JPEG / WebP / first frame of GIF / BMP. The image is decoded with Canvas in your own browser and is never uploaded. The colormap audit below works without any upload.
Colour vision deficiency views
Palette safety audit
Per-view verdict
Pairwise ΔE00 matrix
Each cell is the CIEDE2000 difference between two colours under that view: ≈2.3 is the threshold for "just noticeably different", and ≥20 is what it takes to tell colours apart at a glance. Cell colour follows <10 danger / 10–20 marginal / ≥20 safe. Under a deficiency the comparison is made on the **simulated** colours, which is what a reader actually sees.
Greyscale print check
Safety audit of common colormaps
Sampled from matplotlib's official colormap lookup tables; each band runs from the lowest to the highest value. The verdict asks one question — can this map be read in order? Lightness must be monotonic (otherwise a reader cannot map colour back to value), and it must keep a usable lightness span once colour vision deficiency is simulated. The severity slider above also applies to this table.
What this is
This is a colour vision deficiency simulator and scientific palette checker that runs entirely in your browser. Upload a chart, heatmap or micrograph and it re-computes every pixel with the physiological model of Machado, Oliveira & Fernandes (2009), so you see the same figure the way a protanope, deuteranope or tritanope does — plus achromatopsia and greyscale print. Roughly 8% of men and 0.5% of women have some form of colour vision deficiency, and the conventions of scientific figures (red-up/green-down, red-versus-green contrasts, rainbow colour bars) land precisely in the region this population cannot separate. That is not only an accessibility issue: it decides whether your figure is read correctly.
Eyeballing a simulation usually ends in "looks fine", so the tool quantifies the verdict: it extracts the dominant colours (median-cut refined by Lloyd iterations in CIELAB), computes CIEDE2000 for every pair, and reports a safe / marginal / unsafe verdict per view together with the exact colour pairs at fault. A separate greyscale check flattens the colours to luminance and compares lightness, because papers are still printed in black and white. The lower half generalises this to colormaps: 34 common maps — viridis, cividis, jet, rainbow, RdYlGn and friends — are audited so you know which ones you can trust for continuous data.
Features
- Six views side by side: original, protanopia, deuteranopia, tritanopia, achromatopsia and greyscale print.
- Adjustable severity: a continuous 0–100% slider. 100% is full dichromacy; intermediate values model anomalous trichromacy, which is where most people with a deficiency actually sit.
- Palette safety audit: extracts 2–16 dominant colours, scores every pair with ΔE00, lists the pairs that merge per view, and gives you copyable hex values.
- ΔE00 matrix heatmap: lays out which colours conflict as a single matrix with red/amber/green cells, so you are not guessing figure by figure.
- 34 colormaps audited: the viridis family, cividis, turbo, jet, rainbow, hsv, RdBu, RdYlGn, seismic and more, each drawn as a band in normal vision and under three deficiencies.
- Fully local, zero uploads: decoding, simulation, scoring and export all happen in your browser — there is no upload endpoint, and it works offline. Dark and light themes, and Simplified / Traditional Chinese / English interfaces.
How to use it
- Drag an image onto the page (release anywhere), click "Choose an image", or just press Ctrl+V to paste from the clipboard.
- Compare the six views: if two colours look identical in the protanopia or deuteranopia panel, they will look identical to a real reader too. Drag the severity slider to see whether the difference fades gradually or collapses at once.
- Read the palette audit below. If it says unsafe, the cards name exactly which colour index conflicts with which, and by how much; click a swatch to copy its hex value and fix your legend.
- Repeat with other figures. If your question is "which colour map should I use", jump to the colormap table at the bottom, filter by "Problematic only", and avoid the rainbow maps with non-monotonic lightness.
How the verdict is computed
The simulation uses the physiological model of Machado, Oliveira & Fernandes (2009, IEEE TVCG): sRGB is converted to linear RGB, multiplied by the 3×3 matrix for that deficiency type at the given severity, and converted back. The matrices are the published 0.0–1.0 tables at 0.1 steps with linear interpolation in between; every row sums to exactly 1, so the white point stays put and overall brightness is not altered artificially. It was chosen over Brettel/Viénot because it carries a severity dimension natively, so modelling anomalous trichromacy needs no extra parameters. Achromatopsia and greyscale use the relative-luminance weights directly — the chromatic information is simply gone.
Colour difference is CIEDE2000 (implemented to the Sharma, Wu & Dalal 2005 specification), not the textbook CIE76 Euclidean distance, which overstates differences between saturated colours — exactly the red/green/blue directions where it would mislead you most. Thresholds: ΔE00 < 10 is unsafe (effectively the same colour), 10–20 is marginal (separable against the legend, easily confused at a glance), and ≥ 20 is safe. The greyscale check uses ΔL* instead: < 5 unsafe, 5–12 marginal, ≥ 12 safe.
For a colormap the verdict rests on two things: lightness monotonicity (net lightness change divided by total variation; 1 means strictly monotonic) and the lightness span that survives each simulated deficiency. A non-monotonic map (jet, rainbow, hsv and the rest of the rainbow family) prevents readers from mapping colour back to value and is judged unsafe; a map whose span collapses is judged marginal. Every test is run under normal vision and under protan, deutan and tritan simulation, and the worst result becomes the verdict.
Frequently asked questions
- Is my image uploaded anywhere?
- No. The whole pipeline — decoding, per-pixel simulation, palette extraction, colour-difference scoring and the comparison export — runs in your browser. This page is pure static HTML with no upload endpoint; you can disconnect from the network and it still works. Unpublished figures, clinical photographs and pre-patent data are all fine.
- Why is pure red versus pure green only "marginal" under deuteranopia?
- Because pure red (L*=53) and pure green (L*=88) differ by 35 in lightness. A deuteranope cannot use the red-green axis, but can still separate them by brightness — measured ΔE00 stays around 19.5. What really collapses is **equiluminant** red and green: RGB(200,60,60) against RGB(110,150,60) scores 56.9 for normal vision and drops to 5.7 under deuteranopia, and that is what gets flagged unsafe. So do not relax when you see "marginal": look at the specific pairs listed in the card — those are the ones to fix.
- Why is turbo flagged unsafe? Wasn't it designed to replace jet?
- Turbo does fix several hard problems with jet (no ugly dark band, more even colour discrimination), but it is still a rainbow map with non-monotonic lightness: measured L* climbs from 12 to 91 and falls back to 24. Non-monotonic lightness means one brightness level corresponds to two different values, so readers cannot infer value from colour, and it survives greyscale printing poorly. Crameri et al. (2020, Nature Communications) explicitly place turbo in the "should no longer be used" category. For continuous data, use a lightness-monotonic sequential map: viridis, cividis, magma, inferno or plasma.
- Where do the 10 / 20 thresholds come from?
- ΔE00 ≈ 2.3 is the CIE-recommended just-noticeable difference, but being able to see that two colours differ is a long way from being able to name them or match them against a legend quickly. In a real figure a categorical palette needs more headroom: below 10, most people read the two colours as one; between 10 and 20 you have to keep going back to the legend; above 20 you can tell them apart at a glance. The greyscale thresholds of 5 and 12 follow the same logic, measured as lightness difference. They live at the top of cvdcore.js?v=21411da0 and are fully traceable — not arbitrary.
- Can I use the simulation as a diagnosis?
- No. This is a self-check tool for colour choices. It applies a published physiological model to a "typical" deficiency so you can see what your figure may look like to someone else; real deficiencies vary far more than any model, and no display is spectrally accurate. For an actual assessment of your own colour vision, see an eye-care professional.
Other tools on this site
- Image Compression (PNG/JPEG/WebP)
- Image Format Converter
- Function Grapher
- PDF Toolkit
- Venn Diagram Generator
- Text Diff & Review
- Chinese Converter
- GIF Optimizer
- IP Location Lookup
Runs entirely in your browser · no uploads · free · Simplified / Traditional Chinese / English