Methodology — How Our Color Vision Plates Are Made

How this site generates its color vision test plates: open-source CIELAB definitions, seeded dot rendering, descriptive scoring, and what is not validated.

Last updated: 2026-10-20

This page documents exactly how every test on this site is built: where the plate designs come from, how they are rendered, how answers are scored, and — most importantly — what has and has not been validated. If you want to know whether to trust a result, read this first.

The three plate banks

The site serves three distinct kinds of plates, each with a public provenance record.

The 14-plate core set (cvp14-v1)

The main screening engine uses fourteen original plate definitions published by the open-source Color Vision Plates project (MIT license, © 2026 Luke Steuber, pinned to commit d49a641). The set contains exactly: one brightness-contrast control plate, five general red-green designs, two protan-directed experimental plates, two deutan-directed experimental plates, and four blue-yellow designs. Every plate is specified in CIELAB: a foreground color and a background color, each with per-channel jitter ranges, plus a fixed random seed that determines the dot layout.

The upstream project — and this site with it — states plainly that these plates have not been clinically validated. No sensitivity, specificity or subtype-accuracy figures exist for them. They were engineered with published color-science methods (CIEDE2000 checks, Brettel-simulation grid searches for the directed plates), which makes them reproducible and honest, not clinical.

The Ishihara digit set (ishihara-rg-v1)

The Ishihara color blind test pages use nine digit plates generated at build time by the MIT-licensed ishihara Python package (© 2026 Vincent Gonzalez, version 0.1.2). Each plate is grown from a fixed seed — the same seed always yields a byte-identical SVG, whose SHA-256 checksum is recorded in our public provenance ledger. Eight red-green digit plates plus one control plate. These are generated artwork in the Ishihara tradition, not copies of the copyrighted clinical booklets.

The kids shape set (kids-shape-v1)

The children's pages use eight original shape plates (circle, star, triangle, heart) designed for this site using the same rendering pipeline and color-science as the core set, with color separations chosen for a playful, low-pressure exploration rather than clinical screening. One brightness control plate opens the set. No reading is required.

How a plate becomes pixels

When a test runs, each plate definition is rendered live in your browser:

  1. A seeded PRNG (mulberry32, from the upstream MIT code) turns the plate's fixed seed into a deterministic stream of random numbers — the same plate renders identically on every visit and every device.
  2. Foreground and background colors are drawn from the CIELAB specification with per-dot jitter, then converted CIELAB → XYZ (D65) → linear sRGB → gamma-encoded sRGB. Matching lightness (L*) between the two families is what prevents solving plates by brightness alone.
  3. Dots are placed with Poisson-disk sampling so they pack evenly with varied radii.
  4. The figure (digit or shape) is rasterized to an offscreen mask, and each dot is colored foreground or background depending on whether its center falls inside the figure.

Because rendering happens client-side, there is nothing to download per plate and nothing that can differ between visitors.

How answers are scored

Scoring is deliberately descriptive. For each answer we record what you entered (or that you saw nothing) and compare it with the pattern actually drawn. The result page aggregates:

That is the entire model. We do not compute a "type", a severity, a probability, or a pass/fail against a norm, and the interface never tells you that you are (or are not) color blind. The upstream plate author's own classification labels were intentionally not ported, because they are heuristics without clinical validation.

Known limitations we accept on purpose

Reproducibility and audit

Every plate asset and definition has an entry in data/plate-provenance.json (31 entries at publication): source project, license file, version or commit, seed, answer, and — for the generated SVGs — a SHA-256 checksum. The license texts live in the repository's LICENSES/ directory and are summarized on the licenses page. Regenerating the digit plates must reproduce identical checksums; a change means the asset changed, and the version number increments.

Sources we rely on

Change policy

Any change to plate colors, seeds, figures or scoring logic bumps the affected bank's version and is noted here. The plates themselves are meant to be boringly stable: the same test today, next month, and on your next device.