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.7).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] |
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 |
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).
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 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 |
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 |
| 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.
| 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 · hue_tension.py · local_contrast_ratio.py · tonal_gestural_offset.py | smaller 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.
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.
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 |
| 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 |
| 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 # 4 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.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
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. |
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.
| 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 |
| dimension | state |
|---|---|
| Spine schema | v0.7 — stable; changes only through the register |
| Corpus | 12 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) |
| Findings | 24 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) |
| Tests | smoke 4/4; calibration 4/4 (theorem-anchored); both green |
| Docs | AGENTS (entry protocol + Step 0), METRICS (dictionary), TOOLS (menu), CATALOG (precedents), CANDIDATES (register), OBSERVATIONS (lab log), CHANGES (14 rounds) |
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. |
| 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-24) and candidate findings (measures or claims under evaluation, C-1…C-5). |
| 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). |
| 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.