Color Blindness Simulator — Brettel 1997 + sRGB-Correct (8 CVD types) | Vectobox
Free color blindness simulator using the peer-reviewed Brettel 1997 algorithm with proper IEC 61966-2-1 sRGB gamma decoding. Simulate protanopia, deuteranopia, tritanopia, achromatopsia, and anomaly severity. 100% in-browser, no upload.
100% in-browser. Your image and colors never leave this tab — no upload, no analytics, no network requests.
Privacy
Every transformation runs in your browser: image decoding, gamma conversion, LMS projection, and severity interpolation. There are no network requests after the page loads, no analytics on the pixels you process, and no telemetry on the colors you enter.
Default algorithm: Brettel-Viénot-Mollon 1997
The default pipeline implements Brettel, Viénot, and Mollon (1997) "Computerized simulation of color appearance for dichromats" (JOSA-A 14(10), 2647-2655, DOI 10.1364/JOSAA.14.002647). For each pixel we decode sRGB to linear-light per IEC 61966-2-1, convert linear-RGB to LMS via the Smith-Pokorny basis (Viénot 1999 normalization), project onto one of two confusion-line half-planes selected by a separating-plane sign, then re-encode back to sRGB.
Why sRGB gamma decoding matters
Most CVD tools skip the sRGB → linear gamma step (or apply it inconsistently). The IEC 61966-2-1 piecewise function (threshold 0.04045) is non-linear: skipping it makes the simulation 1–2 stops too dark for mid-tones. This tool decodes from a 256-entry Float64 lookup table on the way in and applies the exact reverse transform on the way out.
Why Viénot 1999 fails for tritanopia
Viénot, Brettel, and Mollon (1999) showed that protan and deutan confusion lines are nearly co-planar in LMS, so a single 3×3 matrix can approximate the projection. For tritan the two confusion half-planes are well separated, so applying any single matrix gives ~15 ΔE error along the yellow-blue axis. When you select Viénot + tritan we display a warning and fall back to Brettel.
Machado 2009: physiological severity matrices
Machado, Oliveira, and Fernandes (2009) "A Physiologically-based Model for Simulation of Color Vision Deficiency" (IEEE TVCG 15(6), DOI 10.1109/TVCG.2009.113) publishes 11 pre-tabulated 3×3 linear-RGB matrices per CVD type, one for each severity from 0.0 to 1.0. This tool interpolates between adjacent matrices in linear-RGB (per the paper), giving a physically grounded alternative to the geometric Brettel projection.
Accessibility design checklist
Use the side-by-side image preview to verify your design at the three most common CVD types (deuteranomaly, protanomaly, tritanomaly). Use the color-picker table to verify palette pairs have ΔE ≥ 5 under each CVD; the confusion warning catches palettes that fail this check.
FAQ
- What algorithm does this simulator use?
- The default algorithm is Brettel, Viénot, and Mollon (1997), the canonical peer-reviewed dichromat simulation (JOSA-A 14(10), DOI 10.1364/JOSAA.14.002647). The two-half-plane LMS projection correctly handles all three CVD axes. Viénot 1999 single-matrix and Machado 2009 physiological-severity matrices are also provided as alternatives.
- Why does sRGB gamma decoding matter?
- sRGB is a non-linear encoding: a pixel value of 128 corresponds to roughly 22% linear light, not 50%. Skipping the IEC 61966-2-1 decode (a common bug in CVD simulators) makes the simulated image 1–2 stops too dark in mid-tones, and biases the LMS projection. This tool performs the decode via a precomputed Float64 lookup table and the encode via the standard piecewise function.
- Why is Viénot 1999 disabled for tritanopia?
- Viénot 1999's single-matrix simplification depends on the two confusion half-planes being nearly co-planar in LMS, which is only true for protan and deutan. For tritan the half-planes are well separated, so a single matrix produces ~15 ΔE error along the yellow-blue axis. The tool displays a warning and falls back to Brettel 1997 in this case.
- What is the severity slider?
- Anomalous trichromats (protanomaly, deuteranomaly, tritanomaly, achromatomaly) have shifted but functional cone responses. The severity slider (0–100%) interpolates between the original color and the full dichromacy result. For Brettel and Viénot, the lerp is in linear-RGB (equivalent to LMS under these linear projections). For Machado, the lerp is between adjacent published severity matrices.
- Is my image uploaded anywhere?
- No. Image decoding, color conversion, projection, severity interpolation, and PNG download all happen in your browser. There is no upload, no server call, no analytics on the pixels. The page works fully offline once loaded.
- How accurate is this simulation?
- The output matches the Color Oracle desktop app and the DaltonLens online simulator within a few ΔE on standard truth points (e.g. pure red under deuteranopia → ~#9C7700). The constants used (matrix coefficients, anchor planes) are mirrored from the libDaltonLens MIT-licensed C reference and the daltonlens-python implementation, both authoritative.
- What does the confusion warning mean?
- In the color-picker mode, the table lists each palette color and its simulated equivalent. If any two simulated colors are within ΔE 5 (CIE76 Lab distance), the tool flags them as a confusion risk — under the selected CVD they will be hard to tell apart. This is the core accessibility check for palette design.
Related Tools
Color Converter
Convert colors between HEX, RGB, HSL, HWB, OKLCH instantly. WCAG contrast checker and OKLCH-based shade scale included. Runs entirely in your browser.
Color Picker
Privacy-first color picker: extract exact pixel colors and auto-generate palettes from any image with K-means, median cut, or frequency algorithms. Includes WCAG contrast and color blindness simulation.
Contrast Checker
Free accessibility contrast checker showing WCAG 2.2 ratio and APCA Lc (WCAG 3 draft) on one page. Highlights the ~20% of color pairs WCAG 2 misclassifies, with APCA fontLookup table, sample gallery, and lightness-axis adjust. Pure browser, zero tracking.

