Parallax Metrology · Instrument Reference

The Image Structure Reader

A pre-semantic structural instrument for images — technical reference, current state.
Schema v0.7 · 12 studies · 4 domains · 24 instrument findings · Russell Parrish · document date 2026-07-16

1What the instrument is

The Image Structure Reader (ISR) computes fields — luminance gradient, OKLab chroma, cone-opponent channels, committed and soft edges, structural mass — over a whole image, then reads named regions and their relations as one system in one coordinate space. It recognises nothing: no objects, no learned weights, no training data. Every quantity is a deterministic function of the pixels.

The core stance. The instrument produces coordinates, not findings. Its value is a place to point: it holds critical language honest, because a claim about an image can be checked against a number, and a number can be checked against the pixels. And because every image is measured in the same coordinate space, two works can be read against each other directly — a painting, a scroll, and a photograph land on the same axes.

Low and high values do not mean failure or success. They expose choice and defaults — where a work sits, not whether it should sit there.

The system has four layers, each built on the one below:

Why Deterministic? The Image Structure Reader is deterministic because its purpose is not recognition but measurement.

Every reported quantity is a reproducible function of a stated image, a stated resolution, and a stated pipeline. The same input produces the same coordinates. If a value changes, the reason can be traced to a different reproduction, a different scale window, a different parameter, or a different implementation. There are no learned weights, hidden state, or stochastic inference paths inside the instrument.

This design deliberately sacrifices expressive power. A trained model can infer identity, style, or likely intent from large statistical priors. The ISR cannot. It will never identify Christ, recognize Pollock, or infer that a photograph depicts a train station. Those questions belong to semantic systems.

The trade is intentional.

A deterministic instrument can be audited at every stage. Every coordinate can be followed backward to the evidence fields from which it was computed. Every disagreement between two readings can be localized to a specific subsystem rather than attributed to opaque model behavior. Calibration is possible because the underlying computations remain fixed as the corpus grows.

Determinism also separates measurement from interpretation. The instrument produces coordinates describing structural organization. Interpretation remains outside the pipeline. A critic, historian, scientist, or conservator may attach different meanings to the same coordinates, but the coordinates themselves remain unchanged.

This distinction matters because reproducibility is a prerequisite for cumulative knowledge. Studies separated by years, domains, or investigators can be compared directly only if the coordinate system itself is stable. The candidate register, calibration suite, theorem anchors, and documented instrument findings all exist to preserve that stability while allowing the library to evolve.

Determinism should therefore not be read as a claim that deterministic methods are universally superior to learned systems. The two answer different questions. Learned models excel at recognition, prediction, and semantic inference. The Image Structure Reader is designed for a narrower purpose: to produce inspectable structural coordinates whose provenance can always be traced back to the pixels from which they were derived.

2What it is not

3Layer one — the evidence fields

evidence_fields(rgb) returns nine aligned per-pixel fields. The first four form the primary evidence fields that regions are read against; the rest are supplementary substrates for specific measures.

fieldwhat it is
luminanceRec. 709 luma, [0,1]
edgeSobel gradient magnitude, robust-normalised (2–98 percentile)
tonelocal luminance deviation — |lum − gaussian(σ=12)|
colorOKLab chroma via a single LMS pass — perceptually uniform
perturbationstability under blur — structure that survives σ=3 smoothing
mass0.42·edge + 0.32·tone + 0.26·chroma, lightly smoothed — the structural-weight field
lm_opp, lyb_oppcone-opponent channels (L−M red–green; L+M−2S yellow–blue)
canny_gapsoft structure: Sobel active but Canny uncommitted — sfumato, haze, slow transitions

Optional preprocessing: perona_malik anisotropic diffusion for contaminated reproductions — run as a diagnostic first (the report's pm_verdict); treat only when noise is between you and the work, never when texture is the medium (I-11).

4Layer two — the spine

read_image(image) — equivalently isr read — runs a single region pass (watershed islands on the density field) so that kernel coordinates, evidence measures, relations, and the state classifier all operate on the same regions, then assembles the full report. Schema image-structure-reader/v0.7. Full definitions, ranges, calibration values, and per-metric caveats live in instrument/docs/METRICS.md — this table is the map, not the dictionary.

report keywhat it answers
kernelwhere structural mass sits and how it is built: centroid offset (Δx, Δy), packing ρ_r, cohesion μ, peripheral pull x_p, orientation stability θ, thickness d_s, dispersion SDI, mask QA + SHA-256 provenance
mask_coherenceΩ — do the five construction families (edge/tone/color/perturbation/mass) point to the same place, and which one disagrees
islandsthe relation system: ≤20 watershed islands with roles (anchor/satellite), corridors with resistance/tension, island entropy, crop stability. Counts are capped — see I-17; entropy is the comparable quantity.
evidence, dependencyare regions built differently (construction diversity); which regions are load-bearing (balance_dependency — remove it and the composition tips)
color_analysisβ (colour work in the structural void) and the coupling index (do colour and structure co-occur pixelwise). Both are whole-image aggregates — check per-work purchase, I-15.
tonalτ tonal hierarchy (Gini over 10 zones), shadow/midtone/highlight masses
radialRC_f / RC_s / dRC — does mass organise around the frame's centre or its own
soft_structure, field_regimecommitted vs soft structure; a one-word field type (QUIET_ISOLATED … ACTIVE_FIELD … MIXED)
mass_grid3×3 zonal weight distribution and asymmetries
saliencyspectral-residual saliency and mass_divergence — where the eye goes vs where the weight is
self_similaritybox-counting D + windowed slope stability on the dark and structural masks (theorem-anchored: the Sierpinski gasket reads 1.585 exactly); dense-fill and resolution caveats attached
default_gravity0–100 depth in the centred, frame-locked attractor (centering, radial lock, central concentration, sector symmetry) — a choice/default reading on the radial axis
vtlthe legacy-VTL block: spectral construction (confirmed edges, Γ gradient capture, construction label), chromatic boundary independence, local/global and tonal local/global cross-scale consistency, regime classifier + indicative profile hint
persistenceisland-level survival under blur / grayscale / low-contrast — what the structure is fragile to
readingthe legible structural state + flags — a reading aid, never a grade
House rule. The spine is shared and permanent. Core code (instrument/isr/*.py) stays stable across the corpus; image-specific tuning happens at the call site — flags, custom probes, masks, scale — never by editing core for one work. New measures enter only through the candidate register (§7).

5Layer three — lenses & independent tools

toolquestioninvoke
Gap / accent lenssmall high-leverage marks the island system ignores — punctuation, with kind, leverage, and delay-grammar role. Two channels (structural / chromatic / combined) and brush-scale coalescing (--coalesce-sigma) — the I-5/I-7 corrections built in. Works at 900 px internally; returns top-24 by default, so counts are not abundance measures.isr gap-readout
Stancedoes the composition torque (the centre of gravity keeps changing heading as detail dissolves across scales) or stand (one heading held)? Plus SCI and the VCLI-G composite. A choice/default reading — generated images cluster at standing; so does deliberately stable art. 768 px pinned.isr stance
Layered deltawhat kind of "same" are two images: byte substrate (compression distance — the assumption-free witness; saturates ≈1.0 for non-derivatives), tone, and a 16-axis structural form delta — read at their crossing (different pixels, same spatial skeleton is the interesting cell)isr delta
Compare2–20 images in one coordinate space: per-metric dispersion sorted by CV (top rows = where this set genuinely differs), per-image z-scores (descriptive at small n), signature radarisr compare
Positionabsolute displacement from a fixed geometric origin on 18 axes — cross-domain coordinates with no reference corpus; every pairwise distance decomposes into named driving axesisr position
Readoutsthe pictures the instrument sees: island relations, gap overlay, raw field panels — always read against the reproduction before writing anythingisr island-readout · isr render
Evidence pages / batchproof-first HTML per work with crops and custom zone probes; folder-scale CSV + visual panels for controlled corporaisr evidence-report · isr batch

6Layer four — the pattern shelf

Runnable, general analysis moves in toolkit/patterns/ — born in studies, generalised so the next study doesn't rediscover them. Each depends only on the instrument and takes any image.

patternwhat it does
null_control.pyThe validity check. Three null families. Two are parameter-free — phase-scramble (histogram + power spectrum kept, arrangement destroyed) and patch-shuffle (histogram + local texture kept, composition destroyed): a number that reproduces under them is reading the work's statistics, not its arrangement. The third, figure-position shuffle, is semi-supervised (it needs named figure boxes) and asks whether the real arrangement beats rearrangements of its own cast. Use null_sweep (seed-swept, n≥100 for symmetry-type metrics): single null draws are seed-chaotic. The families BRACKET rather than agree — phase-scramble is too permissive (it destroys the figures, so any structured image beats it), figure-shuffle too conservative (it can never vacate the centre). Report which family produced a number, and treat a figure-shuffle percentile as a measurement, not a verdict (Study 11: it withdrew an address verdict phase-scramble had passed).
stratigraphy.pystratify / ablate / attribute — which layer carries this number: knock a stratum out (delete/flatten/isolate) and re-measure any scalar; carries the mandatory I-13 fill-invariance gate
substrate_audit.pythe I-12 diagnostic — three-way β/cbi test (real / chroma-stripped / bare-substrate patch); fires "substrate-dominated" when the bare sheet reads as high as the whole
r_spatial.pyC-3 candidate — torque(whole) ÷ max torque(any half/quadrant), reported as a range over cuts: super- vs sub-additive composition
address.pyC-4 candidate — central-column mirror-frontality + axis-lock: how much a composition faces the viewer; valid only with its null sweep (figural vs spectral symmetry)
zone_read (in core measures)the I-4 honest zone read — field means over the connected mass component the box points at, not the whole rectangle; reports the dilution
palette_roles.py · hue_tension.py · local_contrast_ratio.py · tonal_gestural_offset.pysmaller moves: the k=5 OKLab palette assigned compositional jobs; warm/cool standoff as one score; the territory of a tonal transition; the tonal-vs-gestural centroid offset, interpreted

Beyond the shelf: per-study probe batteries (the Degas weave, the Pollock phrase-grammar chain, the Caravaggio literature counter-tests, the Soejima corpus design, the Klimt maneuvers) are catalogued with reproducibility status in toolkit/CATALOG.md — patterns to adapt, not answers to confirm.

7The candidate register

The spine is shared; everything past it is per-image and therefore lossy — a measure discovered in one study doesn't automatically run in the next. toolkit/CANDIDATES.md is the shared path out of the spine: every not-yet-promoted measure, its accumulating corpus table, and an explicit promotion bar. The protocol: run the candidate battery on every new study and append the values in the same commit. Promotion is decided across the accumulated corpus, never by the study that discovered the measure.

Both current candidates were decided at n=9 / 3 domains (2026-07-11); the fourth-domain rows added since (Studies 9–10, including the register's first cohort-range rows — verdict distributions over unselected draws) extend the evidence under the same verdicts: not promoted, kept as patterns, reasons on the record.

The register has repeatedly constrained its own candidates before they over-promised — refuting an "only" claim the moment a shared corpus existed, and converting single-draw null claims into seed-swept ones. That is its purpose.

8Calibration & validation

The instrument is anchored, where possible, to objects whose structure class is a theorem — the only ground truth that cannot argue back.

anchorwhat it pins
Synthetic fixturethe gap lens finds exactly its 16 ground-truth accents — frozen as a regression test
Rule 250 (provably periodic)rhythm ceiling ≈0.55 at perfect periodicity; G4 orientation-entropy floor 3.45 on rigidly oriented texture (so natural-image saturation is a fact about natural images, not the metric); compression 396 B
Rule 90 (provably self-similar)box-counting D measures 1.585 against log3/log2 = 1.5849… exact, slope stability 1.00 at every generated size; one resampling of the same object drifts D by ≈0.1 — sampling is part of the measurement
Rule 30 (irreducible)the entropic endpoint: D→2, rhythm→0, compression 44 kB (100× the periodic object)

These orderings are frozen in instrument/tests/calibration.py (run before changing fields/stance/delta code) alongside the four-check smoke test. The triptych generator ships in instrument/examples/, so the anchors are reproducible forever. Beyond theorem anchors, the corpus itself (§14) provides cross-validated reference points — including one external confirmation, where a measured structural anomaly resolved into a museum-documented figure.

9Epistemics — how to read the numbers

The instrument is deterministic; the discipline is in the reading. These rules were each earned by a documented correction, and they are what separates a reading from a story fitted to numbers.

Know when you are measuring the tool, not the work (I-15)

A whole-image scalar has purchase on some works and floats on others — the same metric can grip one image and read only global statistics on the next. Two ways to tell: the eye (peripheral pull has nothing to grip on a flat, centred image — set it aside on sight), and the null check (a number that reproduces under matched-statistics scrambling is reading the work's statistics, not its arrangement). This is a per-work judgment, never a verdict stamped on a metric.

Null controls, seed-swept

Phase-scramble and patch-shuffle bracket the question: survives both → distributional; dies on both → needs the intact composition. But null values are seed-chaotic for some metrics, so single draws flip on luck — use null_sweep and read the distribution (stability of the real value vs scatter of the nulls, or the empirical percentile at n≥100). Null tightness is also image-class-dependent — generated images produced scramble distributions roughly 3× wider than paintings' — so percentile thresholds do not transfer across classes without checking.

The reproduction is not the work (I-10)

Every measurement is of (object × reproduction chain × scale window). Dense-area measures survive resolution sweeps; thin-structure measures do not. Report numbers with their resolution and physical scale window; compare across images only with sweep-robust measures or matched windows. Crops are different measurements. A claim that hasn't survived a resolution sweep is a reading aid.

Pre-register, then measure (Step 0)

Before the first command: look at the image and say what you see in words; write what you expect each key metric to say and why; name which metrics won't grip this work; carry no target. Then the numbers test a hypothesis instead of seeding a narrative — a surprise you predicted against is a finding; a surprise rationalised afterward is a story. The lab book is built first; the critique does not start until the reading is solid.

Claim discipline

Foreground large, directional findings; a result hinging on a hairline threshold is a reading aid. Label claim strength (pipeline-stable / narrowed / reading aid). When a result surprises — especially a null — look under it before believing it. "Only/never" claims are checked against the register's full corpus. Failures are findings and stay on the record; corrections are appended, never erased. Every critique ends with What This Does Not Prove.

10The twenty-four instrument findings

Cross-cutting lessons earned by the studies — each cost a real correction. Full accounts in OBSERVATIONS.md; the traps are operationalised in AGENTS.md.

#finding
I-1Border suppression is not one-size — clean edge-to-edge reproductions want --edge-mode raw; the safe zone can eat real edge figures
I-2Two committed-edge denominators (soft/all vs soft/active) — match the metric to its denominator
I-3Rectangular zones dilute non-rectangular objects — a loose box averages the object with its background
I-4Mask-to-mass is the honest zone read (shipped as zone_read) — with the centre-anchor rule (a louder second object in the box hijacks an unanchored mask) and the outline-object caveat
I-5A null can be a scale artifact — the accent lens has a minimum mark size; coalesce before concluding absence
I-6Uniform dark surfaces flatten the mass field — corroborate "no anchor" with the field panels
I-7The accent lens is channel-biased — purely chromatic accents are invisible to the structural channel
I-8Hough-derived statistics are stochastic — report repeated-run ranges, never single decimals
I-9SCI scale-consistency measures stationarity, not self-similarity (resolved by the box-counting measure)
I-10Resolution is part of the measurement; a reproduction is not the painting — even exact mathematics drifts through one resampling
I-11Speck noise in dark reproductions is subsystem-selective — inflates island dominance and dark-zone coverage, leaves tone/stance/saliency clean; run the PM check in the condition step
I-12On substrate-dominated works (calligraphy, drawings, prints) β/cbi read substrate tint — the void is the sheet; run the three-way substrate audit
I-13Ablation attribution is fill-dependent on relational metrics — the fill-invariance gate is mandatory
I-14Mask discipline for stroke-built images — hulls are territory not measurement masks; size-limited hole-filling; watershed for cursive; width-confound caveats
I-15Recognise, per work, when a number measures the tool, not the work — the null check as the deterministic version of the trained eye; corrected by the seed-sweep (single null draws are chaotic)
I-16Two "largest masses": the gradient-mask component (μ) and the density anchor can be different objects — name which subsystem you are reading
I-17Segmenter ceilings fake convergence — island counts are capped and carry no similarity information; entropy is the comparable quantity
I-18The zone-read lock is ill-posed for annular targets — a lit aperture around a dark occupant puts the annulus's centroid in its own hole, where a competing blob sits; expose the decision margin, not a jitter flip-rate
I-19The zone-read lock fails on dark-on-dark figures as a class — a lock failure is a fact about the tonal situation, not the object; never read it as an object property (it once became a false authorship claim)
I-20A single-work "record" is unearned until it is read against a synthetic theorem-anchor control of the same class — and the control must reach the tonal and relational layers, not just placement scalars; the interesting quantity is the deviation from the ideal, not the raw value (four Black Square "extremes" fell to a machine-square control)
I-21PM and resolution are different levers and must not be conflated — decay-stripping ≠ coarsening; always run PM at native to separate them, or a scale claim wears a decay label
I-22R_spatial is a ratio — report its denominator (max part-torque); on uniform-part works the near-zero denominator manufactures a false record, so flag it unquotable, not extremal
I-23robust01 silently zeroes a whole evidence field when its active support is under ~2% of pixels — a spine-level normalisation fault: 100% mask coverage, centroid collapses to (0,0), every downstream number plausible but dead. Diagnostic p98(field) > 0; corpus verified clear. Fixed (Round 14): read_image emits a field_qa block and classify_report refuses to label a dead structural field (structural_state: degenerate_field, flag dead_field) — the loud signal in the reading block, flag-not-repair, no existing number moved
I-24A control is an experimental apparatus — sweep any free parameter it introduces and report whether the ordering survives; if the control's own numbers move as much as the effect claimed, the verdict is "uncalibratable," not a measurement

11Trust conditions & working envelope

When to trust a read — by image type

image typecondition
Clean reproductionno visible frame, consistent crop: everything valid, including batch runs
Museum photo with frame / mat / cracksthe instrument reads the frame edge as structure — mass islands eat the frame, accents fire at corners. Crop first or use edge-aware mode; treat as a single-image calibrated read, and flag before any batch
Dark-keyed reproductionrun the Perona-Malik diagnostic in the condition step (I-11): speck noise selectively inflates island dominance, imbalance, and dark-zone coverage while leaving tone/stance/saliency clean. Hold the pipeline fixed for any comparison
Uniform high-frequency surfacedense all-over brushwork or film grain saturates the accent field — everything clears the threshold, so accent counts are not meaningful; read accents through the coalesce / null discipline
Substrate-dominated workcalligraphy, drawings, prints — the structural void is the sheet, so β/cbi read substrate tint (I-12); run the three-way substrate audit before quoting either
Generated (AI) imagethe epistemically cleanest case — the pixel array is the artifact, no reproduction chain; the choice/default readings were built with this case in view
Non-art imagephotograph, scientific, screenshot: the measurements run and are honest, but the interpretation layer (labels, thresholds, reference values) is calibrated on the corpus in §14 — translate with care and say so

Working scales

Several subsystems pin an internal resolution so their calibrated constants hold; numbers are not comparable across pipelines or scales without noting these.

subsysteminternal scale
Spine (read_image)native resolution of the supplied image — the library's study convention is a 2600 px working copy (Lanczos), pinned per study
Gap / accent lens900 px short side (all σ values calibrated there; coordinates scaled back)
Stance768 px max side
Address (C-4 pattern)800 px max side
Layered delta — NCD substrate384 px letterboxed grayscale
Saliency256 px spectral pass, upsampled

Performance: a spine read is ≈45 s without the persistence pass, ≈2–3 min with it; stance ≈2 s; a 100-seed null sweep of an address-type metric ≈8 min. Iterate with --no-persistence, finish complete.

Reproductions & rights

The corpus mixes public-domain museum captures (measured and publishable freely) with in-copyright works measured under private structural research. Working practice: measurement and the private record are unrestricted; publication carries only derived outputs — coordinates, overlays, charts — never a republished protected image. Every study states its source, resolution, and pipeline so the reproduction chain is on the record (I-10).

12How to use it

Environment

# the library ships a virtualenv (system python may lack scipy/scikit-image)
VENV=instrument/.venv/bin/python        # or: pip install -e instrument
$VENV instrument/tests/smoke.py         # 4 checks, incl. 16/16 fixture accents
$VENV instrument/tests/calibration.py   # theorem-anchored orderings

The reading workflow

Step 0 first (§9: look, pre-register, name what won't grip, no target) — then:

# 1. Condition check: frame/mat? key? medium? Run the PM *diagnostic* if dark-keyed.
# 2. Full read (iterate fast, finish complete):
cd instrument
PYTHONPATH=. .venv/bin/python -m isr read IMG -o report.json --no-persistence   # ~45 s
PYTHONPATH=. .venv/bin/python -m isr read IMG -o report_full.json               # final, ~2–3 min

# 3. Look at what the instrument sees — against the reproduction:
PYTHONPATH=. .venv/bin/python -m isr island-readout IMG -o islands.png
PYTHONPATH=. .venv/bin/python -m isr gap-readout IMG -o gap.png     # + --accent-channel chromatic --coalesce-sigma 6
PYTHONPATH=. .venv/bin/python -m isr render IMG -o fields.png

# 4. Independent tools as the image merits:
PYTHONPATH=. .venv/bin/python -m isr stance IMG
PYTHONPATH=. .venv/bin/python -m isr compare A B C -o out/ --labels "a,b,c"

# 5. Candidate battery — log the values to toolkit/CANDIDATES.md, same commit:
cd ../toolkit/patterns
PYTHONPATH=../../instrument ../../instrument/.venv/bin/python r_spatial.py IMG
PYTHONPATH=../../instrument ../../instrument/.venv/bin/python address.py IMG   # + null_sweep it

Python API

from isr import read_image                  # the spine (dict, schema v0.7)
from isr.gap import gap_lens                # accents: accent_channel=, coalesce_sigma=
from isr.stance import stance_read          # torque / SCI / VCLI-G
from isr.delta import layered_delta         # pairwise NCD × form
from isr.measures import zone_read          # I-4 mask-to-mass zone reads
from isr.fields import evidence_fields      # the raw substrate

House rules

Full agent-facing protocol: AGENTS.md (Step 0, workflow, traps, appropriate-use conditions). Capability menu: TOOLS.md. Critique method: skills/isr-critique/.

13The surrounding ecosystem

The ISR is the evidence half of a two-part system, and part of its definition is what sits deliberately outside it. Pointers and capability notes live in POINTERS.md and TOOLS.md §D.

siblingrole relative to the ISR
Color Kernel (color-kernel-lab)an independent second engine for colour — different code, different colour model internals, same OKLab family. Its role is triangulation: when both engines agree on a reading from different machinery, the claim hardens (the corpus's colour findings were cross-checked this way). Deliberately kept separate — merging the engines would destroy their value as independent witnesses.
LSI v2the layered structural-diagnostics device; holds the toolchain's only sequence layer (trajectory coherence over ordered frames — relevant when generative-iteration work runs). Its field-regime package was ported into the spine; the rest stays in the device.
VCLI-G × SCIthe perceptual-load system, deliberately unported: a large, cap-calibrated framework answering a different question (viewing demand). Its core channels were drafted into stance; the style-profile scoring stays in its notebook.
The creative operating layerthe generation half: prompt builders, basin steering, failure/refusal diagnostics, and the adversarial critique protocol — the counterpart of this library's descriptive critique method. The ICV vector library there is the coordinates→language bridge (metric bands paired with prompt clauses).
The papers shelfthe program's published research record — the empirical grounding for claims about generative spatial priors and the cross-domain verticals (pathology, semiconductor, linguistic telemetry). Cite these; don't re-derive them.

14The corpus

Twelve studies across four domains — ten deep single-work reads, one born-digital pair, and one 48-frame within-engine ensemble — all in one coordinate space; each has a lab book (the record) and a critique (the essay), with corrections and retractions on the record. Together they are the instrument's empirical calibration — every reference value in the metric dictionary traces to one of them.

studyworkwhat it contributed
1Matisse, La Leçon de piano (1916)the foundational read — figure/ground instability, single-channel figures; the first calibration pole
2Degas, Dancers, Pink and Green (c.1890)dissolution as order; the accent-scale and channel corrections (I-5, I-7); a measured anomaly externally confirmed as a documented figure — the instrument's premise demonstrated
3Pollock, Convergence (1952)the all-over field; the phrase-grammar battery; the resolution-sweep discipline (I-10) tested against it
4Caravaggio, The Calling of Saint Matthew (1599–1600)scholarship treated as falsifiable counter-tests; the noise findings (I-11); the strongest claim-discipline record
5Soejima, Two-Line Calligraphy (Meiji)first non-Western, non-painting object; the controlled comparator-corpus design; substrate and ablation findings (I-12/13/14); stratigraphy and R_spatial born here
6Klimt, Mäda Primavesi (1912–13)first high-key work; the address channel born; the null-control test built against it (I-15)
7Bruegel (attr.), Fall of Icarusdistributed order vs dissolution; the displaced-subject question answered with I-3/I-4 discipline
8Cartier-Bresson, Behind the Gare Saint-Lazare (1932)first photograph — the third domain; pre-registration held on first test; the seed-chaos correction to the null tool (I-16/17 also earned here)
9Sora Pair, Little Red Default vs Steeredfirst born-digital images — the fourth domain, the designed-for case (no reproduction chain). One prompt family spanned the corpus's full R_spatial range: arrangement, not engine statistics, sets that axis
10MidJourney Ensemble, Little Red Base vs Steered (2×3×8)the corpus's first within-engine draw-variance measurement — claims at cohort level, the register's first cohort-range rows; showed the centred-emblem basin is conditional on engine+prompt, not a property of generated images as a class
11Velázquez, Las Meninas (1656)the deepest shadow-key in the corpus, and a composition that buries its nominal subjects; earned the annular- and dark-on-dark zone-read limits (I-18/19) and the third null family — a figure-position shuffle that withdrew a verdict phase-scramble had passed, showing the nulls bracket rather than answer
12Malevich, Black Square (1915)the first non-objective work — the adversarial limit of an edge-and-gradient instrument, aimed at a painting built to have near-zero internal structure. Five control rounds retired four first-draft "records" against a machine-square anchor (I-20), separating the two things it can measure beyond tone: a clean ~1.7° hand-tilt and the century's decay (tone carries Malevich, gradient carries time). Earned the robust01 silent-zeroing fault (I-23, the owed spine fix) and the control-discipline findings I-21/22/24

15Current state & open threads

dimensionstate
Spine schemav0.7 — stable; changes only through the register
Corpus12 studies · 4 domains — 13 works + 2 AI cohorts (painting ×9 with comparator sets, calligraphy, photography, born-digital AI: a Sora pair + a 48-frame Midjourney ensemble)
Findings24 instrument findings; 5 candidate findings (C-1 resolved externally; C-2 stance provisional; C-3/C-4 decided — not promoted, kept as patterns; C-5 RCP study-local, table to back-fill)
Testssmoke 4/4; calibration 4/4 (theorem-anchored); both green
DocsAGENTS (entry protocol + Step 0), METRICS (dictionary), TOOLS (menu), CATALOG (precedents), CANDIDATES (register), OBSERVATIONS (lab log), CHANGES (14 rounds)

Open threads

16Glossary — the library's language

Naming policy. Where a standard technique exists, the entry names it — an unfamiliar house word is often a familiar method underneath (watershed segmentation, Gini coefficient, normalized compression distance, box-counting dimension, phase scrambling, Pearson correlation, Otsu threshold). Terms marked house are this library's coinages; several are metaphors used as handles — they name a measured geometric quantity and must not be over-read as physical or psychological claims.

System & architecture

termmeaning here
spine housethe shared, always-run report: read_image() and everything it returns. "In the spine" = computed on every read; changes only through the candidate register.
kernelnot a convolution or OS kernel — the 9-value gradient-field coordinate vector inherited from the VTL notebooks (Δx, Δy, ρ_r, μ, x_p, θ, d_s, SDI + mask QA). "The kernel" always means this vector.
evidence fieldsthe nine aligned per-pixel fields of §3; the substrate every measure reads.
lens housea pointable instrument outside the spine, run when the image merits it (gap lens, stance, delta, compare, position).
pattern (shelf) housea runnable, image-general analysis move born in a study and generalised (toolkit/patterns/) — a move to try and adapt, not an answer to confirm.
candidate / register housea measure with promise but no spine status; the register (CANDIDATES.md) accumulates its per-work values and holds its promotion bar. Decisions are made across the corpus, never by the discovering study.
study · lab book · critiqueone deep read of one work. The lab book is the record — measurements, corrections, retractions, in order; the critique is the essay, written only after the lab book is solid.
cohort mode housethe ensemble form of a study: many unselected draws read together, with claims made at cohort level (distributions, variance partitions) and per-image language reserved for pixel-checked exemplars. Register rows in this mode carry verdict distributions, not points.
working copythe pinned reproduction at a stated resolution (library convention 2600 px) that all of a study's reads use — because a different crop or resolution is a different measurement (I-10).
condition check / Step 0the mandatory pre-run phase: look at the image in words, pre-register expectations, name which metrics won't grip, carry no target.
I-findings / C-findingsnumbered instrument findings (cross-cutting lessons about the tool, I-1…I-24) and candidate findings (measures or claims under evaluation, C-1…C-5).

Measures & symbols

termmeaning here
island housea region from standard watershed segmentation of the density field — not geography. Roles: anchor (largest by density_mass) and satellite.
anchor housethe largest island by density_mass. Not necessarily the same object as μ's largest gradient-mask component (I-16) — name which subsystem you are reading.
accent housea small, high-leverage mark found by the gap lens — punctuation-scale structure, with a kind (bridge, lure, snag…) and a leverage value. Nothing to do with speech.
gap lens housethe accent detector — "gap" as in events in the quiet field between islands, not the canny-gap field.
corridor · resistance · tension houseinter-island relation measures: the density path between two islands and how costly/loaded it reads.
counterweight housea region whose removal increases global imbalance (balance_dependency > 0) — load-bearing in the balance sense only.
voida low-activity region of a measured field (below a stated percentile). Empty of measured structure — not necessarily empty of paint.
massthe structural-weight field (0.42·edge + 0.32·tone + 0.26·chroma). "Structural mass," a house blend — not physical mass, not saliency.
μ (mu) · cohesionlargest connected component's share of the gradient mask — one number for "one mass or many."
τ (tau)standard Gini coefficient over the 10-zone luminance distribution — tonal hierarchy.
β (beta)mean L−M opponency inside the structural void — "colour working where drawing is absent." A whole-image aggregate; check per-work purchase (I-15).
Ω (omega)mean pairwise distance among the five field-mask centroids — do the construction families point to the same place.
Γ (gamma) · gradient capturethe void-ratio gap between confirmed edges (luminance × opponency double test) and the widest single-cone activation — activation beyond confirmed structure.
couplingstandard Pearson r between the edge and chroma fields, pixelwise. Near zero, the sign is noise.
cbichromatic boundary independence — the share of strong chroma edges with no luminance edge beneath ("colour drawing lines light doesn't draw").
Δx, Δy · ρ_r · x_p · θ · d_s · SDIcentroid offset from frame centre; packing density (points/hull); peripheral pull; orientation stability; skeleton thickness; spatial dispersion index.
RC_f / RC_s / dRCradial compliance from the frame's centre vs the mass's own centroid; dRC > 0 = self-organising, < 0 = frame-dominant.
LG / TLGlocal/global consistency: quadrants vs whole on the gradient field (LG) and the slow tonal field (TLG) — does the image hold its logic across scales.
field regimea one-word gradient-field type (QUIET_ISOLATED … ACTIVE_FIELD … MIXED) from floor/ceiling/tail-gap statistics.
torque house · metaphorthe mean turning angle of the centroid path across blur scales (σ 2→32) — does the centre of gravity keep its heading as detail dissolves. Not physical torque; a handle for a turning-angle statistic.
stance · standing / torquing housethe choice/default reading built on torque (+ SCI, VCLI-G composite). Thresholds provisional.
address house · metaphorcentral-column mirror-symmetry (normalized cross-correlation against the mirrored field) — how much a composition "faces" the viewer. Valid only with its null sweep: spectral symmetry can fake it.
basin · attractor · default gravity house · metaphorthe centred, frame-locked configuration generators tend to settle into; DGI (0–100) measures depth in it. Describes position, not origin — deliberately stable art also sits deep.
R_spatial housetorque(whole) ÷ max torque(any half or quadrant), as a range over cuts — is the global reading emergent from the arrangement (super-additive) or a cancellation of louder parts (sub-additive).
regime · construction labelthe structural operating mode (construction × coherence × distribution) and the 2×2 spectral label (GRADIENT HEAVY / DIFFUSE ACTIVATION / GENUINE COLOR WORK / LUMINANCE DOMINANT).
persistence · fragile_toisland-level survival under blur / grayscale / low-contrast, and which degradation hurts most.
saliency · mass divergencestandard spectral-residual saliency (no model, no training); mass divergence = the distance between where the eye is drawn and where structural weight sits.
self-similarity Dstandard box-counting dimension plus windowed slope stability. A descriptive coordinate, never authentication; theorem-anchored (Sierpinski = 1.585).
NCD · substratestandard normalized compression distance on matched grayscale bytes — the assumption-free byte witness; saturates ≈1.0 for anything that isn't a near-derivative.
island entropyevenness of density mass across islands — the comparable island quantity (counts are capped, I-17).

Reading practice

termmeaning here
coordinates, not findings housethe instrument locates; the reading interprets. A number is never a conclusion by itself.
purchase housewhether a metric grips this work at all — some metrics read one image's arrangement and only another image's statistics (I-15). Assessed per work, by eye and by null check.
measuring the tool housewhen a number reflects the instrument's construction or the image's global statistics rather than the work's arrangement — the failure the null check exists to catch.
null (three senses)(1) a null result — a zero or absence, which may be a scale/channel artifact (I-5); (2) a null control — a matched-statistics stimulus (phase-scramble: histogram + power spectrum kept, arrangement destroyed; patch-shuffle: histogram + local texture kept, composition destroyed); (3) mirror-NCC reading ≈0 on featureless regions. Context disambiguates; the docs try to say which.
seed sweepmany null draws (n≥100 for symmetry-type metrics) read as a distribution — single null draws are seed-chaotic and flip on luck.
distributional vs compositionala value reproduced by the image's statistics alone, vs one that requires the intact arrangement. A distributional value can still be a true fact — it just isn't a claim about composition.
pre-registrationexpectations written down before measuring, so numbers test a hypothesis instead of seeding a narrative.
claim tierspipeline-stable (survives pipeline/parameter changes) → narrowed (survives with reduced scope) → reading aid (useful orientation; hinges on a threshold or a single configuration). Orthogonally: [confirmatory] (the claim was pre-registered before measuring) vs [exploratory] (found post-hoc — hold it to a higher bar before believing it).
choice / default reading housea measure describing where a work sits relative to a known attractor — exposing whether a configuration was authored or settled into. Never a quality score, never a detector.
reading aid vs verdictevery caveat in this library is a way to read better on the next work — not a permanent label stamped on a metric or an image.

Study-coined descriptors (dissolution, the weave, the spark gap, breath…) belong to individual lab books, not the instrument — they are interpretive vocabulary earned on one work and should be re-earned, not assumed, on the next.