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:
read_image(), one call returning the full structural report (schema v0.8).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.
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.
| field | what it is |
|---|---|
luminance | Rec. 709 luma, [0,1] — the default display substrate; swappable via the preshelf (below) |
edge | Sobel gradient magnitude, robust-normalised (2–98 percentile) |
tone | local luminance deviation — |lum − gaussian(σ=12)| |
color | OKLab chroma via a single LMS pass — perceptually uniform |
perturbation | stability under blur — structure that survives σ=3 smoothing |
mass | 0.42·edge + 0.32·tone + 0.26·chroma, lightly smoothed — the structural-weight field |
lm_opp, lyb_opp | cone-opponent channels (L−M red–green; L+M−2S yellow–blue) |
canny_gap | soft structure: Sobel active but Canny uncommitted — sfumato, haze, slow transitions |
0.42·edge + 0.32·tone + 0.26·chroma is a fixed design choice, not a
fitted quantity. What it commits to is the ordering — committed edges carry
the most structural weight, local tonal deviation next, chroma least — which is
among the better-supported claims in vision science: luminance and edge structure
dominate spatial form while chroma trails it (the everyday proof is chroma
subsampling, which throws away colour resolution and keeps luminance). The weighted
linear sum of feature channels is also the architecture of the classic saliency
models, which likewise ran on fixed, hand-set weights. What has no
derivation is the specific magnitudes: they are stipulated, never fitted or
sensitivity-swept. A corpus-wide weight-perturbation sweep (toolkit/sensitivity) then tested
this, and narrowed the claim. The blend does not reach the kernel
coordinates, τ, β, or coupling: those are edge, luminance, and colour constructions
that never consume the mass field, so they are prior-independent. What the blend
actually drives is the islands branch (island_entropy,
bridge_cost), default_gravity, and the state label. Within
that reach, default_gravity and island_entropy hold their
cross-work ordering under weight jitter; bridge_cost is the most
prior-dependent; and two state labels, Velázquez and Malevich (both
coherent_mass), flip to counterweighted under even a small
reweighting, so those two are prior-dependent and carry that caveat. The inter-metric
correlation structure stays stable throughout. A second, still-unperturbed prior
lives in the islands density field (0.58·support + 0.42·mass).
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).
The luminance field is the front-end every luminance-derived measure
(edge, tone, mass, and downstream the kernel, islands,
accents, τ, and β's spatial gate) is built on. It defaults to Rec. 709 luma on
gamma-encoded sRGB — a display transfer, not a retinal one. The preshelf
is where that substrate becomes a toggle. It is the mirror of the pattern shelf: a shelf item
is a back-end consultation computed from the fields; a preshelf item is a front-end
transform that changes the input before the spine reads it, so one toggle re-colours
every downstream reading at once. It is set once, at the front (evidence_fields(image,
substrate=…), threaded through read_image, island_structure,
gap_lens, and isr read --substrate); do not reimplement it per call.
| substrate | what it is | when to run |
|---|---|---|
display (default) | Rec. 709 luma on gamma-encoded sRGB — the historical substrate | the record; single-work reading |
linear | Rec. 709 luminance on linear light (sRGB EOTF undone) | when true relative luminance is wanted; note it is the least exposure-robust |
lstar | CIELAB L* from linear Y — principled perceptual lightness | lightness hygiene; ≈ display in practice (τ moves ~11%) |
adapted | local Naka-Rushton on linear Y — retinal local adaptation (Weber-local) | cross-reproduction / cross-exposure reading: ~13× more invariant to source exposure. Not when a work's own global tonal hierarchy (τ) is the question — adaptation flattens exactly that |
test_substrate_preshelf: every evidence field is unchanged under
substrate="display"). A substrate-sensitivity probe (n=15 fine-art, descriptive)
motivated this and bounded it: the spatial grammar is substrate-robust — island layout
and mass centre move ~2–3% of frame across all substrates — so the record is safe and the
question of a retinal front-end is not a correctness emergency. Naive linear is
worse for exposure stability, and lstar ≈ display, so
gamma-luma turns out to be an accidentally good perceptual proxy. Adaptation's one measured win
is exposure invariance (τ_std 0.043 → 0.0033), which is exactly the I-10/I-12
cross-reproduction fragility — so it is an opt-in preshelf mode for that job, and whether it ever
becomes the default is a separate, evidence-gated decision, not one made here.
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.8. Full definitions, ranges, calibration
values, and per-metric caveats live in instrument/docs/METRICS.md
— this table is the map, not the dictionary.
The Round-17 consolidation lifted six readings from the parent Saltimbanques
instrument (this reference describes the present state; the lift decisions, the bolt-on-vs-invasive
analysis, and the history live in CONSOLIDATION.md and CHANGES.md Round 17):
three always-on (notan, scanpath, construction) and an opt-in
epistemic layer under include_consensus=True. The default read is otherwise unchanged.
| report key | what it answers |
|---|---|
kernel | where 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 |
islands | the 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, dependency | are 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 |
radial | RC_f / RC_s / dRC — does mass organise around the frame's centre or its own |
soft_structure, field_regime | committed vs soft structure; a one-word field type (QUIET_ISOLATED … ACTIVE_FIELD … MIXED) |
mass_grid | 3×3 zonal weight distribution and asymmetries |
saliency | spectral-residual saliency and mass_divergence — where the eye goes vs where the weight is |
self_similarity | box-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_gravity | 0–100 depth in the centred, frame-locked attractor (centering, radial lock, central concentration, sector symmetry) — a choice/default reading on the radial axis |
vtl | the 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 |
persistence | island-level survival under blur / grayscale / low-contrast — what the structure is fragile to |
notan (Round 17) | texture-robust value(+chroma) Notan mass — a painter's mass beside the edge kernel, parallel to field (which reads the blend): field_void / dispersion / centroid. ~62× less texture-fooled than the blend on the gate. Lifted from Saltimbanques (A1) |
scanpath (Round 17) | bottom-up "does the eye rest" — an Itti–Koch fixation walk on the saliency map: gaze dispersion, focal dominance, competing foci, and a derived restlessness. Perceptual model, no semantics (A4) |
construction (Round 17) | what the structure is built from — perturbation-survival of the Notan mass; fragile_to (grayscale = colour-built, gamma = tonal-built) and built. Reads the Baroque-tonal → Post-Impressionist-chromatic transition (B3) |
assumption, indispensability, singularity (opt-in) | opt-in via include_consensus=True — a per-family construction substrate (~10× a normal read): assumption depth (how deeply corroborated each structure is — colour-built-shallow vs deeply-real), plus load-bearing-ness by arrangement (indispensability) and by unique construction (singularity). A2 / B4 / B5 |
reading | the legible structural state + flags — a reading aid, never a grade |
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).| tool | question | invoke |
|---|---|---|
| Gap / accent lens | small 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 |
| Stance | does 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 delta | what 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 |
| Compare | 2–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 radar | isr compare |
| Position | absolute displacement from a fixed geometric origin on 18 axes — cross-domain coordinates with no reference corpus; every pairwise distance decomposes into named driving axes | isr position |
| Saccade walk + transition field (Round 19) | a path-dependent, foveated tour over the islands + accents — the next fixation read from where the eye currently is, each hop with an authority (island conduit−resistance); distinct from the always-on bottom-up scanpath. Aggregated over all entries into an entry-invariant transition_field: n_centers (competing centres the flow collapses into — convergence, validated synthetic rho −0.894), entry_stability, attractors by in-degree, loops. A case-study lens: read one tour as one traversal, and note it does NOT track the semantic single/multi/field labels (convergence is structural, not semantic). | read_image(include_saccade=True) |
| Readouts | the pictures the instrument sees: island relations, gap overlay, raw field panels — always read against the reproduction before writing anything | isr island-readout · isr render |
| Evidence pages / batch | proof-first HTML per work with crops and custom zone probes; folder-scale CSV + visual panels for controlled corpora | isr evidence-report · isr batch |
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.
That last clause is an intention the library has failed four times
(I-28). Studies have rebuilt chromatic_boundary_independence
and void_topology_chi (both already in the spine), and
local_contrast_ratio and hue_tension (both already on
this shelf since 2026-07-02, re-ported from the same source notebook). The cause
is a wording bug, not carelessness: the entry protocol said to check "before
inventing an analysis," and every one of the four was a port
from a legacy notebook, which does not read as inventing. The cost is not
duplicated effort but wrong numbers — one hand-rolled re-implementation used a
different normalisation and manufactured 46 phantom void bodies where the spine's
returns 0. The rule now covers invent, port, or hand-roll, and sits in Step 0;
this table and toolkit/CATALOG.md are the indexes to grep.
The shelf answers with less authority than the spine, so check it
before deferring to it (I-28, sharpened 2026-07-22). Two patterns here
carried latent defects, and both were found the same way — by running them against
an input whose answer was known in advance (I-24). local_contrast_ratio
returned a per-image min-max normalised field, render-only, which collapsed a 4.8×
discrimination to 1.3×. hue_tension applied a relative chroma
floor, so what survived it depended on how much of the canvas was coloured rather
than on what was coloured; on a full-bleed two-colour field it emptied its own mask
and reported "monochrome pole" for a full warm/cool standoff. In both cases the
rule-breaking study's own port was the better measure. The pattern is not
that the shelf is untested — address.py has 17 consumer scripts,
null_control.py 11, r_spatial.py 7, and those have been
pressured hard in use (a real bug was found and fixed inside
null_control, and r_spatial's Soejima battery included a
no-false-positive-on-an-unstructured-field check). It is that both failures
were patterns no study had ever run, while the catalog gave them the same
standing as the exercised ones. Every shelf row now carries an exercise status;
three read never run. What is true of the whole shelf is only that no
pattern has a frozen test — that discipline exists for the spine alone
(smoke 7/7, calibration 8/8), and shelf validation lives in lab books rather than
in anything that re-runs.
| pattern | what it does |
|---|---|
null_control.py | The 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.py | stratify / 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.py | the 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.py | C-3 candidate — torque(whole) ÷ max torque(any half/quadrant), reported as a range over cuts: super- vs sub-additive composition |
address.py | C-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 | the k=5 OKLab palette assigned compositional jobs — ground / shadow / structure / light / accent, with weights used ×1 |
hue_tension.py | C-8 candidate — warm/cool standoff as one score: which temperature pole a work commits to, and whether it works the tension against it. Call warm_cool(); the original floored form is retired (its relative chroma floor is framing-dependent) never run by a study before 2026-07-22 |
local_contrast_ratio.py | the territory a tonal transition occupies, pre-edge and without Sobel — where canny_gap marks the sharp moment, this maps the region the transition spans. Its chroma arm ÷ luminance arm is C-7, the "atmosphere temperature". Call lcr_field; normalise=True is render-only and destroys cross-work comparability never run |
tonal_gestural_offset.py | the tonal-vs-gestural centroid offset, interpreted — co-located → amplification → friction → opposition. ⚠ corrupt on starved-mask work (I-27): it reads the edge centroid, which on a soft-edged field is whatever speck the mask found never run |
chroma_mean study-local | C-6 candidate — mean OKLab chroma, the saturated/muted axis. Substrate-free where β is not (I-12), and it discriminates where the spine's chroma_variance does not (Rothko pair 4.9× against 1.05×) |
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.
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.
The instrument is anchored, where possible, to objects whose structure class is a theorem — the only ground truth that cannot argue back.
| anchor | what it pins |
|---|---|
| Synthetic fixture | the 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.
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.
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.
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.
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.
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.
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. A finding is about a measurement: correct a number in one sentence and carry on. A thread's own conduct becomes a finding only when it changed, or came near to changing, a number, and is then logged once with its evidence and no running count — an inflated correction is as much an overclaim as an inflated result.
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-1 | Border suppression is not one-size — clean edge-to-edge reproductions want --edge-mode raw; the safe zone can eat real edge figures |
| I-2 | Two committed-edge denominators (soft/all vs soft/active) — match the metric to its denominator |
| I-3 | Rectangular zones dilute non-rectangular objects — a loose box averages the object with its background |
| I-4 | Mask-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-5 | A null can be a scale artifact — the accent lens has a minimum mark size; coalesce before concluding absence |
| I-6 | Uniform dark surfaces flatten the mass field — corroborate "no anchor" with the field panels |
| I-7 | The accent lens is channel-biased — purely chromatic accents are invisible to the structural channel |
| I-8 | Hough-derived statistics are stochastic — report repeated-run ranges, never single decimals |
| I-9 | SCI scale-consistency measures stationarity, not self-similarity (resolved by the box-counting measure) |
| I-10 | Resolution is part of the measurement; a reproduction is not the painting — even exact mathematics drifts through one resampling |
| I-11 | Speck 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-12 | On substrate-dominated works (calligraphy, drawings, prints) β/cbi read substrate tint — the void is the sheet; run the three-way substrate audit. Extended (Study 13): β fails on colour-field painting too, for the opposite reason — there the substrate is the composition, so β reads the ground. Both Rothko plates came back substrate-dominated (bare grounds 0.60 / 0.55 against whole works 0.39 / 0.60) and a desaturate/saturate control showed β is chroma-invariant there. β assumes a figure on a neutral ground; an empty sheet and a full colour field are two opposite ways of not providing one |
| I-13 | Ablation attribution is fill-dependent on relational metrics — the fill-invariance gate is mandatory |
| I-14 | Mask discipline for stroke-built images — hulls are territory not measurement masks; size-limited hole-filling; watershed for cursive; width-confound caveats |
| I-15 | Recognise, 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-16 | Two "largest masses": the gradient-mask component (μ) and the density anchor can be different objects — name which subsystem you are reading |
| I-17 | Segmenter ceilings fake convergence — island counts are capped and carry no similarity information; entropy is the comparable quantity |
| I-18 | The 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-19 | The 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-20 | A 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-21 | PM 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-22 | R_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-23 | robust01 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-24 | A 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. Sharpened: a control's direction is not self-interpreting either. When a number moves under a control, three cases look identical from outside — it removed noise, it removed signal, or it changed the question. Only running the control on an input whose answer you already know tells them apart |
| I-25 | cbi is relational by construction (five stacked layers of per-image normalisation), so it is a within-image, within-family quantity — a cross-corpus ranking of it is incoherent, not merely contaminated, and resolves by deletion. The ≥0.20 threshold is retired; the top-15% is a forced quota, not a measurement; the family must share a reproduction chain as well as a visual language (cbi ingests JPEG chroma blocks directly); on near-monochrome work it cannot separate toning from compression, so read tonal instead |
| I-26 | robust01's mirror fault: it amplifies a near-empty field to full scale, so the field reads a perfectly healthy p98 = 1.0 while carrying no signal, and the I-23 guard cannot see it. A chroma-free image reads cbi 1.000 where the theorem demands 0.000. Diagnostic is the pre-normalisation magnitude (field_qa.chroma_support); the flag fires only at machine-zero, never on low-but-real chroma. Second instance of the shared-normalisation fault class |
| I-27 | The starved field — the opposite signature to I-23's dead one, and the p98 gate cannot see it. Here p98 > 0 (the field is genuinely alive) yet the mask covers almost nothing, so every edge-derived number describes a fragment: Rothko's Green on Maroon read "coherent_mass" off a 0.077% mask that was one corner mark. Corrects I-23's retirement of coverage as a "downstream symptom" — coverage IS the gate for this mode. classify_report now refuses the label (starved_field); floor 0.5%, evidenced against a 3–14% healthy corpus and a legitimate 0.7% bare ring |
| I-28 | The library keeps rediscovering its own tools, and the cause is a wording bug: the "check first" rule was scoped to inventing, while all four failures were ports from legacy notebooks (CBI and void_topology_chi, both already spine; local_contrast_ratio, already on the shelf). The cost is wrong numbers, not wasted effort — one hand-rolled variant manufactured 46 phantom void bodies where the spine returns 0. Grep the spine and the shelf before you invent, port, or hand-roll, and say in the lab book that you did |
| I-29 | The opt-in epistemic layer (assumption / indispensability / singularity) is degenerate below ~3–4 differentiated masses — the coarse consensus segmentation under-resolves multi-figure works, so a centred portrait collapses to n=2 with identical singularity/indispensability, and a tenebrist scene yields no singular mass at all. Its verdicts there are substrate artifacts, not readings. Rule: check n_regions ≥ 3 and a real singularity spread before quoting; gates candidate C-10 (Study 14) |
| I-32 | An extremum or ranking claim is only as good as its reference set: a hand-picked foil manufactures a false extreme. Two failure modes of one requirement — a selection-biased foil (Study 15: an inscription called “the most isolated mark” against six chosen marks collapsed to merely above-average, 74–278 landscape cells more isolated, once the null was made systematic) and an n=1 baseline promoted to a rate (Study 14’s “four times later”). Before any superlative the reference set must be complete and unchosen. Kin to I-24 / I-15 (Study 15) |
| I-33 | The composition layer under-reads relational/tonal structure: the aggregate mass and saliency fields are right about where weight and salience sit and silent about how elements interact. On a work carried by a distributed white tonal armature and by a figure dissolving into its attribute (Bichitr’s Jahangir), the accent lens returned accents=1 and the island/scanpath layer surfaced none of it — not the left-anchored white armature (30% of the whites on one figure), not the figure-into-attribute dissolution (contrast ≈0.010), not the left/right tonal tension. Verified compositional by the null control (cohesion 0.88→0.23 under a block-shuffle). Motivated candidate C-13 (tonal_armature). Kin to I-31 (Study 16) |
| I-34 | Worked ≠ contrast: a coherence-of-form measure (void_typology, C-11, or any coherence discriminator) reports coherent modulation, not tonal contrast — a field can be worked and low-contrast at once. Bichitr’s gold halo makes the gap concrete: its engraved sun-burst is highly coherent (coherence up to 0.993, verdict worked) yet only ~0.02 darker than the flat gold, so the disc reads intricately worked and the emperor set against it tonally dissolves into it. Never let “worked” stand in for “contrasting”; if a coherence verdict is used to argue figure-ground or salience, measure contrast separately. Kin to I-12 (Study 16) |
| I-30 | A clipped or capped scalar must declare when it is saturated — reading exactly at the bound is not the same as landing there. restlessness reads a flat 1.0 but the raw index is ~1.48. Third of the ceiling family (after the island-count cap and the R_spatial range width): treat a bounded scalar at its extreme as a flag and fall back to the un-clipped components, never quote it as a coordinate (Study 14) |
| I-31 | The default edge/mass lens systematically under-reads whatever a work's dominant construction mode is, and it is predictable before the run: colour-field work hides from luminance (Rothko), chroma-only forms from edge/tone (the Gauguin cow, colour 0.88), flat-tonal-value masses from the edge/mass kernel (the Gauguin crowd, 48% of the Notan value-mass against 9% of the island mass), and a flat dark wash from the edge lens entirely (Jeong Seon's granite dome, Study 15 — edge-quiet inside, recovered only by the value squint). A Step-0 rule — name the construction mode first, reach for the matching bolt-on. Unifies I-5 / I-7 / I-12 / I-27 (Study 14; recurred Study 15) |
| image type | condition |
|---|---|
| Clean reproduction | no visible frame, consistent crop: everything valid, including batch runs |
| Museum photo with frame / mat / cracks | the 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 reproduction | run 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 surface | dense 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 work | calligraphy, 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) image | the 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 image | photograph, 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 |
Several subsystems pin an internal resolution so their calibrated constants hold; numbers are not comparable across pipelines or scales without noting these.
| subsystem | internal 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 lens | 900 px short side (all σ values calibrated there; coordinates scaled back) |
| Stance | 768 px max side |
| Address (C-4 pattern) | 800 px max side |
| Layered delta — NCD substrate | 384 px letterboxed grayscale |
| Saliency | 256 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.
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).
# 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 # 7 checks, incl. 16/16 fixture accents
$VENV instrument/tests/calibration.py # theorem-anchored orderings
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
from isr import read_image # the spine (dict, schema v0.8)
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
instrument/docs/METRICS.md — ranges,
calibration values, and the caveat attached to each metric. Never from key names alone.Full agent-facing protocol: AGENTS.md (Step 0,
workflow, traps, appropriate-use conditions). Capability menu:
TOOLS.md. Critique method: skills/isr-critique/.
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.
| sibling | role 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 v2 | the 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 × SCI | the 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 layer | the 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 shelf | the 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. |
Sixteen studies across four domains — thirteen deep single-work reads, a matched painting pair, 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.
| study | work | what it contributed |
|---|---|---|
| 1 | Matisse, La Leçon de piano (1916) | the foundational read — figure/ground instability, single-channel figures; the first calibration pole |
| 2 | Degas, 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 |
| 3 | Pollock, Convergence (1952) | the all-over field; the phrase-grammar battery; the resolution-sweep discipline (I-10) tested against it |
| 4 | Caravaggio, The Calling of Saint Matthew (1599–1600) | scholarship treated as falsifiable counter-tests; the noise findings (I-11); the strongest claim-discipline record |
| 5 | Soejima, 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 |
| 6 | Klimt, Mäda Primavesi (1912–13) | first high-key work; the address channel born; the null-control test built against it (I-15) |
| 7 | Bruegel (attr.), Fall of Icarus | distributed order vs dissolution; the displaced-subject question answered with I-3/I-4 discipline |
| 8 | Cartier-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) |
| 9 | Sora Pair, Little Red Default vs Steered | first 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 |
| 10 | MidJourney 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 |
| 11 | Velá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 |
| 12 | Malevich, 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 |
| 13 | Rothko, No. 31 (Yellow Stripe) (1958) & Untitled (Green on Maroon) (1961) | the corpus's first matched pair, and the exact counter-pole to Malevich: Black Square was all edge and no interior, a Rothko is all interior and no committed edge. The first work the edge subsystem is not pointed at at all — on Green on Maroon the entire structural mask was one corner mark at 0.077% coverage, and the classifier confidently called it "coherent_mass," which earned I-27 (the starved field, the opposite signature to I-23 and invisible to its gate). The headline is threshold-free: void_topology_chi reads 30 interior bodies against 0 at the study's 1500 px working scale — one painting has an inside the instrument can count, the other has none, because its only boundary is refused to light and given to hue. Restated as a swept range (Entry 14, 2026-07-22): the measure thresholds on a 31 px block with a 256 px body floor, both absolute pixel scales, so it is resolution-dependent in the I-10 sense and was quoted at one scale without it. Swept 800 px–native, A runs 9–30 and B 0–2; the contrast holds at every scale and the reading is unchanged, but the integers are retired as integers. cbi moves the same way and its A-to-B gap narrows from 3.6× to 1.27× with resolution, so "B ≫ A" is a 1500 px statement. tlg (1.0 / 0.126) is flat across the sweep and is the resolution-robust leg. Colour and tone carry the reading where edge and gravity cannot. Also earned I-25 (cbi is relational by construction, so within-family only; the 0.20 threshold retired) and I-26 (robust01's amplification mode). A compression control closed the last confound: real chroma boundaries survive compression, noise-driven ones do not |
| 14 | Gauguin, Vision of the Sermon (1888) | chosen to flex the Round-17 epistemic layer, and the study that most stress-tested the library's own discipline (three adversarial passes, each catching a smaller error inside the last). The headline is a new kind of reading — structural chronology: read as a sequence, the instrument's salience-ordered traversal reaches the subject (Jacob and the angel) only at the 17th of 20 fixations, against a centred-portrait control reached at the 4th — the composition delays the reveal of its own subject, true at n=4 and needing no segmentation. Earned I-29 (the epistemic layer is degenerate below ~3–4 differentiated masses), I-30 (a capped scalar must declare when it is saturated), and I-31 (the default edge/mass lens under-reads a work's dominant construction mode — here the tonal crowd, 48% of the Notan value-mass but 9% of the island mass, and the pure-colour cow, both invisible to edge/mass). A same-coordinate comparison with Bernard's Breton Women in the Meadow — the flat-field canvas Gauguin owned — measured appropriation as transformation: more colour-autonomous and more dramatically composed, not flatter and not more chromatically dominant. Candidate C-10 (indispensability↔singularity inversion) filed, gated by I-29 |
| 15 | Jeong Seon, Inwangjesaekdo (1751) | the corpus’s first Korean work, chosen for a new regime — monumental mass against an active void, in ink monochrome. The eye’s single monument is structurally bipolar: the misted foreground carries nearly the granite dome’s value-mass (≈42% vs 41%), the two held apart by a worked fog — a two-zone reading that converges with the scholars’ two-viewpoint account. The samjeol claim that the inscription balances the composition failed on every structural mechanism the instrument could reach (mass-counterweight refuted, colour untestable at fidelity, negative-space activation unsupported, one-hand undecidable), locating that balance in the semantic layer the instrument declines. Earned I-32 (an extremum needs a systematic null, not a chosen foil) from its own retracted overclaim; the void reading was reopened, re-measured by masking, and corrected in the open record — the study most tested by its own adversarial discipline |
| 16 | Bichitr, Jahangir Preferring a Sufi Shaikh to Kings (c.1615–18) | the corpus’s first Mughal miniature, and a picture engineered as a rank order — the cleanest test yet of subject-weight, since the patron’s programme pre-declares who dominates. Three independent measures (structural mass, modelling relief, figure-ground contrast) converge: the emperor titled Seizer of the World is the least self-supporting figure in his own portrait — his body carries under 2% of the visual mass, his gold halo several times that, and he tonally dissolves into it (contrast ≈0.010). His dominance is manufactured by attribute, scale and position, not bodily substance; verified compositional by the null control (cohesion 0.88→0.23 under a scramble). The study’s signature is a meta-finding: four pre-registered bets, and in every one the phenomenon held while the tidy first metric was corrected — density marginal not dramatic, halo worked but not contrasting, the Holbein-inverse by relief not chroma, the strata figure-vs-ornament but not datable (the instrument declined to date the disputed border). Earned I-33 (the composition layer under-reads relational/tonal structure, motivating candidate C-13 tonal_armature) and I-34 (worked ≠ contrast) |
| dimension | state |
|---|---|
| Spine schema | v0.8 — stable; changes only through the register |
| Corpus | 16 studies · 4 domains — 18 works + 2 AI cohorts (painting ×14 with comparator sets and one matched pair, calligraphy, photography, born-digital AI: a Sora pair + a 48-frame Midjourney ensemble) |
| Findings | 34 instrument findings (I-33/I-34 from Study 16 — the composition layer under-reads relational/tonal structure, and worked ≠ contrast; I-32 from Study 15); 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; C-6 chroma_mean, C-7 atmosphere temperature, C-8 warm/cool entered 2026-07-22 at Study 13's gather, n=2 each; C-10, the indispensability↔singularity inversion, filed at Study 14 and gated by I-29; and Study 15's mark-isolation, gesture-axis saturation, and aged-plate luminance confound held un-promoted) |
| Tests | smoke 14/14 (incl. the three field-health guards I-23/26/27, the Round-18 preshelf byte-identity guard, and the Round-19 saccade opt-in guard) + the saccade gate (6, incl. the path-dependence kill test); calibration 8/8; all green |
| Docs | AGENTS (entry protocol + Step 0), METRICS (dictionary), TOOLS (menu, incl. the preshelf §A′ and the saccade lens §B), CATALOG (precedents), CANDIDATES (register), OBSERVATIONS (lab log), CHANGES (19 rounds) |
adapted as an opt-in for cross-reproduction reading. Whether local adaptation should ever become the default substrate is deferred to evidence: it would move every value-referenced measure (τ, β) and must go through the register with the studies re-run, never silently.saccade.py: a foveated, path-dependent tour that reads the field from where it currently is, carries an authority hand-off (island conduit−resistance) between fixations, and aggregates to an entry-invariant transition_field (so no single path is claimed). Its convergence coordinate n_centers is validated on synthetic (rho −0.894) but does not track the semantic single/multi/field labels — a case-study lens, not a classifier. Distinct from the always-on bottom-up scanpath, which is untouched. The open question it raises: convergence-specific pre-registered labels are the right corpus test, not the borrowed focus labels.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.
| term | meaning here |
|---|---|
| spine house | the shared, always-run report: read_image() and everything it returns. "In the spine" = computed on every read; changes only through the candidate register. |
| kernel | not 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 fields | the nine aligned per-pixel fields of §3; the substrate every measure reads. |
| substrate house | the luminance front-end the evidence fields are built on, selectable by the preshelf: display (default, Rec. 709 gamma-luma — the record), linear, lstar, adapted (retinal local adaptation). Set once via evidence_fields(substrate=…); the colour path is substrate-independent. |
| preshelf house | the front-end mirror of the pattern shelf: an opt-in transform that changes the input before the spine reads it (so one toggle re-colours all downstream readings), where a shelf item is a back-end consultation computed from the fields. First inhabitant: the luminance substrate (§3, Round 18). |
| lens house | a pointable instrument outside the spine, run when the image merits it (gap lens, stance, delta, compare, position). |
| pattern (shelf) house | a 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 house | a 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 · critique | one 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 house | the 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 copy | the 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 0 | the 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-findings | numbered instrument findings (cross-cutting lessons about the tool, I-1…I-34) and candidate findings (measures or claims under evaluation, C-1…C-13). |
| term | meaning here |
|---|---|
| island house | a region from standard watershed segmentation of the density field — not geography. Roles: anchor (largest by density_mass) and satellite. |
| anchor house | the 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 house | a 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 house | the accent detector — "gap" as in events in the quiet field between islands, not the canny-gap field. |
| corridor · resistance · tension house | inter-island relation measures: the density path between two islands and how costly/loaded it reads. |
| counterweight house | a region whose removal increases global imbalance (balance_dependency > 0) — load-bearing in the balance sense only. |
| void | a low-activity region of a measured field (below a stated percentile). Empty of measured structure — not necessarily empty of paint. |
| mass | the structural-weight field (0.42·edge + 0.32·tone + 0.26·chroma). "Structural mass," a house blend — not physical mass, not saliency. |
| μ (mu) · cohesion | largest 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 capture | the void-ratio gap between confirmed edges (luminance × opponency double test) and the widest single-cone activation — activation beyond confirmed structure. |
| coupling | standard Pearson r between the edge and chroma fields, pixelwise. Near zero, the sign is noise. |
| cbi | chromatic 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 · SDI | centroid offset from frame centre; packing density (points/hull); peripheral pull; orientation stability; skeleton thickness; spatial dispersion index. |
| RC_f / RC_s / dRC | radial compliance from the frame's centre vs the mass's own centroid; dRC > 0 = self-organising, < 0 = frame-dominant. |
| LG / TLG | local/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 regime | a one-word gradient-field type (QUIET_ISOLATED … ACTIVE_FIELD … MIXED) from floor/ceiling/tail-gap statistics. |
| torque house · metaphor | the 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 house | the choice/default reading built on torque (+ SCI, VCLI-G composite). Thresholds provisional. |
| address house · metaphor | central-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 · metaphor | the 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 house | torque(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 label | the structural operating mode (construction × coherence × distribution) and the 2×2 spectral label (GRADIENT HEAVY / DIFFUSE ACTIVATION / GENUINE COLOR WORK / LUMINANCE DOMINANT). |
| persistence · fragile_to | island-level survival under blur / grayscale / low-contrast, and which degradation hurts most. |
| saliency · mass divergence | standard spectral-residual saliency (no model, no training); mass divergence = the distance between where the eye is drawn and where structural weight sits. |
| self-similarity D | standard box-counting dimension plus windowed slope stability. A descriptive coordinate, never authentication; theorem-anchored (Sierpinski = 1.585). |
| NCD · substrate | standard normalized compression distance on matched grayscale bytes — the assumption-free byte witness; saturates ≈1.0 for anything that isn't a near-derivative. |
| island entropy | evenness of density mass across islands — the comparable island quantity (counts are capped, I-17). |
notan · Notan mass (Round 17) | texture-robust value(+chroma) mass, squinted so brushwork does not fool it — a painter's mass beside the edge-weighted mass blend (~62× less texture-fooled on the gate). Lifted from Saltimbanques (A1). |
scanpath (Round 17) | a bottom-up Itti–Koch fixation walk over the saliency map (winner-take-all + inhibition-of-return): gaze dispersion, focal dominance, competing foci, and whether the eye rests or roves. Perceptual model, no semantics (A4). |
construction · built (Round 17) | what the structure is made of, from perturbation-survival of the Notan mass: grayscale-fragile = colour-built, gamma-fragile = tonal-built. Reads the Baroque-tonal → Post-Impressionist-chromatic shift (B3). Distinct from persistence's island-level fragile_to. |
assumption · indispensability · singularity (opt-in, Round 17) | the include_consensus=True per-family construction substrate (~10× a normal read): assumption depth (how deeply each structure is corroborated — colour-built-shallow vs deeply-real), plus load-bearing-ness by arrangement (indispensability) and by unique construction (singularity). A2 / B4 / B5. |
| term | meaning here |
|---|---|
| coordinates, not findings house | the instrument locates; the reading interprets. A number is never a conclusion by itself. |
| purchase house | whether 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 house | when 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 sweep | many null draws (n≥100 for symmetry-type metrics) read as a distribution — single null draws are seed-chaotic and flip on luck. |
| distributional vs compositional | a 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-registration | expectations written down before measuring, so numbers test a hypothesis instead of seeding a narrative. |
| claim tiers | pipeline-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 house | a 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 verdict | every 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.