Skip to content

Why we built a free, open contrast sensitivity test

There is a real visual measurement most eye exams skip, the popular online version of it is broken, and the fix turned out not to be hard. So we wrote one.

There is a vision measurement that takes three minutes, has been in the vision-science literature since 1968,1 can shift measurably in a handful of real conditions before the letter chart on the wall does, and your eye doctor almost certainly didn't run it the last time you went in. The measurement is visual contrast sensitivity. Most online versions of it are bad in interesting ways. We made a better one. We made it free.

That is the whole post, and the rest is footnotes. But the footnotes are where it gets fun.

The thing online VCS tests usually get wrong

The most-used free online contrast sensitivity test is a screenshot of a printed sine-wave grating chart — the Vistech/FACT lineage, designed for print at one fixed size and viewing distance — rendered at whatever pixel size happens to land on your monitor, with a single trial per cell and a fixed nine-step ladder of contrast values. It asks you what direction the stripes are tilted, you click an arrow, it gives you a number.

It is genuinely useful. It is also genuinely broken in ways a vision scientist would flag inside about a minute:

  • No calibration. The chart was designed at one physical size, viewed at one distance, on a printed page with stable contrast. None of those are true online. The same patient on a 14-inch laptop and a 27-inch monitor sees different stimuli and gets different numbers.
  • Single trial per cell. With one yes/no decision per condition, there is no way to separate signal from a coin flip. You get one binary answer; it carries one bit of information.
  • Fixed ladder. Nine discrete contrast steps means the test can't resolve anything finer than about 0.15 log units.2 For comparison, the Pelli–Robson chart3 has a published test–retest variation of around ±0.15 log units — a figure that traces to Elliott, Sanderson and Conkey's 1990 reliability study, not to the original chart-design paper it is often attributed to.4 When your measurement precision equals the meaningful clinical change, you're not measuring change anymore.
  • No mid-gray surround. The contrast of a grating depends on the average luminance of the surface around it. Show the same Gabor (a fuzzy-edged patch of stripes — the standard contrast-test stimulus) on white and on mid-gray and a real psychophysical lab gets two different thresholds. Most online tests sit on whatever background the page CSS happened to inherit.

These tests then get used clinically — by some integrative-medicine practitioners, by patient communities tracking mold exposure or concussion recovery, by people who just want a number. And the results generate strong opinions, because the result depends on the test's flaws roughly as much as on the patient's vision. That is not a great place for a measurement to live.

We don't think any of this is anyone's fault. The dominant online VCS tool was built when the web couldn't render a calibrated grating without a Java applet and when adaptive psychophysics wasn't shippable in a browser. The tools were built when the tools were what they were. The web is different now. We rebuilt them.

What we built differently

Our methodology page goes into all of this in proper detail, but the short version:

  • Per-device calibration. Three steps: a credit-card pixel-pitch match (so we know how many pixels per millimetre your screen has), a blind-spot test to estimate viewing distance (so we know how many millimetres of screen sit in one degree of your visual field), and a stripe-match gamma check (so we know your display isn't crushing low contrast into pure mid-gray). It takes about ninety seconds. It runs once per session.
  • Adaptive thresholding. A 2-down-1-up transformed staircase at every spatial frequency, converging at 70.7% correct. This is the standard procedure from Levitt's 1971 derivation,5 and it's how thresholds have been measured in psychophysics labs for fifty years. We do not show you a fixed ladder of stimuli; we adjust contrast to where you actually are. The other modern route — Bayesian adaptive estimation of the whole curve at once, the quick-CSF method — is what showed a full psychophysical procedure could run efficiently outside a lab; we started with the more transparent staircase.6
  • Mid-gray test surface. Non-negotiable. The screen is the same mid-gray as the mean luminance of the Gabor; the Gabor sits on it like a fish in water. This is what makes a Michelson contrast measurement (the standard 0-to-1 measure of the light–dark difference in a striped pattern) a Michelson contrast measurement.
  • No mandatory email. Results live in your browser's localStorage. You take the test, you read the curve, you close the tab. That is allowed.
  • Open methodology. The methodology page explains the staircase rules, the stimulus generation, the calibration math, and the parts we know aren't perfect. The point is that you, or your eye doctor, or anyone curious, can check our work.

If you want the long-form version of what contrast sensitivity actually measures and why a single point on the curve is not the same as "vision," we wrote that, too.

Why "free"

A reasonable question: if we put this much work into it, why doesn't it cost anything?

The honest answer is in two parts.

Part one: we want the number to be sourceable. A contrast sensitivity result is most useful when you can bring it to a clinician and say here is what I got, here is how it was measured, here is the methodology page where you can audit it. That stops working the instant the test costs money to take, because the population that needs it most — people worried something is off who haven't been able to get an answer — is exactly the population that has already spent a lot of money on healthcare that didn't help. Charging for the screening signal is a way to filter out the people who would benefit from it. We don't want to filter those people out.

Part two: there is a real business model behind this, but it isn't the test. We are going to ship a paid tier — $20, one-time — for people who want longitudinal tracking, an account that remembers their history, side-by-side comparison views, and a tidy PDF to email to their doctor. That's the product. The science underneath it is identical; the paid tier is convenience features layered on the same measurement. If you take the free test today and the paid test next year, the staircase will run the same way, the stimulus will be the same stimulus, and your number will be your number.

We will probably write a longer post one day about how we picked $20. The short version is: it's roughly what vcstest.com charges, the marginal cost of running our version is approximately zero, and our breakeven is in the dozens-of-users range. We do not need this to be a unicorn.

Free as in beer; also free as in we'd be embarrassed to charge for the screening itself.

Who this is for

A short list, in no particular order:

  • People worried about their vision who pass the eye chart, can't say what's wrong, and would like a number on a piece of paper that says here is one thing that is actually a little off, please look at this.
  • Patients with chronic conditions — MS, post-concussion symptoms, glaucoma under monitoring, cataract considering surgery, diabetes — for whom contrast sensitivity is known to change. A trend line over months is more useful than any single absolute value, and we make it cheap to generate the trend line.
  • Patients in the mold / CIRS communities who have heard of VCS as a screening tool and want a properly-calibrated version of it. We have a separate post on the Shoemaker pattern that is honest about what is and isn't established there; this test is not a diagnostic for biotoxin exposure, but it is a properly-measured contrast sensitivity function, which is more than the alternatives offer.
  • Clinicians who want a free, calibrated thing to hand a patient between visits, especially when the chair time isn't available to run Pelli–Robson in clinic.
  • Anyone who reads a science blog post and goes "huh, I want to see my own contrast sensitivity function." This is, quietly, the audience we like writing for the most.

If you fit any of these, take it. If you don't, take it anyway — most people have never seen their CSF curve, and it's a neat thing to see.

The honest part

This is a screening signal. It is not a diagnostic test. It does not, and cannot, tell you what is wrong. It can tell you whether one specific functional measurement of your visual system is in the range that the literature considers normal for your age, and it can tell you whether that measurement is moving over time if you take it more than once. That is genuinely useful information. It is also not the same as an eye exam.

We're going to make mistakes. Some of them will be in the calibration math; some will be in the staircase parameters; some will be in the way we describe a particular condition. Our methodology page is public for exactly this reason — so that when we make a mistake, somebody can tell us, and we can fix it. We will be much more annoyed if you don't tell us than if you do.

What we will not do: tell you that you have a condition; tell you that you do not have a condition; replace your optometrist, ophthalmologist, neurologist, or any other clinician; sell your data; require your email to see your result; or charge you for the measurement itself. Those promises live on the about page, in slightly more formal language.

So

Take the test. It's free, it takes about three minutes, and we built it because we thought the existing options deserved a better neighbor.

Then take it again next month, on the same device, in the same lighting, after the same kind of day. Trends are where this measurement earns its keep.

If you find something interesting, or something broken, or something that disagrees with what a real eye exam tells you — write to us. We are easier to reach than most software is, and we read everything.

Footnotes

  1. Campbell FW, Robson JG. Application of Fourier analysis to the visibility of gratings. J Physiol. 1968;197(3):551–566. The paper that established the contrast sensitivity function and the spatial-frequency-channel framework the field still runs on. PubMed.

  2. Pesudovs K, Hazel CA, Doran RM, Elliott DB. The usefulness of Vistech and FACT contrast sensitivity charts for cataract and refractive surgery outcomes research. Br J Ophthalmol. 2004;88(1):11–16. Documents the fixed-step Vistech/FACT grating chart's coarse ~0.15 log-unit contrast steps and the ceiling/floor effects that follow. PubMed.

  3. Pelli DG, Robson JG, Wilkins AJ. The design of a new letter chart for measuring contrast sensitivity. Clin Vis Sci. 1988;2(3):187–199. The original Pelli–Robson chart paper. (Published in Clinical Vision Sciences, which is not indexed in PubMed and carries no registered DOI, so no stable external link is available.)

  4. Elliott DB, Sanderson K, Conkey A. The reliability of the Pelli-Robson contrast sensitivity chart. Ophthalmic Physiol Opt. 1990;10(1):21–24. The actual source of the widely quoted repeatability figures: Pelli–Robson scores are repeatable to within about ±0.15 log units (±1 chart step), so a change of roughly ±0.30 log units (±2 steps) is generally taken as clinically meaningful. Often mis-cited to the 1988 design paper. PubMed.

  5. Levitt H. Transformed up-down methods in psychoacoustics. J Acoust Soc Am. 1971;49(2):467–477. Derives the transformed up-down staircase family; the 2-down-1-up rule converges on the contrast an observer gets correct 70.7% of the time. PubMed.

  6. Lesmes LA, Lu Z-L, Baek J, Albright TD. Bayesian adaptive estimation of the contrast sensitivity function: the quick CSF method. J Vis. 2010;10(3):17. The Bayesian adaptive (quick-CSF) procedure, which helped establish that a full contrast sensitivity measurement could run efficiently outside a lab. PubMed.

Frequently asked questions

Many are essentially a screenshot of a printed 1988 chart rendered at whatever size lands on your screen, with no per-device calibration, only one trial per contrast level, and a fixed nine-step ladder that can't resolve results finer than about 0.15 log units. That means the result depends heavily on the test's own limitations, not just your vision.

It calibrates to your specific device in about ninety seconds (pixel pitch, viewing distance, and display gamma), uses an adaptive staircase procedure that homes in on your actual threshold instead of a fixed set of steps, and always tests against a mid-gray background so the contrast measurement is accurate.

Partly because a screening result is most useful when you can bring it to a clinician alongside an open methodology to audit, and charging for it would filter out people who need it most. There's a planned paid tier for convenience features like longitudinal tracking and PDF export, but the underlying measurement stays free.

No. It's a screening signal that shows whether your contrast sensitivity falls in the normal range for your age and whether it changes over time if you retest. It cannot tell you what's wrong and is not a substitute for an eye exam.

Contrast Screen team
Open-methodology vision-science notes.