Every block the system has drawn so far was a colour it chose. A photograph is a block whose colour it did not choose — a field of someone else's light — and the client site has a hundred and sixty-seven of them. This study gives an image nothing an ordinary block does not have: a span, a count of rows, a plane, a shadow. The crop is the score and is read back per edition; a glass pane brings a photograph toward the palette by the ledger's own multiply; a photograph goes behind a cut window at plane −1 and is rolled by the page; a screenshot of a client project, which may not be cropped, has its letterbox counted and its own grid measured against the page's; and the live site's media is ledgered against the grid's cell to learn which photographs snap and which must be cut.
A photograph from the live site (a sunlit room; the client site uses it on a service page) in a block of four columns by four rows at 7×5, three by four at 5×3, three by four at 3×2 — the same image cropped three ways by the three editions, because the block is the crop window and the image fills it. The score names the focal point, --fx and --fy, as a percentage of the image; focal moves it; tone lays the engine's glass pane over the image in navy, sky or the signal, the ledger's multiply at the ledger's opacity; grids draws both grids over it. The note reads the crop back in the image's own pixels and samples its mean colour against the tokens. After the image, two rows of paper: the quiet passage the plan says every set piece must buy.

A photograph is a block whose colour the system did not choose.
—
The plan defines plane −1 as recessed texture seen through windows cut in plane 0, moving slower than scroll — the one sanctioned parallax. The torus did it with a drum; this does it with a photograph. The window is an ordinary cut block, four columns by three rows; the image behind it is taller than the window by its travel (two rows) and a view() timeline rolls it by exactly that as the window crosses the viewport. No scroll listener moves anything; the script only reads the transform back and reports the roll and the fraction of the page's speed. Scroll past it and watch the readout.
PLANE −1
BEHIND THE SHEET

What shows is what the window allows; the rest is behind the sheet. The roll is in rows, because the travel is.
AXI-019
IMAGE v0.1
A screenshot of a client project — the AIPOS positioning tool, from the case study the site publishes — is the one kind of image that may not be cropped: its edges are information, the browser chrome and the ends of its lines. So it is fitted inside its block (contain) and the remainder is paper, a letterbox, counted per edition in pixels and rows. And a screenshot carries a grid of its own: the tool's columns, its panels, its slider. The instrument finds the strongest vertical edges in the rendered screenshot and measures each to the nearest line of the page's two grids inside the block — the interference census; edges marks them, grids draws the page's. Beside it, a chart from another case study, as the live site has it: a picture of numbers, which the metrics study will take up.


Two second lattices on the first: a tool's interface and a chart's axes. Neither was drawn on this grid; the census says by how much.
The live site's media library holds a hundred and sixty-seven items; a hundred and forty-five of them are two hundred pixels or wider and are ledgered here as width and height. For each, the instrument finds the block on this edition's base grid — up to the full width and eight rows — whose aspect is nearest the image's, and records the crop that block would need. It does this twice: under the page's row, and under a row that is half a column, which the √φ ladder question upstream has been asking about since the sketchbook. The grid's cell is wide — a column is two and a half to three rows — and that ratio decides which photographs snap and which must be cut.
| row | row px | cell (col ÷ row) | snap within 1% | within 5% | median crop | mean crop | most used blocks |
|---|
The system has never had a rule for images because it never needed one: every block was a colour from the tokens, and the tokens were closed under the one operation the planes allow. A photograph breaks that closure in the simplest way — it is a field of colour the palette does not contain — and the first thing this study found is that nothing else about it needs to be new. It takes a span and a count of rows like any block. It is cropped by the block, which means it is cropped by the score, which means the crop is written down per edition and can be read back as a rectangle in the image's own pixels. The ledger's multiply, which closed the palette, is also the way to bring a photograph toward it: the engine's own glass pane, laid over the image, moves its mean colour measurably closer to a token, and the instrument says which token and by how much. Plane −1, which the plan defined and the torus proved with a drum, takes a photograph without complaint.
The two harder cases are the ones where the image has a geometry of its own. A screenshot may not be cropped, so the block has to be given the rows that contain it and the remainder has to be admitted as paper; on this grid a letterbox is a block of paper, and the right score is the one that makes it a whole row or none. And a screenshot carries a second lattice — the tool's — laid over the first, which the census measures rather than pretends away: so many of its edges on the page's lines, so many between them. The inventory then asks the question the client build will have to answer: the grid's cell is wide, a column is two and a half rows, and that ratio decides which of a hundred and forty-five images snap to a block and which must lose a tenth of themselves to the crop. Under a half-column row the answer changes, and that is a finding for the row question upstream, not for this study to settle.
Second study of the night; the draw is taken with the date suffixed, as the charter says. Five sentences:
Recommendation: Astro + native modern CSS, no client framework, static output.kept: the extension is a stylesheet and a reader; the images are static files in the repository, six of them, resized by hand
Workshop orange #E97C12 · purple #A44BE0 Tool chrome only: orange = controls & editable state, purple = AI-generated candidates awaiting curation.considered: on the client site a photograph the AI chose would be a candidate and would wear purple until a human approved it; here everything is a candidate already
Rule of thumb: every set piece buys its intensity with the quiet passage that follows.answered as law 7: a photograph is the most intense block the system can carry, and Study A's score gives it two rows of paper after; the instrument counts the rows of quiet below every image block
The content architecture is two layers of plain text files: blocks (what things say) and scores (how a page arranges them).answered as law 1: the image is the block (what it says: the file, the alt text) and the crop is the score (the span, the rows, the focal point) — so the same photograph is cropped three ways by three editions without the file changing
Vertical rhythm: a fixed row unit (64px at XL) plays the role of the beat; only overlay blocks may land on the half-beat.answered in Studies C and D: an image's height is whole rows, a screenshot's letterbox is measured in rows, and the inventory is ledgered under the page's row and a half-column row — the beat decides which photographs snap
draw.js| Constant | Value | Why |
|---|---|---|
| the block | --c --s --r --rs on the base grid · object-fit cover · object-position --fx --fy | law 1: an image never sets its own size; the crop is the score, rescored per edition |
| the crop | source rect = box ÷ scale, placed by the focal point · kept = its area ÷ the image's | law 2: read from the rendered box and the natural size; a number in the DOM |
| contain | data-fit="contain" · remainder = paper · letterbox in px and rows | law 3: a screenshot's edges are information; the score gives it the rows that contain it |
| the census | column sum of |Δx| on a canvas · peaks > 2 × mean · nearest base or overlay line · on a line if ≤ 2 px | law 4: a screenshot is a second lattice; measure the interference instead of pretending it away |
| tone | .im::after · multiply · opacity .8 · navy, sky or signal | law 5: the engine's glass, the ledger's closure; the mean after the pane is computed the same way |
| mean colour | 48 × 48 thumbnail on a canvas · nearest token by RGB distance | what the sketchbook's paper critic would read if it could read a photograph |
| plane −1 | image = window + travel rows · view() entry 0% → exit 100% · speed = travel ÷ (viewport + window) | law 6: the one sanctioned parallax; the torus's roll with a photograph; held at half travel under reduced motion |
| the quiet | rows of paper below the image in its own columns, until a block | law 7: the plan's rule of thumb, counted |
| the inventory | 145 images ≥ 200 px · best block ≤ base × 8 rows by aspect · crop = 1 − min(a, b) ÷ max(a, b) · page row and col ÷ 2 | law 8: the cell's aspect decides which photographs snap |
| feed/score | script: data-src-rect, data-kept, data-letterbox, data-mean, data-token, data-dist, data-after, data-edges, data-quiet, data-roll, data-speed · stylesheet: the fit, the pane, the window, the roll, the labels | law 9 |
view() timeline rolls it, and the speed relative to the page is travel over viewport-plus-window — about a tenth at L for two rows. Nothing in the engine changed; the torus had already proved the roll.--fx/--fy at the three editions, and read the crops back before shipping.