← All drafts

The print shop in Blender — layout state (31 Aug 2026)

The Blender set of the shop interior, as it stands after the 31 Aug relayout. Written so a session that did not do the work can pick it up.

The file lives at `~/blender-checkpoints/printshop-before-relayout-20260831-125143.blend` — a checkpoint path, and the name is now a lie: it holds the relayout, not the state before it. It has never had a home outside `blender-checkpoints/`. A `Save As` to something like `~/the-offer/printshop.blend` is worth doing before anyone builds on it. Blender 5.2.1 LTS, EEVEE, one scene, frame range 1–168.

Superseded, 5 Sep 2026. The file open in Blender is now

`~/blender-checkpoints/printshop-m08-relayout-20260901.blend`, frame range 1–240,

and the set was re-measured out of it on 5 Sep. **The extents in "Where things are"

below are the 31 Aug state and no longer describe the set.** What moved: the two

presses have swapped ends (working now west, x 0.50…2.44; idle east, x 3.08…5.02),

the M-08 table has been turned and widened and the bench has crossed the room to

x 0.13…0.58, the counting desk has come 0.80 m north and the box 0.20 m — which clears

the door-clearance and overlap flags this note recorded — and the Old Printer now

stands at the M-08 boy's table, not the long table. `PRP_letter` and `PRP_bench`

no longer exist. The 5 Sep numbers are read out in the Wittenberg Print Shop Plan

page. The construction conventions and the open items below still hold, except where

item 6 now says otherwise.

What the layout is matched to

`refs/set/shop-day-26.png`, with `refs/probe/shop-pan-02.mp4` for the angles it does not show. Mabel's direction, 31 Aug: match placement and positioning to that still.

Before the relayout the room was mirrored against the reference — the type case on the left, both presses centre and right. `LGT_case_key`, the type case's own key light, was sitting at x=3.1 on the right, 4.1 m from the case it was lighting: the light was already where the reference wanted the case.

Where things are (world extents, metres, Z-up)

Room: floor x −3.2…5.5, y −3.4…3.75. Ceiling 3.55. North wall inner face y=3.75, east wall inner face x=5.5.

North wall, left to right

x extenty extent
`PRP_typecase_01`−1.99 … −0.262.55 … 3.40
`PRP_press_idle`0.15 … 2.351.73 … 3.40
`PRP_press_work`2.95 … 4.891.99 … 2.95

0.605 m between the presses (wall tools at x 2.38…2.92 hang on the post in that gap), 0.413 m from rack 01 to `press_idle`, 0.606 m from `press_work` to the east wall.

East wall, north to south

y extentx extent
`PRP_typecase_02`0.09 … 1.824.61 … 5.46
`PRP_counting_desk` (+ ledger)−1.51 … −0.213.84 … 4.59
`PRP_box_01`−1.25 … −0.464.70 … 5.45
`PRP_door_side_leaf`−2.98 … −2.03on the wall face

`PRP_typecase_02` is new — a duplicate of rack 01, turned 90° to face into the room. The writing desk was pulled 0.9 m off the wall toward the Old Printer, and `PRP_box_01` (0.75 × 0.79 × 0.65, deliberately unspecified) fills the gap behind it.

Foreground: `PRP_long_table` runs front-to-back, x 0.5…1.5, y −2.15…1.05, top 0.82. `PRP_bench` x −1.83…−0.43, y −1.78…−1.23, seat 0.50, with `PRP_letter` resting on it.

Drying lines: `PRP_dryline_01` y=0.20, `PRP_dryline_02` y=1.45, cords at z 2.78, sheets 2.16…2.72, 8 per line. They were at y −1.65 and 0.95 — the first was 1.55 m in front of `CAM_ref_match`, which is why sheets filled the top of frame. Both now sit clear in front of `press_idle`'s front face (y 1.73) so they cross the presses instead of clipping through them. The sheets are not parented to the cords; move them together.

Stand-ins: Lufft (−1.13, 2.10) at rack 01 · Old Printer (1.85, 0.30) at the long table · Apprentice (−1.13, −0.15) · Young Printer (−4.8, 0.05), parked outside the west wall. `PRINTSHOP_LABELS` is hidden from render; unhide it for the staging camera.

Construction conventions in this file

Open, and deliberately not changed

1. Both presses are scaled to 76.6% height — 2.45 m where unscaled they are 3.20. In shop-day-26 the presses run up to the ceiling beams; here there is 0.7 m of air above them, which is why the drying sheets read at head height. Restoring them puts them into the beams at ~3.12. A decision, not a cleanup. 2. Both type racks are flattened — y-scale 0.4911 turns a deep sloped rack of trays into a 17 cm panel. The reference racks are about a metre deep. 3. `LGT_case_key` is at x 3.1, in front of `press_work`, lighting neither rack. 4. `CAM_m08_twoshot` cannot hold its two-shot from where it stands. Its target was re-aimed on 31 Aug from inside `PRP_press_idle` to the midpoint of its two characters, (0.361, 0.075, 1.300). The handheld breath is three NOISE modifiers on the target's location f-curves, so the re-aim went through `delta_location` — setting `location` would be overwritten every frame. The noise is intact.

The camera body is still wrong and re-aiming does not fix it. From (−0.7, −0.1, 1.58) the Old Printer sits a clean 2.04° off axis at 2.69 m, but the Apprentice is 103.67° off axis — behind the lens, with only 0.208 m between the camera and his bounding box. At 32 mm (half-FOV 29.36°) the two of them span 3.43 m and need 3.64 m of throw, which puts the camera 0.17 m outside the south wall. The geometry that does work is the south side looking north: (0.361, −2.95, 1.58) at about 26 mm, 3.03 m from the midpoint. That is a shot decision and has not been made — `PRP_long_table` would run into the near foreground from there.

`CAM_m07_end` is fine and was not touched. Its target (−1, 2.7, 1) still sits inside `PRP_typecase_01` (x −1.99…−0.26, y 2.55…3.40, z −0.04…1.41), with Lufft 0.63 m off the aim point. The rack moved right and back again during the day and finished about 13 cm from where the camera was originally set against it. 5. `CAM_ref_match` is not framed like shop-day-26. It is a 20 mm sitting 0.2 m off the back wall and sees the whole 8.7 m room; the reference is a tighter, more selective view. The bench sits where the reference puts it and this camera crops it out. 6. ~~`ENV_beam_01`–`04` all report the same transform~~ — **answered 5 Sep 2026, and it was both halves of the guess at once.* The four beams genuinely are* stacked: all four carry `location` (1.15, 0, 3.25), one inside another. And the identity `matrix_world` was a read artifact, not a fact about the beams — all four are `hide_viewport = True`, which drops them out of the depsgraph so their world matrix and dimensions never refresh (see the construction conventions above). Reading `location` rather than `matrix_world` is what settled it. Still to do: the four beams need spreading across the ceiling, which nobody has done — the stacking is real. 7. The side door is an appliqué on solid wall, not an opening: leaf and jamb intersect the wall by design. Pre-existing. This binds anything rendered out of Blender — a generation built from wording is unaffected, since Higgsfield never sees the geometry. 8. `ENV_ceiling` is hidden from render, so the top of any interior frame is world background rather than ceiling. That is a framing consequence, not just a read one: `CAM_m08_twoshot` at 1.70 m carries a band of flat grey across the top of frame. Either unhide the ceiling or keep the lens low enough to hold beams and wall in the top third.

Also done on 31 Aug

Before generating anything from this set

The M-08 build reported in thread `t9` at 12:33 on 31 Aug (boy's table, 25 blank sheets, keyed transfers) is not in the file — only `CAM_m08_twoshot` survived. The M-08 row in `sheets/shots-morning.md` describes staging that no longer exists in Blender. Re-read the row against the set before treating either as current.

Nothing has been generated from this set. No credits have been spent on it.

Evening seating for E-01, the transition (14 Sep 2026)

A second scene, `EVE_E01_transition`, is a full copy of `Scene`, so its objects carry `.001` suffixes and the morning staging is untouched. Seated per Mabel in thread `t15` (09:31): three men only, no Apprentice.

seat (x, y)faces
`CHR_Lufft.001`1.472, 1.25 — north head of `PRP_long_table`south
`CHR_OldPrinter.001`0.62, 0.35 — west side, Lufft's righteast
`CHR_YoungPrinter.001`2.32, 0.35 — east side, Lufft's leftwest

Stand-ins are rigid, so each is scaled in Z to a 1.32 m seated head top over a `PRP_eve_stool_*` (seat 0.45, `MAT_oak`, object-linked). The Young Printer's M-08 walk keys are cleared in this copy; `CHR_Apprentice.001` is hidden. `PRP_eve_candle` is a pillar stand-in at (1.472, 0.55) on the table top. **The `PRP_m08_bench` parts are moved 0.45 m west in this scene only** — at x 0.12…0.57 they left 0.40 m beside the table, no room for a seated man. Which head Lufft takes and who sits on which side were my choices, not direction. Checkpoint before the change: `printshop-before-evening-seating-20260914-094231.blend`.

Seating orbit (14 Sep 2026). In `EVE_E01_transition`, `CAM_orbit_pivot.001` is moved to (1.472, 0.6, 1.0), and `CAM_orbit.001` sits at local (0, −2.4, 2.3), which is world z 3.3, with a 22 mm lens. The pivot keeps its keyed 360° over frames 1–240. At z 2.3 the lens went through `PRP_press_work`. At z 2.72 it cleared the press, but from the north side the press head hid Lufft, which only showed up in the render. At 3.3, rays from the lens to all three heads are clear on every third frame. The daylight rig is still on, so the orbit shows where everyone sits, not the candlelit look. Renders go in `~/blender-checkpoints/eve-e01-seating-orbit-*.mp4` (EEVEE, 16 samples).

Orbit-01 angle, later on 14 Sep. Mabel asked for the angle of `refs/blender-movies/printshop-orbit-01.mp4`: the high doll's-house view from outside the walls, with the name labels on. In `EVE_E01_transition` the rig is now set back to that file's values: pivot (1.15, 0.175, 1.2), camera local (0, −8, 9.8), 32 mm. `PRINTSHOP_LABELS.001` renders, and the Apprentice's label stays hidden. **One bug fixed on the way:** the first seating pass had put the three seated men's labels under the floor (z ≈ −0.3). They sit at 1.56 (stalk) and 1.92 (text) now. The earlier indoor orbits did not render labels, so they were not affected.

Correction to the label fix above. The label posts were also at the wrong size. My first re-seat set their world matrix from a stale identity, which turned each `LBLSTALK_*.001` from a 0.02 × 0.02 × 0.48 post into a 1 m cube. They showed as pastel blocks over the three men in the first render at orbit-01's angle. That render was not put on the reference page; it is still at `~/blender-checkpoints/eve-e01-seating-orbit-03-0001-0240.mp4`. The posts are rebuilt now, rising from the head top (1.32). The evening text is 0.25 rather than 0.46, because at 0.46 the three names overlap across this table. Lufft's post is 0.35 m taller, so his name clears the other two.

The evening gets its own gallery (14 Sep 2026, Mabel's direction). `tools/build.py` now writes two gallery pages. `refs.html` is Scene 1's (the morning's, plus the material both scenes share), and `refs-evening.html` is the evening's. A file is listed on the evening page when its shot id starts `E-`, or when its name starts `evening-`. So the seating orbits were renamed. The old names survive in thread `t15` and in the bucket:

wasnow
`printshop-orbit-04` (inside the room; the press hides Lufft)`evening-orbit-01`
`printshop-orbit-05` (inside the room, raised to 3.3 m)`evening-orbit-02`
`printshop-orbit-06` (orbit-01 angle; label posts as blocks)`evening-orbit-03`
never published: `eve-e01-seating-orbit-04-0001-0240.mp4` (orbit-01 angle, labels fixed)`evening-orbit-04`

Each has a `-f001.png` still beside it. Mabel's four transition takes from Higgsfield (Seedance 2.5, 720p, rolled 14 Sep and never downloaded until now) are `refs/takes/E-01-01`…`04`. They are numbered in the order they were rolled: jobs `095f61ff`, `c1a7b803`, `2aa8bbdc`, `c1cb6790`. The `shop-night` set stills were not moved, because Mabel did not include them.

**Shared material shows on both galleries (14 Sep 2026, Mabel: "whatever the evening needs, including the night shop stills and the character sheets, should show on the evening gallery as well as the morning one, not move off it").** In `tools/build.py`, `scenes_of()` lists a file on each page it belongs to. Everything in `refs/char/` and `refs/prop/`, and `refs/set/shop-night-*`, appears on both pages. `E-` shots and `evening-` files appear on the evening page only. Everything else appears on Scene 1's page only.

`refs/takes/E-01-01-nosmoke.mp4`, a local edit of `E-01-01` (recorded with `provenance.py derive`, how: recomposited). A thin smoke wisp drifted through the top-left corner (x 20–340, y 0–260) in source frames 0–23. That corner is replaced on frames 0–29 with a median clean plate made from frames 30–36, fitted per channel to each frame's surrounding ring, with grain σ 0.66. Mabel then asked for a hold, so the patched frame 0 is held for 1.5 s before the clip. The file runs 9.54 s, and its audio is delayed 1.5 s to match. `E-01-01` remains the approved take.

**Evening-only material (14 Sep 2026, Mabel: "things i didn't need for the morning scene can come over to the evening scene").** `EVENING_ONLY` in `tools/build.py` lists these on the evening page alone:

No morning row or take uses any of them. The three `*-seated-01` probes were Old Printer ledger tests for M-05 and stay morning material; they are on the hidden list anyway. Character sheets and props stay on both pages.