Skip to content

Methodology

How the test actually works.

Written for technically-minded readers and clinicians. If you want the rigorous version, this page is for you.

Stimulus

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.

ParameterValue
StimulusGabor patches (sine grating × Gaussian envelope)
Carrier orientations±15° from vertical (2AFC tilt)
Spatial frequencies1.5, 3, 6, 12, 18 cpd
Presentation duration~250 ms, raised-cosine onset/offset
Mean luminanceMid-gray, sRGB 128 (~50% perceptual)
ResponseTwo-alternative forced choice (left / right tilt), or “not sure”
Response windowUp to 3 s after stimulus offset; no answer scores as incorrect
Adaptive rule2-down 1-up staircase, converges to 70.7% correct
Threshold estimateMean of the last 6–8 reversals, per frequency
Calibration

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.

  1. 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.

  2. 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.

  3. 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.

  4. 04

    Light adaptation — 15 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.

Adaptive method

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.

Trial timing

Fixation, flash, answer. No clock.

Every trial has the same shape, so the stimulus always arrives when you expect it:

  1. 01

    Fixation 500 ms

    A small dot at the center of the gray field, so you know where and when to look.

  2. 02

    Stimulus 250 ms

    The Gabor patch, tilted left or right.

  3. 03

    Response up to 3 s

    Answer left, right, or “not sure”. The trial ends the moment you answer; if you don't, it ends at 3 s and scores as incorrect.

  4. 04

    Gap 300 ms

    Blank gray, then the next fixation dot.

“Not sure” counts as wrong. Declining to guess is scored as an incorrect response — the same as an unanswered trial. That is the conservative choice: it can only push the staircase toward higher contrast, so it can never make your threshold look better than it is. Guess whenever you see anything at all; forced-choice methods are efficient precisely because guesses carry information.

There is deliberately no countdown. The validated protocols — Pelli-Robson, FACT, qCSF, FrACT — all use a fixed-duration fixation cue followed by a fixed-duration stimulus, and none shows a timer. Temporal certainty about when the stimulus will appear is part of what keeps threshold variance low; a number counting down next to the patch is an attentional distraction. If you haven’t answered about a second into the response window, a faint reminder of the controls fades in below the patch. Nothing counts down.

Result computation

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.

Reliability & limitations

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.

Further reading

Deeper dives in the blog.