Skip to content
VCS-Test

← Notes

How to take a contrast sensitivity test online (and what the result means)

May 21, 202616 min readhow-tocalibrationscreening

If you search "contrast sensitivity test online," you'll find a small handful of pages willing to give you a number in three minutes. Some of them are useful. Most aren't, in the sense that the number they return has very little to do with the contrast sensitivity an optometrist would measure in a clinic. The difference is almost entirely in two places: whether the test calibrates itself to your specific screen and your specific viewing distance, and whether it uses an adaptive procedure to find your threshold or just hands you a fixed chart and asks you to click yes/no.

This post is for two kinds of reader. The first is someone whose vision feels subtly off — driving at dusk has gotten harder, faces look flatter, you keep tripping on contrasts you used to handle. The second is the self-tracker — someone monitoring a known condition, watching a recovery, or just curious about a measurement most eye exams skip. Both reasons are legitimate. Both deserve a test that isn't theatre.

What follows is, first, what to look for in a credible online test; second, what it should feel like to actually take one; and third, how to read the curve at the end. If you'd rather read the conceptual primer on what contrast sensitivity actually is before this how-to, start here.

What to look for in a credible online test

Most free online tests in circulation are descended from a printable chart called FACT (Functional Acuity Contrast Test) — five fixed spatial frequencies, nine discrete contrast steps, no per-device calibration. The most popular legacy chart-based online test takes this format almost verbatim. It's not unusable, but the contrast steps are coarse, the format has known ceiling effects in healthy adults, and the same "10% contrast" patch presents wildly different physical contrast depending on whose monitor renders it. Modern psychophysics doesn't work this way.

The short checklist a credible online test should pass:

  • It calibrates the device. It should size something against a reference object on your screen to figure out pixels per millimetre. Without that it has no idea how big anything on your screen is — and contrast sensitivity is specified in cycles per degree of visual angle, which you can only compute from pixel size and viewing distance.
  • It tests multiple spatial frequencies. Contrast sensitivity is a curve across pattern sizes, not a single number. A test that returns just one threshold is sampling one slice of the curve.
  • It uses adaptive thresholding. "Show a chart, click what you see" wastes most of its trials on contrasts you can easily see or definitely can't. An adaptive procedure — a staircase, QUEST, or qCSF — converges on the contrast where you're right about 70% of the time, the statistically sharpest point. The Bayesian quick-CSF procedure is the modern reference (Lesmes et al., 2010).
  • It returns a curve, not a single grade. Several data points on a log-log plot of sensitivity vs. spatial frequency, ideally with a normative band overlaid. A single "A / B / C / fail" throws away most of the information.
  • It uses a mid-gray test surface and admits its limits. Your contrast sensitivity changes with the average brightness you're adapted to, so the test surface should be uniform mid-gray. And remote testing on consumer screens is fundamentally noisier than clinical testing — a test that admits this is more trustworthy than one that always returns a confident number.
  • It doesn't make you sign up. A screening tool that demands an email before showing you a result is treating your data as the point of the exercise, not your vision.

The test on this site does all of the above; for the technical specifics of how, the methodology page is where the implementation details live.

What taking a good online test actually feels like

A research-grade browser test has roughly five steps. Four of them are calibration. Only the last one is the test itself.

Step 1 — Sizing the screen

The first thing a good test asks you to do is hold a real, physical reference object — typically a credit card or ID — up to your screen and drag a virtual rectangle until it matches. This is the credit-card resize trick: credit cards and most national IDs are manufactured to ISO/IEC 7810 ID-1, 85.60 × 53.98 mm, give or take a tenth of a millimetre. Once the on-screen rectangle matches the card, the test knows how many pixels correspond to 85.60 mm on your display, and from that, the pixels-per-millimetre conversion it needs.

This sounds trivial; it isn't. JavaScript can't ask the operating system for your screen's physical size — devicePixelRatio returns a ratio between device pixels and CSS pixels, but the CSS pixel is defined as an angular unit, not a physical one. The only reliable way to recover physical millimetres in a browser is to put a known object on the screen and ask the user to match it.

Step 2 — Sizing the distance

Next, viewing distance. The standard trick uses your blind spot — the small patch of retina where the optic nerve exits, which has no photoreceptors and therefore no vision. You cover one eye, fixate a target, and slide a moving dot horizontally until it disappears. The blind spot sits at a consistent eccentricity from the fovea — about 13.5° on the temporal side — so once the test knows how far across the screen (in millimetres, from step 1) the dot was when it vanished, trigonometry gives the screen-to-eye distance.

This is the "virtual chinrest" method validated by Li and colleagues in 2020, with a mean absolute error of about 3.25 cm at viewing distances between 43 and 66 cm — accurate enough for psychophysics on most real-world setups (Li, Joo, Yeatman & Reinecke, 2020). If your online test doesn't do something like this, it's almost certainly using your self-reported "arm's length," which varies by 30 cm or more across adults and propagates linearly into the spatial-frequency calculation.

Step 3 — Sizing the brightness

The harder calibration: getting the monitor's brightness response right. Displays don't encode brightness linearly — they use a gamma curve, very close to a 2.2 power function. If a test naively writes the pixel value 128 (halfway between 0 and 255) expecting "half brightness," what actually emits is about 22% of the maximum, not 50%. For a test that depends on accurate contrast values, this is a 2× error.

The classic fix is a stripe-match gamma probe: a patch of very thin alternating black-and-white stripes next to a uniform gray patch, with a slider you adjust until they look indistinguishable from arm's length. The visual system spatially averages the thin stripes, so when their average matches the gray, the test knows what pixel value corresponds to 50% physical luminance and can build a lookup table to translate intended contrasts into actual pixel values. Sub-1/256 contrast steps then need a dithering trick to render cleanly — typically the "noisy-bit" method validated by Allard & Faubert (2008).

Step 4 — Letting your eyes adapt

A short uniform mid-gray screen — typically thirty seconds or so — before the real trials start. This isn't a calibration of the device; it's a calibration of you. Your retinal sensitivity is set by the average brightness you've recently been looking at, and that adaptation takes a moment to settle. A test that drops you straight into trials right after a colourful instruction page is measuring partly your contrast sensitivity and partly your adaptation transient.

Step 5 — The actual test

After all of that, the test itself feels almost anticlimactic. You see a series of brief flashes, usually a few hundred milliseconds each, of fuzzy-edged striped patches — Gabor patches, formally — at different sizes. Each one is tilted slightly left or slightly right of vertical. You press a key or tap a button to say which.

Most of the trials feel hard. That's by design. The adaptive procedure is hunting for the contrast at which you're right about 70% of the time, which means most stimuli are presented near your threshold, where guessing feels involved. You'll be sure on some, vague on others, and convinced you saw nothing on a few — that's the right experience. The test runs for somewhere between two and seven minutes depending on whether you picked a quick-screen mode or a full-curve mode.

Here's a sketch of what those first three steps look like visually — credit-card resize, blind-spot trick, and stripe-match gamma, side by side:

  1. Credit-card resize

your real card

(held to screen)

drag until they match

→ pixels per mm

  1. Blind-spot distance

fixate

slide →

one eye covered

dot disappears → ~13.5°

→ viewing distance

  1. Stripe-match gamma

thin stripes

mid-gray patch

step back; match → display gamma

How to read the result

Once the trials are done, a good test will draw you a contrast sensitivity function — a curve on log-log axes. Spatial frequency in cycles per degree runs along the x-axis (left = coarse patterns, right = fine detail). Log contrast sensitivity runs up the y-axis (higher is better). Your data points trace out a roughly inverted-U shape, peaking somewhere in the middle frequencies and falling off at both ends.

Three things to look at, in roughly this order.

Where your curve sits relative to the normative band. The test should overlay a published range of "typical" values for your age. Mäntyjärvi and Laitinen's 2001 cohort study is the most commonly cited source of age-stratified norms — typical monocular log contrast sensitivity is about 1.84 at age 20–39, drifting down to about 1.68 at age 60 and over, with the binocular value about 0.15 higher (Mäntyjärvi & Laitinen, 2001). A curve sitting comfortably inside the band is unremarkable; a curve at the bottom edge or below is a signal worth taking somewhere.

Your AULCSF number. Many modern reports give a single summary metric called AULCSF — area under the log contrast sensitivity function. It's the integral of your curve in log-log space, a single number summarising "how much of the visible-pattern space can you see clearly?" Useful mostly because changes in AULCSF over time on the same setup are easier to interpret than reading a multi-point curve by eye. If you're planning to take the test repeatedly, this is the number to track.

The shape of the curve, not just its height. Different patterns of loss have different signatures — a sharp falloff only at high frequencies, a uniformly depressed curve, or a dip in the middle frequencies — but the patterns aren't perfectly specific, and pattern-matching isn't something a screening test should do on its own. Other posts on this site work through individual conditions in the kind of detail they deserve.

What a good results page should do is name the shape ("normal range," "below typical at high frequencies," "below typical mid-range," and so on), tell you what's notable about it, and stop short of telling you why. The why is something to bring to a clinician, with the report or PDF in hand.

If you want the deeper conceptual treatment of the curve itself — what each region of it means, why the visual system is organised this way, what acuity does and doesn't tell you in comparison — the primer post goes through it carefully.

What the result is, and isn't

A few framings that will save you a fair amount of anxiety or misplaced reassurance, depending on which way your result lands.

It is a screening signal. A reduced result is a useful prompt — "this is worth bringing up at my next eye appointment, or maybe scheduling one sooner than I was planning to." A normal result is a reasonable reason to stop worrying about contrast specifically, while remembering that contrast sensitivity is only one slice of visual function and a thorough eye exam covers many others.

It is useful for tracking change over time. This is what online tests are genuinely good at: repeating the measurement on the same setup, in the same room, every few weeks or months, gives you a personalised baseline far more sensitive to change than a once-a-year clinical reading at a different office on a different chart. Take the test twice in a week to see your own test-retest variation, then re-test at whatever interval matters to you and watch the trajectory.

It is not a diagnosis. Nothing on this kind of test, however well-built, can tell you why your contrast sensitivity looks the way it does — the same dip can come from a wrong prescription, recent eye strain, an early cataract, a recent concussion, fatigue, or ambient lighting. Only an in-person exam disentangles them. The original Pelli-Robson paper notes test-retest variation on the gold-standard clinical instrument is around ±0.15 log units, with the smallest clinically meaningful change being roughly ±0.30 log units (Pelli, Robson & Wilkins, 1988); remote screening on consumer displays is noisier than that.

Variance is normal. Take the test in different lighting, at different times of day, after different amounts of screen time, and your result will move by a few tenths of a log unit. That's not the test failing; that's your visual system doing what visual systems do. Averages over a stable setup tell you more than any single number.

Note: an online contrast sensitivity test is a wellness and screening tool. It is not a substitute for an eye exam, and nothing it returns is a diagnosis of any condition. If your result concerns you, or if you have any new visual symptoms regardless of what the test says, that's a conversation for a clinician who can do a full exam.

Take the test

Take the test now — free, no signup, runs in your browser, takes about three minutes for the quick mode or seven for the full curve. Results stay on your device by default. If you want a shareable URL you can send to a clinician or save for next time, the results page has one ready.

For the technical specifics of how the calibration steps above are implemented, see /methodology. For the broader background on what contrast sensitivity is and why it's worth measuring at all, see the primer post.

References

  • Pelli, D. G., Robson, J. G., & Wilkins, A. J. (1988). The design of a new letter chart for measuring contrast sensitivity. Clinical Vision Sciences, 2, 187–199. The clinical Pelli-Robson chart and its repeatability characteristics, still the most common single-frequency benchmark in vision research.
  • Mäntyjärvi, M., & Laitinen, T. (2001). Normal values for the Pelli-Robson contrast sensitivity test. Journal of Cataract and Refractive Surgery, 27(2), 261–266. Source of the age-stratified normative log contrast sensitivity values overlaid on most modern reports.
  • Lesmes, L. A., Lu, Z.-L., Baek, J., & Albright, T. D. (2010). Bayesian adaptive estimation of the contrast sensitivity function: the quick CSF method. Journal of Vision, 10(3):17. The qCSF method — the Bayesian adaptive procedure underpinning fast full-curve estimation in modern online and clinical instruments.
  • Li, Q., Joo, S. J., Yeatman, J. D., & Reinecke, K. (2020). Controlling for participants' viewing distance in large-scale, psychophysical online experiments using a virtual chinrest. Scientific Reports, 10:904 (PMC6976612). The peer-reviewed validation of the blind-spot-based virtual chinrest used in step 2 of the calibration walkthrough.
  • Allard, R., & Faubert, J. (2008). The noisy-bit method for digital displays: converting a 256 luminance resolution into a continuous resolution. Behavior Research Methods, 40(3), 735–743. The dithering technique used to render sub-1/256 contrast steps cleanly on 8-bit displays — important whenever a test claims to measure contrast thresholds below ~0.5%.

Take the test.

Free, calibrated, three minutes. Runs in your browser, results stay on your device.

Take the test