Vision-science instrument

See what your users actually see.

Only about of your visual field is sharp. The rest is peripheral — blurred, desaturated, crowded. Scrutinizer renders that reality so you design for the glance, not the screenshot.

Designing in Figma? Try the plugin instead →

Open source · macOS (Apple Silicon) · v2.7.0

FOVEAL Ø 92px
ECC 0.0° · ACUITY 100%
move cursor to fixate
The mechanism

Half your visual cortex serves the central 2°.

Scrutinizer models how spatial resolution, colour sensitivity, and crowding change with distance from where you're looking — the same falloff your retina and cortex impose.

01

Cortical magnification

Resolution drops with eccentricity along a log-polar mapping. Scrutinizer renders this falloff with hardware MIP-chain pooling — each level halves spatial resolution, approximating how receptive fields grow with distance from fixation.

$$A(E)=\dfrac{A_0}{1+E/E_2}$$ E₂ ≈ 2.3° — the eccentricity where acuity halves; the exact curve the demo above runs
02

Chromatic pooling

Colour perception narrows in the periphery — S-cones are sparse outside the fovea and the parvocellular pathway loses resolution with eccentricity. Scrutinizer models this as selective chrominance pooling in Oklab, preserving luminance while colour bleeds and shifts.

$$S(E)=S_0\,e^{-k_e E}$$ kₑ — castleCSF eccentricity decay; red–green 0.059 vs blue–yellow 0.004
03

Visual crowding

In the periphery, objects aren't invisible — they're unidentifiable. Flankers merge with targets. Scrutinizer renders this as position jitter scaled to integration-field size, following the Texture Tiling Model .

$$s_c \approx \tfrac{1}{2}\,E$$ Bouma's law — flankers within ~½ the eccentricity merge with the target
Resolution collapses with eccentricity — the periphery blurs while the fixated centre stays sharp.
Who uses it

From a designer's first glance to a vision lab's pipeline.

Designer

Will your hierarchy survive the glance?

Check whether your primary CTA and key content hold up under peripheral degradation — before you ship. If people have to foveate every element to find what they need, the layout isn't working, and Scrutinizer shows you before they tell you.

UX practitioner

Scan paths without an eye tracker

The Restricted Focus Viewer paradigm, modernised: see where attention lands and where peripheral clutter competes with the task — with a window that's biologically accurate, not a plain Gaussian blur.

Software team

See your product in a new way.

Point the open-source browser at your real app and watch it through human perception — live congestion scores, saliency, and peripheral falloff on the page as it ships. Scrutinizer is open interaction infrastructure: a rendering pipeline you can run on any site or build on, not a sealed app.

HCI / vision researcher

A citation-ready, configurable pipeline

Eccentricity-dependent pooling, Oklab chromatic degradation, and Texture-Tiling crowding — all parameterised. Screenshot exports embed the full pipeline config so a result is reproducible, not just a pretty picture.

From the blog

The reasoning, worked out in public.

Every rendering choice is argued from the literature and checked against psychophysics — in long form, in the open. A few entry points to the science:

Tech brief · Apr 2026

The colour-design insight we don't know we know

Red–green opponency collapses in the periphery; blue–yellow holds on. It's been settled vision science for 25 years — and still hasn't reached the design curriculum. Road signs already figured it out.

Read the brief →

All posts — releases & tech briefs →

Get Scrutinizer

Two ways in.

Electron browser

A standalone browser with the full foveated rendering pipeline. Browse any site with real-time peripheral simulation, saliency maps, congestion analysis, and mobile device emulation.

Figma plugin Updated

Apply foveated rendering to your Figma frames without leaving the editor. Copy static renders to canvas, or browse with live simulation.

Measure your own foveal radius

A 30-second calibration that maps your fovea in pixels at your current viewing distance — the same number the demo above estimates.

Launch calibrator →