Anomaloscope

a buildable color-vision test · citizen science for color perception
not connected

What this measures

This is a Rayleigh match. With normal color vision you can mix red and green light until it looks identical to a yellow — two different spectra that produce the same signal in your cones (a metamer).

The interesting number is not the mixture you settle on, but how wide a range of mixtures you accept as "the same yellow." Most people accept a fairly wide band. A tetrachromat — someone with a fourth cone type — breaks that metamer and accepts a narrower band. The width of your matching range is the signal.

Why a screen can't do this. A real match needs near-pure single-wavelength lights. Your monitor has only three broad primaries and can't make them — a "screen anomaloscope" would measure your display, not your eyes. That's why this test runs on a small LED device you build, with an orange filter and a diffuser. hardware required

Testing for tetrachromacy

Most people are trichromats: three cone types (roughly red, green, blue). A small number — almost always women, through X-linked variation in the cone-opsin genes — carry a fourth cone type, with a sensitivity tucked between the usual red and green. If that fourth cone actually feeds perception, the person is a functional tetrachromat and can make color distinctions the rest of us can't.

Why the Rayleigh match finds them

The test asks you to mix red and green light until it matches a yellow. For a trichromat this works because red + green can produce the same cone signals as the yellow — a metamer, two different spectra your eyes can't tell apart. A fourth cone gets a different signal from the red-green mix than from the pure yellow, so the metamer breaks.

The tell isn't which mixture you pick — it's how wide a range of mixtures you'll accept as matching. A trichromat accepts a broad band; a functional tetrachromat accepts a narrow one (or rejects a match a trichromat is happy with). The width of your matching range is the signal. The test brackets both edges (method of limits) and reports it.

What it can and can't say

Contributing your result coming soon

With your consent, the test will let you submit your matching-range width, your device's calibration (so home-built rigs are comparable), and a little non-identifying context — never your name. Aggregated, it becomes an open dataset on how differently people see, and a way to surface candidate tetrachromats for follow-up. Always opt-in: you can run the test and keep your data entirely local.

Build the device

A fork of the BrainardLab Penn Anomaloscope: an Arduino Leonardo driving a yellow LED and an RGB LED, behind an orange long-pass filter and a diffuser.

Anomaloscope prototype in action on a laptop running this page
A working prototype, driven by this page over Web Serial. (Orange filter not yet fitted, so the fields aren't a calibrated match.)

↓ Lid cutting template (SVG — print at 100%) — two 1.5" windows, centerlines, septum mark.

Full BOM, wiring, and CAD are in the project repo. (Build-guide page expands in a later phase.)

Calibrate (do this first)

Two steps. 1) Balance red against green. 2) Bring the mix's brightness down to the yellow. Calibrate with the filter and diffuser in place.

yellow ref
R/G mix
Step 1 — red vs green. Flip between red-only and green-only and set the green gain until they look equally bright on the device.
Step 2 — mix vs yellow. Show the mix beside the yellow and lower the RGB level until they match in brightness.
Optional — check the balance with a DVD scrap. A DVD is a fine diffraction grating (~1350 lines/mm). Hold a piece up to your eye and look at the lit device through it: the RGB LED splits into separate red and green bands; the yellow stays a single band.
  • Balance: set G_GAIN until the red and green bands look equally bright.
  • Filter check: look through the orange filter too — the green band should drop well below the red.
And the giveaway: a matched "yellow" mix shows two bands (red + green) while the real yellow shows one — the metamer your eye is fooled by, pulled apart by the grating. For actual peak wavelengths, photograph the spectrum and measure it (the spectral-calibration step).

Run the test

yellow
your mix
Adjust (warm-up). Make the mix look like the yellow, then lock it.
ratio — · yellow —
Limits (the protocol). From your center, step toward each edge and judge. The range width is the result.
Contribute (optional). Send your result + device calibration to the open dataset — no name, no email, just a random session id. See the Tetrachromacy tab for what this is for.
optional: about you (helps the science)