Scrutinizer v1.4: MIP Pooling, Oklab Saliency & Inhibition of Return

The peripheral visual system doesn't blur — it pools. v1.4 replaces the previous 5-tap Gaussian blur with hardware MIP-map sampling, mapping eccentricity to MIP level the way receptive field size grows with distance from the fovea (validated against contrast sensitivity data — see report). This is faster (one texture lookup vs. five) and more biologically accurate. The release also migrates saliency computation to Oklab color space and introduces Inhibition of Return as a visual memory mode.

This post is a stub. Full writeup coming soon.

MIP-based peripheral pooling

Rosenholtz et al.'s pooling model predicts that receptive field size roughly doubles with eccentricity. Hardware MIP chains encode exactly this hierarchy — each level halves spatial resolution. The mapping is natural:

// MIP level grows with eccentricity
float mipLevel = clamp(normalizedEcc * 2.5, 0.0, 4.0);
vec4 pooled = textureLod(u_texture, uv, mipLevel);

The result: ~5x faster than the Gaussian blur it replaces, with smoother transitions and better color fidelity in the periphery. v1.6 would later decompose this into frequency-selective DoG bands, but v1.4 established the MIP pipeline that made everything after it possible.

Oklab saliency

Saliency feature extraction moved from RGB to Oklab, separating lightness (L) from chrominance (a, b) in a perceptually uniform space. This mirrors the magnocellular (luminance) and parvocellular (color) pathways. The practical effect: saliency maps are more stable and less sensitive to hue-saturation confounds.

Inhibition of Return

A new visual memory mode: recently fixated areas become suppressed (more distorted) rather than cleared, simulating the brain's tendency to de-prioritize previously attended locations. This pushes gaze toward novel content — the complement to Scrutinizer's existing memory-based clearing.

Other changes


Links: GitHub · Full changelog · v1.4.0 release