Methodology
How the test actually works.
Written for technically-minded readers and clinicians. If you want the rigorous version, this page is for you.
Gabor patches at five spatial frequencies.
Each trial presents a Gabor patch — a sine-wave grating windowed by a Gaussian envelope — at one of five spatial frequencies (1.5, 3, 6, 12, 18 cpd), tilted ±15° from vertical with random orientation. The patch is shown for roughly 250 ms with smooth onset and offset, then disappears. The observer answers “left” or “right” — a two-alternative forced choice on tilt. Chance is exactly 50%.
Gabor stimuli are the standard tool for measuring contrast sensitivity at a single spatial frequency because the Gaussian envelope localizes the patch in space without introducing extra frequency components that the visual system could use as edge cues. Tilt discrimination is detection-equivalent at low contrast: if you can’t see it, you can’t tilt-judge it.
| Parameter | Value |
|---|---|
| Stimulus | Gabor patches (sine grating × Gaussian envelope) |
| Carrier orientations | ±15° from vertical (2AFC tilt) |
| Spatial frequencies | 1.5, 3, 6, 12, 18 cpd |
| Presentation duration | ~250 ms, raised-cosine onset/offset |
| Mean luminance | Mid-gray, sRGB 128 (~50% perceptual) |
| Response | Two-alternative forced choice (left / right tilt) |
| Adaptive rule | 2-down 1-up staircase, converges to 70.7% correct |
| Threshold estimate | Mean of the last 6–8 reversals, per frequency |
Four short steps, about a minute.
A browser knows nothing about how big or how bright your screen is. Without calibration, “3 cpd” and “5% contrast” are guesses. We do the smallest amount of calibration that gets those numbers physically meaningful.
- 01
Pixel pitch — credit card
Resize an on-screen card to match a real ISO/IEC credit card (85.6 mm). Gives the physical width of one pixel — without it, “3 cpd” means nothing.
- 02
Viewing distance — blind spot
A short blind-spot check pins the distance from your eye to the screen. Combined with pixel pitch, this lets the test render gratings at the spatial frequencies it claims.
- 03
Display gamma — stripe match
A perceptual stripe-match step probes your display's tone response. Without linearization, mid-gray sRGB 128 lands at roughly 22% physical luminance, not 50% — and contrast measurements drift.
- 04
Light adaptation — 30 seconds
A brief mid-gray adaptation period before the staircases begin, so your visual system settles to the test surface's mean luminance rather than the page you arrived from.
2-down 1-up staircase.
Each spatial frequency gets its own staircase. Two correct responses in a row drop the contrast (harder); one wrong response raises it (easier). Step size is large at first, then halved after each reversal. This transformed up-down rule converges to the contrast where the observer is correct on roughly 70.7% of trials — near the steepest part of the psychometric function, where threshold estimates are most precise.
Threshold for each frequency is taken as the mean contrast across the last 6–8 reversals. Typical convergence is 30–60 trials per frequency. A future quick-mode using qCSF (a Bayesian full-curve estimator) will trade some interpretability for speed, but the staircase is the appropriate default today.
Compared to the FACT chart’s nine fixed contrast steps (~0.15 log apart with documented ceiling effects), an adaptive staircase is roughly 3× finer in resolution and free of the ceiling problem at low spatial frequencies.
What you actually see.
Per-frequency log CS
Each spatial frequency yields one log contrast sensitivity number (log CS = log₁₀(1 / contrast threshold)). Higher = better.
AULCSF
Area under the log CSF — a single-number summary of the whole curve. Useful for tracking change over time.
Cutoff acuity
Where the curve crosses log CS = 0 along the high-frequency axis — an extrapolated acuity-equivalent.
Interpretive band
Your curve is plotted against a normative band. Dips below the band — especially across multiple adjacent frequencies — are the most informative; isolated single-point dips are usually noise.
Where this test is honest about its weaknesses.
Device-dependence. Even with calibration, different screens have different gamut, peak luminance, and pixel layouts (OLED PenTile arrangements can alias single-pixel gratings). We mitigate by rendering at scales where a half-cycle is at least a few pixels wide and by using spatial dithering for sub-quantization contrast resolution.
Single-session noise. Adaptive psychophysics has real test-retest variance — typically on the order of ±0.15 log CS for the underlying clinical standard (Pelli-Robson). A single dip is rarely meaningful; a repeating pattern across sessions is.
Not a clinical examination. This test does not replace a refraction check, OCT, visual-field perimetry, tonometry, fundus exam, or neuro-ophthalmic evaluation. It is a screening signal that you can bring to a clinician — useful as a data point, not a diagnosis.
Standard ingredients, in a slightly better arrangement. The stimulus type (Gabor patches), the spatial frequencies, the forced-choice response, and the 2-down 1-up staircase are all standard psychophysics. The novelty is in the combination — a calibrated, mobile-friendly, free-tier implementation — not in the underlying method.
Deeper dives in the blog.
- Pelli-Robson vs FACT vs qCSF — how the major clinical contrast sensitivity tests compare.
- Adaptive staircase methods — why one threshold number is never enough.