Compare commits

...

4 Commits

Author SHA1 Message Date
2a4fffbb2a Ready to test print 2026-07-19 13:37:10 -04:00
3f2d25f90e Chose a test print in Proof. Workshopping layering. 2026-07-19 13:35:22 -04:00
6dcb10c68b PRE-REFINEMENTS 2026-07-05 20:00:13 -04:00
4314087557 Fable Review 2026-07-04 09:47:50 -04:00
131 changed files with 7295 additions and 40 deletions

View File

@@ -0,0 +1,154 @@
# Intent vs. execution
The project states its intent unusually well, in four layers:
- **originalprompt.md** (May 19): "One goal is large format print. Vector
graphics are ideal. …seed/hash concept for reproducibility. This is an art
project."
- **DESIGN.md**: one renderer-agnostic scene model, many renderers; "get the β
statistics right and the image reads as authentic."
- **PRINT.md**: a ~2.5 × 4 m wall piece, assembled from registered SVG geometry
+ raster texture layers.
- **roadmap.md**: the feelings — awe, stillness, melancholy, scale-vertigo, the
numinous — and a guiding test: *"does it deepen the sense that we are looking
at a real trace of something unseen — and does it reward standing closer?"*
Below, each declared intent against what the repo actually shows.
---
## 1. "Large-format print" — the founding goal is the least-executed one
The print pipeline is real and good: `tools/render.sh`, a hand-rolled CMYK PDF
writer with OCG layers (`src/render/pdf.js`, 295 lines, genuinely impressive),
Inkscape-convention layered SVG, resolution math in PRINT.md.
The execution record: `output/masters/` holds 7 masters across 5 seeds, **all
dated May 2021** — the first 48 hours. No master exists from any of the eight
creative phases since. No `_9000.png` photographic master is on disk. The tiled
renderer PRINT.md names as the escape hatch for the 4 m dimension
(`tools/render-tiled.mjs` — "ask and I'll build it") was never built. The dev
entry `index.html` still says "Print target: 24″ × 24″", contradicting the
2.5 × 4 m ambition in PRINT.md — neither has been updated because neither has
been tested against a physical object.
Every phase since May 21 stopped at 13001600 px exploration renders. The
roadmap's guiding test — "does it reward standing closer?" — is a question about
a physical print viewed by a body, and it has never once been asked of a
physical print. **The project optimizes a feeling it has not yet measured.**
## 2. "One scene model, many renderers" — the seam holds; the look leaks
DESIGN.md's architectural claim is verifiably true in the strict sense: all 11
files in `src/scene/` are pure data, zero canvas/DOM references. Bubble
positions come from one shared salted stream and land identically in raster,
SVG, and PDF. The discipline held for six weeks of feature growth. That is rare
and worth saying plainly.
But the *look* was never given the same seam. Style decisions live triplicated
as freehand copies inside the three renderers, and they have already drifted:
- Bubble radius: `rr*foot(soft)` in canvas, `b.r*scale*1.15` in SVG,
`b.r*scale` (no 1.15) in PDF — three renderers, three bubble sizes.
- Fiducial arm length: 6u canvas, 9u SVG, 8u PDF.
- ~150200 lines of formulas (under-stroke width, bubble alpha, disk-stroke
alpha, iridescent spectrum mix) exist in verbatim triplicate.
- PDF quietly lags: no vignette, no media layer (grease pencil / réseau / film
furniture), no shock stains, no fingerprints. Fingerprints are canvas-only.
Whole parameters (`boundaryY/R`, `diskPressure`, `emit`, `transparentPaper`)
exist only in the SVG renderer.
`bubbleStops()` in palette.js — one edge profile consumed by both the canvas
sprite gradient and the SVG radial gradient — is the model the rest of the look
logic should have followed. The architecture document describes the seam that
exists; it does not mention the seam that's missing.
## 3. "Determinism is a feature. The seed as a true name" — true at the altar, loose in the pews
The salt discipline (`makeRng(seed, 'subsystem')`) is followed at feature
granularity: changing cosmic count cannot move the shock disk; `eventX/eventY`
overrides still burn their rng draws so downstream is stable. Someone thought
about this carefully.
But within modules the promise breaks: dialing `shockStriations` reshuffles the
rim segments, rings, stains, *and* core cracks; the `artifacts` slider re-rolls
every scratch and dust speck instead of fading them; the density slider —
nominally a render-mode param — reshuffles every bubble position on every
track. And the theology weakens with distance from the original generator:
PRINT.md admits manual slider tweaks are *not* part of the seed fingerprint;
`src/qft/params.js` claims "seed → complete fingerprint" while the camera,
ripples, vortices, and wavepackets have **no seeded path at all** — a bare QFT
seed always yields the default isometric lattice. The true name names less and
less of the plate the further you get from `src/scene/`.
## 4. The confirmed bug that is secretly the thesis
`renderQFTSVG` silently drops ripple grids. The scene builder creates
`id:'ripple'` grids; the renderer emits only `cubic`, `schlegel`, and `e8`
layers (`src/qft/renderer.js:178-181`). Verified at runtime: a scene declaring
ripples renders an SVG with no ripple geometry. This has been true since the
single "Added QFT" commit.
Consequence: sketch08's entire premise ("RIPPLES — concentric expanding
wavefronts"), sketch09's `03_vortex-with-spinning-ripples`,
`15_perturbation-cascade`, `17_spectral-vortex-storm` — **106 hand-authored
variation configs, and every one that invoked ripples shipped a plate whose
label describes a feature absent from the image.** Two subsequent sketch series
were art-directed on top of it. Nobody noticed, because the plates were judged
by eye against feelings, not against their own scene models.
Note what happened here: a project whose subject is *evidence of the invisible*,
which forges archival captions ("PLATE 095 · EXPOSED 1972"), produced a
catalogue of plates whose captions confidently describe invisible content. The
fiction became true by accident. There are two valid responses — fix it, or
recognize it (see [04-ideas.md](04-ideas.md) §3, the neutrino argument) — but
the current state, where the archive lies and the author doesn't know, is the
only wrong one.
## 5. "The series is an argument" — the argument exists; it's the repo itself
Roadmap principle 5 wants Becher-typology grids, a fabricated catalogue, an
archive. Phase 4 is marked "in progress" and the media layer (grease pencil,
sprockets, réseau) shipped beautifully — the BEBC-1973 output plate genuinely
reads as a worn archival photograph; I looked.
Meanwhile, without noticing, the project *built an actual archive*: 19 output
directories, 675 tracked files, ten gallery `index.html`s, sketch series 0109,
templates 14, a wall-mock (`tools/archive-wall.html`) frozen at the May 29
curation. It has the true properties of real archives: numbered series with
missing entries (perspective1/2 scripts deleted, their outputs orphaned),
instruments that no longer match their plates (`compositions/hero.mjs` uses
radial-grid keys the code no longer reads), mislabeled holdings (§4), and an
expedition that never reported back (the `milkweed-wind-field` branch). The
fabricated-archive artwork the roadmap plans is a *simulation* of what the repo
has *actually become*. That inversion is the most interesting unexploited
material in the project.
## 6. Physics honesty — the one place intent and execution fully agree
The code is candid about its fakery in a way most generative-art code isn't:
δ-rays are analytic log spirals because integrating to sub-percent radii "is
unreliable" (the header says so); the shock disk announces "Not physics — a
chamber/window pressure artifact"; every particle in this universe has mass 1;
V-decays conserve neither momentum nor anything else. The load-bearing claim —
get the 1/β² bubble statistics right and the eye accepts everything — is
correct, and the outputs prove it. One comment lies (`delta.js:53` claims the
angular step gets finer toward the center; the formula coarsens it), which is
the kind of thing that only matters because the rest of the codebase has earned
the habit of being believed.
## 7. The drift nobody wrote down
The documents describe a project: *one generator, deepened along a staged plan.*
The git history records a different project: *a widening fleet of instruments*
bubble chamber → QFT lattices → carpet/perspective primitives → composition
schema → art-historical templates → element liberation → watercolor → milkweed —
where each phase spawns a fork-and-mutate tool family and a fresh output
directory, and commits are creative sessions ("vast ocean", "Element
Liberation"), not code changes. Neither mode is wrong. But the roadmap still
narrates mode one while the hands do mode two, which is why Phase 3 (the
translucent stacked print — the *stated* strongest fusion) has had no work at
all while two unplanned renderers and two unplanned subject-matters shipped.
The truest sentence in the repo is in the memory index, not the roadmap:
"typology MATRIX of standalone singles." The roadmap should be made to say what
the project has decided by doing.

92
fable/02-current-state.md Normal file
View File

@@ -0,0 +1,92 @@
# Current state — factual snapshot (2026-07-04)
## Codebase
| Area | Size | State |
|---|---|---|
| Core (`src/rng` + `scene/` + `render/` + `ui/` + `main` + build) | ~3,220 lines | Committed, disciplined, small |
| QFT (`src/qft/`) | 9 files, ~1,250 lines | Committed (one commit, May 29) |
| Compose (`src/compose/`) | 4 files, ~680 lines | Committed |
| Watercolor (`src/render/watercolor.js`) | 427 lines | **Uncommitted** (Jun 2425) |
| Milkweed-botanical (`src/milkweed/umbel.js`) | 169 lines | **Uncommitted** (Jun 25) |
| Milkweed-windfield (`src/field/wind.js`, `src/scene/umbel.js`, `src/scene/drift.js`, GROUP_BUILDERS registry) | ~225 lines + compose rework | **Committed on unmerged branch** `milkweed-wind-field` (63066ee, Jun 17, also pushed) |
| Tools | 37 files, ~4,750 lines | Committed except 3 newest |
Git: 12 commits on `main`, May 20 → Jun 10. Last commit **24 days ago**. The
uncommitted watercolor + milkweed work is a 2-day session (Jun 2425) followed
by 9 days of silence. An entire fourth renderer exists only in the working tree.
## The two milkweeds (important — memory/docs conflate them)
1. **Branch** `milkweed-wind-field`: the "hidden realities" system — one
divergence-free wind field (closed-form time integral, elegantly done), three
detectors (dunes/water/seeds), umbel-as-vertex, drift-as-advection, plus the
GROUP_BUILDERS registry refactor of the composition engine. Committed Jun 17,
never merged.
2. **Working tree on main** (`src/milkweed/umbel.js`): a *different* milkweed —
a botanical Asclepias still-life scene built for the watercolor renderer.
Does not import the wind field.
Both export `generateUmbel` with **incompatible signatures**. Merging the branch
as-is collides. This is an unmade decision materialized as two files.
## Renderers
4 renderers for bubble-chamber scenes (photo raster / SVG / PDF / watercolor);
QFT has only its own SVG renderer — no photographic or watercolor QFT exists.
Feature parity: PDF lags (no media layer, vignette, stains, fingerprints); SVG
has private params (`boundary*`, `diskPressure`, `emit`, `transparentPaper`);
~150200 lines of look logic triplicated and drifting (three bubble sizes).
Watercolor integrates through the proper seam (same signature, shared
`sampleBubbles`/`depthFactors`, palette registry extended not bypassed), with
known rough edges: dead `preview` flag, scratch-canvas cache keyed by width
only, heavy per-pigment blur cost at print resolution, no UI entry point yet —
reachable only via `tools/preview.html?renderer=watercolor`.
## Parameter surface
≈68 total: 53 in the UI (43 sliders / 2 selects / 8 toggles) + ~15 hidden or
SVG-only. Flat namespace is starting to encode per-palette sub-schemas by label
convention ("(magentarise)" ×3). Every new param is a 34 place edit.
## Tools & outputs
- 8 durable pipeline tools; ~25 one-off sketch scripts (fork-and-mutate: the
same `merge()` helper verbatim in 5 files, `F()` color helper redefined in 12
of 17 QFT tools, the contact-sheet HTML inlined 17 times). Zero shared
tool-level utility module.
- `output/`: 2.4 GB, 19 directories, 675 tracked files. Chronology: inspiration
→ masters (May 2021) → 5 iteration series → QFT sketches 0109 → qft-bc →
layering (642 MB, the largest) → liberation → templates 14 → watercolor +
milkweed (untracked).
- `output/masters/`: 7 masters, 5 seeds, all from May 2021. Nothing since.
## Stale / dead weight
- `bubble_chamber.html` — the headline "portable single file" deliverable —
built May 31, now 3.5 weeks behind `src/` (missing the milkweed palette, the
Jun 17 svgVector changes, watercolor). Nothing detects staleness; the built
file stamps *that* it was built, not from what.
- `bubble_chamber.v2.html` — superseded snapshot, dead.
- `tools/archive-wall.html` — hardcodes the May 29 curation; predates
templates/liberation/watercolor.
- `compositions/hero.mjs` — the only file in `compositions/`; uses radial-grid
keys (`vp`, `rays`, `depthLines`) that `gridSheets` now silently ignores.
- `tools/inkwash-export.mjs` — self-declared superseded by the native
watercolor renderer ("kept as a record").
- `composer.html` — works, but one phase behind (untouched during watercolor).
- `package.json` — 3 npm scripts, all from May 20; none of the ~25 later tools
registered.
- `tools/render-qft-svg.mjs` references a `render-milkweed-svg.mjs` that
doesn't exist.
## Known bugs
1. **Ripple grids silently dropped** by `renderQFTSVG` (`src/qft/renderer.js:178-181`)
— every "ripple" variation across sketches 0809 shipped without its subject.
2. `drawDamage`/`drawInstrument` last param named `inv` but called with `light`
(`src/render/canvasPhoto.js:110,208`) — works today, trap for the next edit.
3. `perspectiveGridSVG` creates an rng it never uses — the compose layer's
'pA'/'pB' salts do nothing for radial grids.
4. Dead pre-palette-era fields in `canvasPhoto.js` `palette()`; `delta.js:53`
comment inverts what the formula does; `watercolor.js:374` `0.05 * 8`.

113
fable/03-feedback.md Normal file
View File

@@ -0,0 +1,113 @@
# Feedback
Ordered by how much I think each item matters. Praise is included only where
it's load-bearing for a recommendation.
## 1. You are avoiding the print, and the repo shows it
Eight creative phases in six weeks, and the master pipeline — the thing the
project exists for — was last fed on day two. This has the signature of a
familiar creative pattern: exploring is reversible and always rewarding;
printing is a commitment that risks discovering the piece doesn't work at
scale. So the exploration space keeps widening (new generator, new renderer,
new subject) because widening is the move that never has to survive contact
with a wall.
The honest counter-argument is that the vocabulary wasn't ready. It's ready.
The BEBC plates read as archival photographs; the watercolor stillwater study
holds up; PRINT.md already contains the assembly recipe. Every week of further
exploration is now producing information about the *screen* version of a *wall*
piece. One A1/A2 test print of one strong seed would generate more course
correction than any three future sketch series — it will tell you whether the
grain scales, whether the δ-ray curls reward approach, whether "standing
closer" works, and it will almost certainly reorder the roadmap.
## 2. Decisions are being deferred into the working tree
Three currently open:
- The wind-field milkweed (branch, Jun 17) vs. the botanical milkweed (working
tree, Jun 25) — two incompatible `generateUmbel`s. Which milkweed is *the*
milkweed, or are they two subjects (a field study and a specimen plate)?
Either answer is fine; not answering is what costs.
- The watercolor renderer: 427 good lines, uncommitted for 10 days. Ten more
days of this and merging the branch becomes an archaeology project.
- The GROUP_BUILDERS registry on the branch is a strictly better composition
engine than what's on main, independent of milkweed. It could be
cherry-picked today.
A useful rule given how you work (commits = sessions): **end every session with
a commit, even a WIP one.** Your commits are already narrative; let them be
frequent-narrative.
## 3. Nothing verifies that a plate contains what its scene model says
The ripple bug survived three sketch series because the only QA is your eye,
and your eye judges *feeling*, not *inventory*. Determinism is the project's
religion, but determinism without ground truth just means you reproducibly get
the wrong image. Cheap fixes that fit the project's culture:
- A layer-census check: render a scene, assert every `id` in the scene model
produced a nonempty layer/group in the output. ~30 lines, would have caught
the ripple drop on day one.
- Golden-seed snapshots: 34 canonical seeds rendered per renderer, diffed on
commit (you already have headless Chrome plumbing in `shoot.sh`).
- Stamp the build: embed the source git hash + date in `bubble_chamber.html`
so staleness is visible instead of silent.
## 4. The look needs its own seam
The scene/renderer split is genuinely well-kept — which makes it strange that
the *style* never got the same treatment. Three renderers currently disagree
about bubble size, and each new visual feature is hand-ported (or, for PDF,
quietly not). `bubbleStops()` already demonstrates the fix: one shared module
of style formulas (stroke widths, alphas, radii, spectrum mixes) consumed by
all renderers. This is a half-day of consolidation that removes the largest
source of drift in the codebase. Do it before renderer #5, because there will
be a renderer #5.
## 5. Sketch tools: keep the data, share the harness
The 17 QFT scripts are a legitimate serial sketchbook — the variation configs
*are* the artwork's process record, and hardcoded OUT dirs are honest about
their one-shot nature. But the 12-line render loop, `F()`, `paper()`, and the
gallery HTML are copy-pasted across all of them, with signature drift. One
40-line `renderSketch(outDir, baseSeed, variations)` harness turns every future
sketch into a pure data file. Same for the deep-`merge()` in 5 compose tools.
Don't retrofit the old ones; they're finished documents. Change the template
for the next one.
## 6. Small structural debts worth an hour each
- `carpet.js`/`perspgrid.js` are compose-system primitives parked in
`src/qft/` — they share nothing with the QFT pipeline.
- `src/compose/composition.js` imports parameter defaults from
`src/ui/controls.js` — the headless engine depends on the UI layer. Move
defaults down; let the UI consume them.
- The `MILK` pigment table just colonized core `palette.js` from the milkweed
satellite. One entry is fine; it's the precedent to watch — palettes should
be injectable from the satellite that owns them.
- Delete or archive: `bubble_chamber.v2.html`, `tools/inkwash-export.mjs` (it
says goodbye in its own header), `tools/find-semicircle.mjs`. Fix or delete
`compositions/hero.mjs` (currently half-ignored by the code) and
`tools/archive-wall.html` (frozen curation), or explicitly rename them as
dated snapshots.
- `params.js` QFT: either seed the camera/perturbation params or drop the
"seed → complete fingerprint" claim from the header. The claim is currently
the documentation equivalent of the ripple bug.
## 7. What's working — keep doing these on purpose
- **Literate headers.** Nearly every file explains *why the fake was chosen
over the real*. This is the best code-as-notebook practice I've seen in a
personal art repo, and it's why the intent/execution comparison in this
review was even possible.
- **The β thesis.** "Get the statistics right and the eye believes" was the
founding bet and it paid; the outputs are convincing at thumbnail and at
1500 px. Protect that thesis as you add renderers — watercolor already
correctly routes 1/β² into stroke weight.
- **Deterministic fiction.** Plate numbers and exposure dates derived from the
seed hash — the forgery itself is reproducible. This idea is bigger than its
current use (see ideas §2).
- **Commits as sessions** produce a legible creative history. The fix from §2
isn't to change the style, just the frequency.

119
fable/04-ideas.md Normal file
View File

@@ -0,0 +1,119 @@
# Ideas to explore
Ordered roughly by information-per-effort. §1 is the forcing function; the rest
are perpendicular moves the roadmap doesn't already contain (I've skipped
things roadmap.md lists — stereo pairs, sonification, animation — except where
there's a twist).
## 1. The calibration print — and make the calibration itself the artwork
Not "eventually print the piece": print a *test instrument*. One strong seed
(LAMBDA-2648 already has three disk-variant masters) rendered as an A1 sheet
that deliberately contains its own diagnostics — a strip of the plate at 1:1
wall scale, a δ-ray magnified 10×, grain swatches at three DPIs, the archival
header, a ruler. Real labs print calibration targets; yours would be a
fictional lab's calibration target, which means it's simultaneously the
cheapest possible print test *and* a legitimate piece in the archive fiction.
You cannot art-direct "does it reward standing closer" from a screen, and this
turns the scary commitment into a small in-universe document.
## 2. Generate the catalogue raisonné from the repo itself
The project plans a *fabricated* archive (Phase 4) while sitting on a *real*
one: 675 outputs, 19 directories, sketch series with gaps, orphaned plates
whose generating instruments were deleted, a wall-mock frozen at an old
curation. Perpendicular move: a tool that walks `output/` + `git log` and
typesets the actual history as an archival catalogue — every plate with its
seed, commit hash as accession number, session name ("vast ocean") as
expedition title, *including* the losses ("plates 0714: instrument lost,
holdings retained"). The deterministic-fiction machinery (seed → plate number →
exposure date) already exists; point it at the truth. This is the Becher-grid
"series is an argument" piece, except the argument is real, and it costs a
script rather than a new subsystem.
## 3. The neutrino plate — the bug is pointing at something
Before fixing the ripple bug, notice what it made: plates whose captions
describe content that isn't visible. That is *literally the most famous bubble
chamber result*. Gargamelle's 1973 neutral-current discovery — the actual lab
your plates cite — was an image where the evidence was an *absence*: a neutrino
enters, nothing appears, an electron suddenly moves. A deliberate series of
"invisible content" plates — captions and grease-pencil annotations
confidently marking events the plate doesn't show, a measured arrow pointing
at blank emulsion, `EVENT: ν̄ CANDIDATE` over undisturbed paper — is the
purest possible execution of the roadmap's founding line: *evidence of the
invisible*. The most devotional plate in the archive should be the one where
faith is required. (Then fix the renderer, and let the ripples exist on
purpose.)
## 4. Fill the matrix — subjects × mediums is the actual typology
Your own memory note already names the thesis: "typology MATRIX of standalone
singles." Make the matrix literal. You have subjects {bubble chamber, QFT
lattice, milkweed/wind} and mediums {photographic, clean vector, CMYK plate,
watercolor} — and only ~half the cells exist. No photographic QFT (a *lattice*
shot on worn film, with grain and grease pencil, would be extraordinary and is
mostly plumbing — QFT only ever got an SVG renderer). No watercolor QFT. No
photographic milkweed (a botanical subject shot as if it were a physics event —
herbarium-as-detector). The empty cells are cheaper than any new subject
because both axes already exist; and a wall hung *as the matrix* — same seed
down each column — is the standalone-singles argument stated in one object.
## 5. One hidden field, many instruments — say the quiet thesis out loud
The wind-field branch stumbled onto the project's real unifying idea: **one
invisible cause, several detectors that each transduce it differently** (dunes
remember, water reports instantaneously, seeds integrate along their path).
Notice the bubble chamber is already this — the B-field and beam are the
hidden cause; chamber, film, and scanner are the detector chain. The QFT plates
are this — the vacuum as field, lattices as instruments. Reframed, the project
isn't "a bubble chamber generator plus spinoffs"; it's *portraits of invisible
fields, each painted by the instruments that can feel them*. Concretely: merge
the branch's field/detector separation into the architecture (`src/field/` as
a first-class layer any subject can sample), and let one seed drive the same
hidden field through a chamber plate, a dune plate, and a water plate — a
triptych where the viewer slowly realizes all three images are the *same
event*. That's the scale-vertigo feeling the roadmap chases, produced
structurally instead of stylistically.
## 6. The failure plates
Real bubble chamber archives are mostly failures: empty triggers, double
exposures, boiling chamber, light leaks, frames where the beam didn't arrive.
Your generator only makes successes. A `misfire` archetype — blank plates with
full film furniture, an over-exposed white-out with one surviving corner, a
splice through the event — does three things: deepens the archive fiction
(archives without failures read as fake), gives the typology grids their
necessary rest-notes (24 perfect plates read as wallpaper; 21 + 3 failures read
as history), and it's nearly free — the media/damage layers already exist and
just need permission to win.
## 7. Verification as darkroom craft, not engineering chore
Framing matters in a solo art repo: don't build "CI", build *the darkroom
contact sheet*. One command that renders the golden seeds through all four
renderers onto a single dated sheet, with the layer census (§feedback 3)
printed in the margin like exposure notes. Run it when you commit. It catches
the next ripple bug, documents renderer drift as a visible artifact, and the
sheets themselves accumulate into a record of the project's eye changing over
time — which, given idea §2, eventually becomes material.
## 8. The seed as edition certificate
"The seed as a true name" is currently a private convenience. Push it to the
viewer-facing surface: the frame label carries the seed, the git hash of the
renderer, and the sentence "this image can be re-derived, at any size,
forever." An edition where what's sold/kept is effectively *the name plus the
instrument version* is both honest about how the work is made and — because
PRINT.md's fingerprint claim currently has holes (manual tweaks, unseeded QFT
params) — it forces the discipline to become real: if the seed is the
certificate, everything must actually live in the seed. Theology becomes
engineering requirement.
---
**One anti-idea, for balance:** no fifth subject and no fifth renderer until
something hangs on a wall. The pattern analysis in 01/03 says the next new
instrument is the most likely next move and the least informative one
available. The wind field (§5) is exempt because it consolidates instruments;
everything else can wait a print.

55
fable/Proof1/README.md Normal file
View File

@@ -0,0 +1,55 @@
# Proof1 — the lit chamber
*First physical translation: screen → acrylic → light. Based on
`REFINED_Backlit7/merge-45 → merge-55`.*
## What this is
A bubble chamber photographed the invisible: a particle passed, boiled a
line of bubbles into being, and was gone — leaving a trail as its only
confession. This project makes new such confessions by hand-parameter, then
stages one as a world. *One Sun Setting*: a single event erupting at the
waterline of a quiet sea, beneath a sun already fading into memory. Silence
and violence in one frame.
## Inspiration
CERN plate film on a light table. Hokusai's small figures under enormous
weather. Twombly's one honest gesture on a still ground. The idea that
*evidence of the invisible rhymes across scales* — the spiral of a δ-ray and
the spiral of a milkweed seed are the same handwriting.
## Boundaries
The archive costume came off, layer by layer, until only the gesture
remained. No scanner's hand. No labels — a legible glyph commands *read me*;
this piece asks only *look*. The palette holds: β-law magenta, hot at birth,
violet only as a last word. The sea stays calm so the event can be loud —
loudness lives in a small mark against vastness, never in clutter. The sun
recedes; it is what the light *was*, not a character. Composition obeys φ:
the golden rectangle, the horizon on the golden division, sun and event vertex
on opposing golden nodes.
## Craft
The seed is the whole fingerprint — an image and its four-metre master are one
truth at two sizes. Bubbles are hollow: pale core, refracting rim, delicate as
mist at nose distance. Where they crowd, they *merge* — one flat union at an
even density, so a dense knot never becomes mud, and, lit, never punches a dark
hole in the glow. Even ink = even light. That is the whole discipline of the
backlit grammar: **depth is transparency.** The deepest plane carries the least
ink and the most light.
## Goals
Take the locked frame apart into planes and give it air. Sun to the back, pure
transmitted colour, a light source rather than a picture. Sea in the middle,
a woven field. The event to the front, erupting toward the viewer. Air gaps
turn faked blur into real parallax; the LED panel behind frosted acrylic turns
faded ink into a sun that actually shines. Prove one hero, then let the typology
grow around it — a wall of catalogued dawns over one vacuum sea.
## Feels
Arrival and dispersal at once. A single instant, embalmed, outliving the
conditions that made it. Awe, not spectacle. The held breath before the wave.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.1 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.1 MiB

View File

@@ -0,0 +1,83 @@
{
"piece": "Proof1 — the lit chamber",
"source": "REFINED_Backlit7 merge (mirror event, uniform-lace)",
"seed": "MESON-5113#03",
"bubbleOpacity": 0.5,
"art": {
"w": 1001,
"h": 1620,
"ratio": "phi (golden portrait)"
},
"sheet": {
"w_mm": 330,
"h_mm": 420,
"note": "A3 — golden art square floated, clear margins = lit void"
},
"gaps_mm": "plane z is nominal; two scales: ~3mm within a sheet, ~9mm between",
"planes": [
{
"id": "sun",
"file": "plane-1-sun.svg",
"z": 0,
"blur": 1.4,
"dim": 0.95,
"white": "none",
"glow": 1
},
{
"id": "sea-far",
"file": "plane-2-sea-far.svg",
"z": 9,
"blur": 0.9,
"dim": 1,
"white": "none",
"glow": 0.7
},
{
"id": "sea-mid",
"file": "plane-3-sea-mid.svg",
"z": 15,
"blur": 0.5,
"dim": 1,
"white": "trace",
"glow": 0.7
},
{
"id": "sea-near",
"file": "plane-4-sea-near.svg",
"z": 18,
"blur": 0.2,
"dim": 1,
"white": "trace",
"glow": 0.7
},
{
"id": "event-halo",
"file": "plane-5-event-halo.svg",
"z": 27,
"blur": 2.4,
"dim": 0.85,
"white": "none",
"glow": 0.9
},
{
"id": "event-core",
"file": "plane-6-event-core.svg",
"z": 30,
"blur": 0,
"dim": 1,
"white": "under",
"glow": 0.5
},
{
"id": "front-glass",
"file": "plane-7-front-glass.svg",
"z": 30,
"blur": 0,
"dim": 1,
"white": "none",
"glow": 0,
"blend": "multiply"
}
]
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 206 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 396 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 396 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 396 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 4.5 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 4.5 MiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1001" height="1620" viewBox="0 0 1001 1620"><image x="0" y="0" width="1001" height="1620" href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAxIiBoZWlnaHQ9IjE2MjAiIHZpZXdCb3g9IjAgMCAxMDAxIDE2MjAiPgo8ZGVmcz4KIDxmaWx0ZXIgaWQ9ImR1c3QiIHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiPjxmZVR1cmJ1bGVuY2UgdHlwZT0idHVyYnVsZW5jZSIgYmFzZUZyZXF1ZW5jeT0iMC41IiBudW1PY3RhdmVzPSIyIiBzZWVkPSIxMyIgc3RpdGNoVGlsZXM9InN0aXRjaCIgcmVzdWx0PSJuIi8+PGZlQ29sb3JNYXRyaXggaW49Im4iIHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwIDAgMCAwIDAuMjM1IDAgMCAwIDAgMC4xODggMCAwIDAgMCAwLjEzMyAwIDAgMCAwLjMwMCAtMC4xOCIvPjwvZmlsdGVyPgogPGZpbHRlciBpZD0iZm94IiB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj48ZmVUdXJidWxlbmNlIHR5cGU9ImZyYWN0YWxOb2lzZSIgYmFzZUZyZXF1ZW5jeT0iMC4wMDQiIG51bU9jdGF2ZXM9IjMiIHNlZWQ9IjE3IiBzdGl0Y2hUaWxlcz0ic3RpdGNoIiByZXN1bHQ9Im4iLz48ZmVDb2xvck1hdHJpeCBpbj0ibiIgdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAgMCAwIDAgMC40MiAwIDAgMCAwIDAuMzAgMCAwIDAgMCAwLjE2IDAgMCAwIDAuMTk4IC0wLjEyIi8+PC9maWx0ZXI+CjwvZGVmcz4KPHJlY3Qgd2lkdGg9IjEwMDEiIGhlaWdodD0iMTYyMCIgZmlsdGVyPSJ1cmwoI2ZveCkiLz4KPHJlY3Qgd2lkdGg9IjEwMDEiIGhlaWdodD0iMTYyMCIgZmlsdGVyPSJ1cmwoI2R1c3QpIi8+CjxsaW5lIHgxPSI0MTEiIHkxPSIzNDQiIHgyPSI0MzAiIHkyPSIxMjQ3IiBzdHJva2U9InJnYig2MCw0OCwzNCkiIHN0cm9rZS1vcGFjaXR5PSIwLjA5MCIgc3Ryb2tlLXdpZHRoPSIwLjc5Ii8+PGxpbmUgeDE9IjcwMiIgeTE9IjY4IiB4Mj0iNjg3IiB5Mj0iMTQzNyIgc3Ryb2tlPSJyZ2IoNjAsNDgsMzQpIiBzdHJva2Utb3BhY2l0eT0iMC4wNTEiIHN0cm9rZS13aWR0aD0iMC43NyIvPjxsaW5lIHgxPSI0MjIiIHkxPSI1MTQiIHgyPSI0MzciIHkyPSIxNzU3IiBzdHJva2U9InJnYig2MCw0OCwzNCkiIHN0cm9rZS1vcGFjaXR5PSIwLjE2NSIgc3Ryb2tlLXdpZHRoPSIxLjAzIi8+PGxpbmUgeDE9IjEwIiB5MT0iNTIzIiB4Mj0iMTkiIHkyPSIxODY5IiBzdHJva2U9InJnYig2MCw0OCwzNCkiIHN0cm9rZS1vcGFjaXR5PSIwLjE1MCIgc3Ryb2tlLXdpZHRoPSIwLjUzIi8+PGxpbmUgeDE9IjQzNCIgeTE9IjI4NSIgeDI9IjQyMSIgeTI9IjE0NDIiIHN0cm9rZT0icmdiKDYwLDQ4LDM0KSIgc3Ryb2tlLW9wYWNpdHk9IjAuMTU3IiBzdHJva2Utd2lkdGg9IjAuNzAiLz48bGluZSB4MT0iMTExIiB5MT0iMTgwIiB4Mj0iOTUiIHkyPSIxNTk0IiBzdHJva2U9InJnYig2MCw0OCwzNCkiIHN0cm9rZS1vcGFjaXR5PSIwLjA4NiIgc3Ryb2tlLXdpZHRoPSIwLjkxIi8+PGxpbmUgeDE9IjE0MCIgeTE9IjE2NCIgeDI9IjE1OCIgeTI9Ijc1OCIgc3Ryb2tlPSJyZ2IoNjAsNDgsMzQpIiBzdHJva2Utb3BhY2l0eT0iMC4xMDUiIHN0cm9rZS13aWR0aD0iMS4wNCIvPjxsaW5lIHgxPSIxOTIiIHkxPSIzNjMiIHgyPSIyMDciIHkyPSIxNDg5IiBzdHJva2U9InJnYig2MCw0OCwzNCkiIHN0cm9rZS1vcGFjaXR5PSIwLjA3NSIgc3Ryb2tlLXdpZHRoPSIxLjAzIi8+PC9zdmc+"/><g opacity="0.85"><image x="0" y="0" width="1001" height="1620" href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAxIiBoZWlnaHQ9IjE2MjAiIHZpZXdCb3g9IjAgMCAxMDAxIDE2MjAiPgo8ZGVmcz48ZmlsdGVyIGlkPSJnIiB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIj4KPGZlVHVyYnVsZW5jZSB0eXBlPSJmcmFjdGFsTm9pc2UiIGJhc2VGcmVxdWVuY3k9IjAuOSIgbnVtT2N0YXZlcz0iMiIgc2VlZD0iMTkiIHN0aXRjaFRpbGVzPSJzdGl0Y2giIHJlc3VsdD0ibiIvPgo8ZmVDb2xvck1hdHJpeCBpbj0ibiIgdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAgMCAwIDAgMC4xNDkgMCAwIDAgMCAwLjEyNSAwIDAgMCAwIDAuMTAyIDAgMCAwIDAuNTIgMCIvPgo8L2ZpbHRlcj48L2RlZnM+PHJlY3Qgd2lkdGg9IjEwMDEiIGhlaWdodD0iMTYyMCIgZmlsdGVyPSJ1cmwoI2cpIi8+PC9zdmc+"/></g></svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 MiB

View File

@@ -0,0 +1,81 @@
<!DOCTYPE html><html><head><meta charset="utf-8">
<title>Proof1 · lit chamber — backlit parallax</title>
<style>
:root{--gap:6;--bright:1;}
html,body{margin:0;height:100%;background:#0a0a0b;overflow:hidden;
font:12px/1.5 ui-monospace,monospace;color:#9aa;}
#wrap{position:fixed;inset:0;display:grid;place-items:center;}
.scene{perspective:2200px;perspective-origin:50% 45%;}
.stack{position:relative;transform-style:preserve-3d;transition:transform .06s linear;
width:500.5px;height:810px;}
.panel{position:absolute;inset:-14%;transform:translateZ(-120px);
background:radial-gradient(120% 90% at 50% 42%,#fff6ec, #ffe7c8 42%, #f0c48c 78%, #caa06a 100%);
filter:blur(2px);}
.plane{position:absolute;inset:0;width:100%;height:100%;background-size:cover;
background-repeat:no-repeat;will-change:transform,filter;}
#hud{position:fixed;left:14px;top:12px;z-index:9;background:#141416cc;padding:12px 14px;
border-left:3px solid #d9b48a;max-width:300px;}
#hud h1{font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:#d9b48a;font-weight:400;margin:0 0 8px;}
#hud label{display:block;margin:7px 0 2px;color:#aab;}
#hud input[type=range]{width:100%;}
#legend{position:fixed;right:14px;top:12px;z-index:9;background:#141416cc;padding:10px 12px;color:#889;}
#legend b{color:#d9b48a;font-weight:400;}
.pill{display:inline-block;margin:2px 4px 2px 0;padding:1px 6px;border:1px solid #333;border-radius:9px;cursor:pointer;color:#aab;}
.pill.off{opacity:.35;text-decoration:line-through;}
</style></head><body>
<div id="hud">
<h1>Proof1 · lit chamber</h1>
<div>move mouse = parallax · drag sliders</div>
<label>air gap ×<span id="gv"></span></label>
<input id="gap" type="range" min="1" max="18" step="0.5" value="6">
<label>backlight<span id="bv"></span></label>
<input id="bright" type="range" min="0.3" max="1.8" step="0.05" value="1">
<div id="pills"></div>
</div>
<div id="legend"></div>
<div id="wrap"><div class="scene"><div class="stack" id="stack">
<div class="panel" id="panel"></div>
</div></div></div>
<script>
const PLANES=[{"id":"sun","file":"plane-1-sun.svg","z":0,"blur":1.4,"dim":0.95,"white":"none","glow":1},{"id":"sea-far","file":"plane-2-sea-far.svg","z":9,"blur":0.9,"dim":1,"white":"none","glow":0.7},{"id":"sea-mid","file":"plane-3-sea-mid.svg","z":15,"blur":0.5,"dim":1,"white":"trace","glow":0.7},{"id":"sea-near","file":"plane-4-sea-near.svg","z":18,"blur":0.2,"dim":1,"white":"trace","glow":0.7},{"id":"event-halo","file":"plane-5-event-halo.svg","z":27,"blur":2.4,"dim":0.85,"white":"none","glow":0.9},{"id":"event-core","file":"plane-6-event-core.svg","z":30,"blur":0,"dim":1,"white":"under","glow":0.5},{"id":"front-glass","file":"plane-7-front-glass.svg","z":30,"blur":0,"dim":1,"white":"none","glow":0,"blend":"multiply"}];
const stack=document.getElementById('stack');
const legend=document.getElementById('legend');
const pills=document.getElementById('pills');
const maxZ=Math.max(...PLANES.map(p=>p.z));
const els={};
legend.innerHTML='<b>planes</b> (front → back)<br>'+[...PLANES].reverse().map(p=>p.id+' · '+p.z+'mm').join('<br>');
PLANES.forEach(p=>{
const d=document.createElement('div');
d.className='plane'; d.style.backgroundImage='url('+p.file+')';
d.dataset.id=p.id; stack.appendChild(d); els[p.id]=d;
const pill=document.createElement('span'); pill.className='pill'; pill.textContent=p.id;
pill.onclick=()=>{d.dataset.off=d.dataset.off?'':'1'; pill.classList.toggle('off'); layout();};
pills.appendChild(pill);
});
let gap=6, bright=1, mx=0, my=0;
function layout(){
for(const p of PLANES){
const e=els[p.id];
const z=(p.z-maxZ)*gap; // front plane at 0, others recede
const blur=(p.blur||0)*(gap/6);
const off=e.dataset.off?' opacity:0;':'';
e.style.transform='translateZ('+z+'px)';
e.style.filter='blur('+blur.toFixed(2)+'px)';
e.style.opacity=e.dataset.off?0:(p.dim??1);
e.style.mixBlendMode=p.blend||'normal';
}
document.getElementById('panel').style.filter='blur(2px) brightness('+bright+')';
}
function parallax(){
stack.style.transform='rotateX('+(my*7)+'deg) rotateY('+(mx*9)+'deg)';
}
addEventListener('mousemove',e=>{
mx=(e.clientX/innerWidth-0.5)*2; my=-(e.clientY/innerHeight-0.5)*2; parallax();
});
const gapI=document.getElementById('gap'), brI=document.getElementById('bright');
gapI.oninput=()=>{gap=+gapI.value; document.getElementById('gv').textContent=' '+gap; layout();};
brI.oninput=()=>{bright=+brI.value; document.getElementById('bv').textContent=' '+bright.toFixed(2); layout();};
document.getElementById('gv').textContent=' '+gap;
document.getElementById('bv').textContent=' '+bright.toFixed(2);
layout(); parallax();
</script></body></html>

30
fable/README.md Normal file
View File

@@ -0,0 +1,30 @@
# fable/ — an outside reading of the bubble chamber project
Written 2026-07-04 by Claude (Fable 5), after a full review: every doc, the core
`src/` tree, the QFT and compose subsystems, the milkweed/watercolor working set,
all 37 tools, the 2.4 GB output archive, the git history on `main`, and the
unmerged `milkweed-wind-field` branch. Outputs were viewed, not just listed.
Four documents:
1. **[01-intent-vs-execution.md](01-intent-vs-execution.md)** — what the project
says it is vs. what the repo shows it does. The interesting gaps, including
one confirmed rendering bug that is also, accidentally, the most on-theme
thing in the archive.
2. **[02-current-state.md](02-current-state.md)** — a factual snapshot: what
exists, what's committed, what's stale, what's stranded on a branch.
3. **[03-feedback.md](03-feedback.md)** — critique. The habits that are working,
the ones that are quietly costing you, and the decisions currently deferred
into the working tree.
4. **[04-ideas.md](04-ideas.md)** — directions to explore, weighted toward the
perpendicular ones the roadmap doesn't already contain.
The one-paragraph version: **the images earn their ambition; the stated purpose
of the project is the only part of it that has never been exercised.** This is a
large-format print project with no evidence of a print — the master pipeline was
built in the first 48 hours and never fed again, while eight subsequent creative
phases produced 2.2 GB of screen-resolution sketches. The instinct that keeps
generating new instruments (QFT, compositions, milkweed, watercolor) is the
project's engine and its avoidance mechanism at the same time. The single
highest-information act available right now costs less than any feature on the
roadmap: pick one seed and send it to a printer.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.5 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.7 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.9 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.0 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.2 MiB

View File

@@ -0,0 +1,13 @@
<!DOCTYPE html><html><head><meta charset="utf-8"><title>REFINED_Backlit · one sun setting</title>
<style>body{margin:0;background:#0b0b0b;color:#bbb;font:12px/1.5 ui-monospace,monospace;padding:26px}
h1{font-weight:400;letter-spacing:.22em;text-transform:uppercase;font-size:13px;color:#d9b48a}
.row{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-top:16px}
figure{margin:0;background:#fff;overflow:hidden}img{width:100%;display:block}
figcaption{padding:6px 8px;color:#e8e4d8;background:#111;font-size:11px}
.grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;margin-top:22px}
.notes{color:#999;background:#161210;padding:12px 16px;border-left:3px solid #d9b48a;margin:14px 0;max-width:960px}</style></head><body>
<h1>One sun setting — plate Nº 217, five exposures</h1>
<div class="notes">The trigger event is identical in every frame — a single millisecond, embalmed — while everything around it ages: the sun walks its setting diagonal and sinks, the chamber keeps running (history accumulates), the grain grows as the light dies, and the water remembers: the wave rows slowly bend around the submerged evidence. The sea never reacts in the instant; influence arrives only through time. The hand tracks the descent — ghost-rings where the sun was, altitude readings, and when the sun is gone, a guess.</div>
<div class="row"><figure><img src="01_sun-above.svg"><figcaption>sun above · 19:04</figcaption></figure><figure><img src="02_sun-touching.svg"><figcaption>sun touching · 19:26</figcaption></figure><figure><img src="03_sun-half.svg"><figcaption>sun half · 19:47</figcaption></figure><figure><img src="04_sun-drowned.svg"><figcaption>sun drowned · 20:08</figcaption></figure><figure><img src="05_sun-gone.svg"><figcaption>sun gone · 20:31</figcaption></figure></div>
<div class="grid"><figure><img src="01_sun-above.svg"><figcaption>sun above · 19:04</figcaption></figure><figure><img src="02_sun-touching.svg"><figcaption>sun touching · 19:26</figcaption></figure><figure><img src="03_sun-half.svg"><figcaption>sun half · 19:47</figcaption></figure><figure><img src="04_sun-drowned.svg"><figcaption>sun drowned · 20:08</figcaption></figure><figure><img src="05_sun-gone.svg"><figcaption>sun gone · 20:31</figcaption></figure></div>
</body></html>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.5 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.6 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.8 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.8 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.7 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.5 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.5 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.6 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.0 MiB

View File

@@ -0,0 +1,9 @@
<!DOCTYPE html><html><head><meta charset="utf-8"><title>REFINED_Backlit2 · sun-above scale studies</title>
<style>body{margin:0;background:#0b0b0b;color:#bbb;font:12px/1.5 ui-monospace,monospace;padding:26px}
h1{font-weight:400;letter-spacing:.22em;text-transform:uppercase;font-size:13px;color:#d9b48a}
.row{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:16px}
figure{margin:0;background:#fff;overflow:hidden}img{width:100%;display:block}
figcaption{padding:6px 8px;color:#e8e4d8;background:#111;font-size:11px}</style></head><body>
<h1>Sun-above — scale studies (colours &amp; composition held)</h1>
<div class="row"><figure><img src="00_reference.svg"><figcaption>reference — baseline (traces 1.0 · rows 46 · overlap 1.9 · line ×1)</figcaption></figure><figure><img src="01_traces-bold.svg"><figcaption>traces-bold — evidence enlarged (bubble size 1.6, density 0.9)</figcaption></figure><figure><img src="02_traces-fine.svg"><figcaption>traces-fine — evidence miniaturised (size 0.62, density 1.3)</figcaption></figure><figure><img src="03_sea-broad.svg"><figcaption>sea-broad — few broad swells (rows 26)</figcaption></figure><figure><img src="04_sea-fine.svg"><figcaption>sea-fine — fine ripple (rows 78, line ×0.75)</figcaption></figure><figure><img src="05_sea-deep.svg"><figcaption>sea-deep — deep undulation (overlap 3.1)</figcaption></figure><figure><img src="06_sea-etched.svg"><figcaption>sea-etched — heavy wave line (line ×2.3)</figcaption></figure><figure><img src="07_giant-evidence.svg"><figcaption>giant-evidence — large ink over fine calm water (size 1.7 · rows 78 · line ×0.7 · overlap 1.6)</figcaption></figure><figure><img src="08_woodcut.svg"><figcaption>woodcut — small ink in a heavy carved sea (size 0.7 · rows 24 · line ×2.4 · overlap 2.6)</figcaption></figure></div>
</body></html>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.6 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 4.3 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.2 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.1 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.4 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.3 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.9 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.5 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.0 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.5 MiB

View File

@@ -0,0 +1,9 @@
<!DOCTYPE html><html><head><meta charset="utf-8"><title>REFINED_Backlit3 · bold large-trace studies</title>
<style>body{margin:0;background:#0b0b0b;color:#bbb;font:12px/1.5 ui-monospace,monospace;padding:26px}
h1{font-weight:400;letter-spacing:.22em;text-transform:uppercase;font-size:13px;color:#d9b48a}
.row{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:16px}
figure{margin:0;background:#fff;overflow:hidden}img{width:100%;display:block}
figcaption{padding:6px 8px;color:#e8e4d8;background:#111;font-size:11px}</style></head><body>
<h1>Sun-above — bold, large traces on top · waves varied · sun faded back</h1>
<div class="row"><figure><img src="00_bold-base.svg"><figcaption>bold-base — large ink · sea baseline (rows 40 · overlap 2.2 · line ×1.35)</figcaption></figure><figure><img src="01_broad-swell.svg"><figcaption>broad-swell — few broad swells (rows 24 · overlap 2.6)</figcaption></figure><figure><img src="02_fine-ripple.svg"><figcaption>fine-ripple — dense fine ripple (rows 82 · line ×0.9)</figcaption></figure><figure><img src="03_deep-heave.svg"><figcaption>deep-heave — deep undulation (overlap 3.4)</figcaption></figure><figure><img src="04_etched-sea.svg"><figcaption>etched-sea — heavy carved wave line (line ×2.6)</figcaption></figure><figure><img src="05_glassy-calm.svg"><figcaption>glassy-calm — shallow glassy water (overlap 1.3 · rows 52)</figcaption></figure><figure><img src="06_turbulent.svg"><figcaption>turbulent — turbulent, blip-rich sea (chaos 1.0 · blips 2.2 · overlap 2.8)</figcaption></figure><figure><img src="07_woodcut.svg"><figcaption>woodcut — heavy carved swell (rows 26 · line ×2.8 · overlap 3.0)</figcaption></figure><figure><img src="08_giant-ink-calm.svg"><figcaption>giant-ink-calm — giant evidence over quiet fine water (size 1.9 · rows 78 · line ×0.8 · overlap 1.5)</figcaption></figure><figure><img src="09_max-bold.svg"><figcaption>max-bold — everything loud (size 1.8 · rows 32 · line ×2.4 · overlap 3.0 · chaos 0.95)</figcaption></figure></div>
</body></html>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.9 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.3 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.9 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.5 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.6 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.5 MiB

View File

@@ -0,0 +1,9 @@
<!DOCTYPE html><html><head><meta charset="utf-8"><title>REFINED_Backlit4 · golden</title>
<style>body{margin:0;background:#0b0b0b;color:#bbb;font:12px/1.5 ui-monospace,monospace;padding:26px}
h1{font-weight:400;letter-spacing:.22em;text-transform:uppercase;font-size:13px;color:#d9b48a}
.row{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;margin-top:16px}
figure{margin:0;background:#fff;overflow:hidden}img{width:100%;display:block}
figcaption{padding:6px 8px;color:#e8e4d8;background:#111;font-size:11px}</style></head><body>
<h1>One sun setting — golden (1001×1620, φ)</h1>
<div class="row"><figure><img src="00_golden.svg"><figcaption>00_golden</figcaption></figure><figure><img src="01_golden.svg"><figcaption>01_golden</figcaption></figure><figure><img src="02_golden.svg"><figcaption>02_golden</figcaption></figure><figure><img src="03_golden-mirror.svg"><figcaption>03_golden-mirror</figcaption></figure><figure><img src="04_golden-mirror.svg"><figcaption>04_golden-mirror</figcaption></figure><figure><img src="05_golden-mirror.svg"><figcaption>05_golden-mirror</figcaption></figure></div>
</body></html>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.9 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.3 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.0 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.5 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.6 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.5 MiB

View File

@@ -0,0 +1,9 @@
<!DOCTYPE html><html><head><meta charset="utf-8"><title>REFINED_Backlit5 · golden · delicate bubbles</title>
<style>body{margin:0;background:#0b0b0b;color:#bbb;font:12px/1.5 ui-monospace,monospace;padding:26px}
h1{font-weight:400;letter-spacing:.22em;text-transform:uppercase;font-size:13px;color:#d9b48a}
.row{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;margin-top:16px}
figure{margin:0;background:#fff;overflow:hidden}img{width:100%;display:block}
figcaption{padding:6px 8px;color:#e8e4d8;background:#111;font-size:11px}</style></head><body>
<h1>One sun setting — golden (1001×1620, φ)</h1>
<div class="row"><figure><img src="00_golden.svg"><figcaption>00_golden</figcaption></figure><figure><img src="01_golden.svg"><figcaption>01_golden</figcaption></figure><figure><img src="02_golden.svg"><figcaption>02_golden</figcaption></figure><figure><img src="03_golden-mirror.svg"><figcaption>03_golden-mirror</figcaption></figure><figure><img src="04_golden-mirror.svg"><figcaption>04_golden-mirror</figcaption></figure><figure><img src="05_golden-mirror.svg"><figcaption>05_golden-mirror</figcaption></figure></div>
</body></html>

View File

@@ -0,0 +1,9 @@
<!DOCTYPE html><html><head><meta charset="utf-8"><title>REFINED_Backlit6 · bubble-opacity sweep</title>
<style>body{margin:0;background:#0b0b0b;color:#bbb;font:12px/1.5 ui-monospace,monospace;padding:26px}
h1{font-weight:400;letter-spacing:.22em;text-transform:uppercase;font-size:13px;color:#d9b48a}
.row{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:16px}
figure{margin:0;background:#fff;overflow:hidden}img{width:100%;display:block}
figcaption{padding:6px 8px;color:#e8e4d8;background:#111;font-size:11px}</style></head><body>
<h1>One sun setting — bubble-opacity sweep 20→80% (1001×1620, φ)</h1>
<div class="row"><figure><img src="op-20.svg"><figcaption>op-20</figcaption></figure><figure><img src="op-32.svg"><figcaption>op-32</figcaption></figure><figure><img src="op-44.svg"><figcaption>op-44</figcaption></figure><figure><img src="op-56.svg"><figcaption>op-56</figcaption></figure><figure><img src="op-68.svg"><figcaption>op-68</figcaption></figure><figure><img src="op-80.svg"><figcaption>op-80</figcaption></figure></div>
</body></html>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.5 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.5 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.5 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.5 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.5 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.5 MiB

View File

@@ -0,0 +1,9 @@
<!DOCTYPE html><html><head><meta charset="utf-8"><title>REFINED_Backlit6 · bubble-opacity sweep</title>
<style>body{margin:0;background:#0b0b0b;color:#bbb;font:12px/1.5 ui-monospace,monospace;padding:26px}
h1{font-weight:400;letter-spacing:.22em;text-transform:uppercase;font-size:13px;color:#d9b48a}
.row{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:16px}
figure{margin:0;background:#fff;overflow:hidden}img{width:100%;display:block}
figcaption{padding:6px 8px;color:#e8e4d8;background:#111;font-size:11px}</style></head><body>
<h1>One sun setting — merge · uniform-lace target sweep (1854×3000, φ)</h1>
<div class="row"><figure><img src="merge-35.svg"><figcaption>merge-35</figcaption></figure><figure><img src="merge-45.svg"><figcaption>merge-45</figcaption></figure><figure><img src="merge-55.svg"><figcaption>merge-55</figcaption></figure><figure><img src="merge-65.svg"><figcaption>merge-65</figcaption></figure><figure><img src="merge-75.svg"><figcaption>merge-75</figcaption></figure><figure><img src="merge-85.svg"><figcaption>merge-85</figcaption></figure></div>
</body></html>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.3 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.3 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.3 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.3 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.3 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.3 MiB

99
fable/stack/SPEC.md Normal file
View File

@@ -0,0 +1,99 @@
# The Chamber as a Volume — acrylic stack spec & depth design
A backlit, six-plane physical piece for the eufyMake E1: three acrylic sheets,
printed front **and** back, spaced with air gaps over an LED panel. This is
roadmap Phase 3 made literal — the scene model's per-track `z` and `age` stop
being opacity tricks and become actual millimetres.
## Physical stack (proposed — buy list at bottom)
```
viewer
─ C-front the hand: grease pencil, réseau, fiducials, header, scratches
═ sheet C 3 mm clear cast acrylic
─ C-back near scatter: δ-ray curls, close cosmics
~6 mm air gap
─ B-front THE EVENT: sharp beaded track cores
═ sheet B 3 mm
─ B-back halation: the same tracks, blurred — real glow-behind-the-line
~6 mm air gap
─ A-front history: older background events, sinking
═ sheet A 3 mm
─ A-back the cause: pressure disk (CMYK-only → pure glow) + chamber optics
~12 mm gap
▤ diffuser frosted acrylic 23 mm (kills LED hotspots)
▦ LED panel A3 slim light pad
```
Plane depths (A-back = 0): 0 / 3 / 9 / 12 / 18 / 21 mm — two depth scales:
3 mm *within* a sheet (fine parallax: halation, moiré) and 9 mm *between*
sheets (coarse parallax: cause → event → hand).
**The depth story is causal, not just spatial**: deepest plane is the cause
(the pressure wave, pure transmitted light), then history, then the halation,
then the event itself, then the debris flying toward you, and finally — on the
front glass, where scanners actually wrote — the human hand measuring it all.
Parallax reads as *interpretation floating above evidence*.
## Sheet & print geometry
- Sheet: 330 × 420 mm (E1 full bed, A3+), portrait. 3 mm clear cast acrylic,
gloss both faces.
- Art square: 300 × 300 mm, centred horizontally (15 mm margins), top edge at
y = 20 mm. Zone below (y = 320420) carries film furniture / data box /
caption on C-front only; other sheets stay clear there (light spills through
— the plate floats in a lit void).
- Corner mounting holes 5 mm ∅ at 8 mm insets, all sheets + diffuser, for M4
nylon standoffs (3 mm + 6 mm + 6 mm spacer stacking, or threaded rod with
nuts as spacers).
- Registration: every plane file carries corner crosses at the same four
coordinates just outside the art square; back-face files are **mirrored** at
export so they read correctly through the sheet.
## White-ink logic (backlit grammar)
| zone | channels | lit result |
|---|---|---|
| clear acrylic | none | pure light |
| glow elements (disk, halation, deep tracks) | CMYK only | stained-glass — light pours through colour |
| focal ink (event cores, grease pencil, furniture) | CMYK + white underlay | holds density against the panel — reads as ink |
| blocking (none in v1) | white + black | opaque |
Rule of thumb: **depth = transparency**. The deeper the plane, the less white
ink; the front glass is the most "solid" ink. The disk gets *zero* white — lit,
it becomes a light source (the laser-interference reference lives here, later).
## Pipeline
```
plan (fable/stack/plans/*.mjs)
→ node tools/stack-render.mjs <plan> per-plane SVGs + manifest.json
→ fable/stack/simulator.html?c=<id> parallax + backlight art-direction
→ [next] tools/stack-export.mjs print masters: mirrored backs,
white-ink masks, A3 layout @ true scale
```
`src/render/stack.js` splits one generated scene into per-plane sub-scenes
(selectors: track kind / z band / age band; disk, optics, damage, media,
fiducials, header as flags) and renders each through the untouched `renderSVG`
with `transparentPaper`. Bloom/core pairs use the *same* track selector so
bubble positions are identical on both faces (same filtered list → same salted
draws) — keep `density`/`size` equal within a pair.
Per-plane renders set `depth`/`aging` low: the physical stack now *is* the
depth model; double-encoding it as opacity would fight the medium.
## Calibration coupon (print before the hero)
One A5 sheet, double-sided: white-ink step wedge (0/25/50/75/100%, single +
double pass) · the same δ-ray at three white levels · CMYK-only vs CMYK+white
swatch pair · front/back registration cross · 6 pt / 8 pt mono type both faces.
Judge **lit on the panel**, not in hand.
## Buy list (if starting from zero)
- 3× cast clear acrylic 330 × 420 × 3 mm (+1 spare), protective film both sides
- 1× frosted/opal acrylic 330 × 420 × 23 mm (diffuser)
- A3 slim LED light panel (dimmable if possible)
- M4 nylon standoff kit (assorted 3/6/12 mm) or 4× M4 threaded rod + nuts
- IPA + lint-free cloths; adhesion promoter if the E1 profile recommends it

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

View File

@@ -0,0 +1,60 @@
{
"id": "01-event-volume",
"title": "The Event, Suspended",
"seed": "LAMBDA-2648",
"geometry": {
"thickness": 3,
"gap": 6
},
"planes": [
{
"file": "plane-00-A-back.svg",
"sheet": "A",
"face": "back",
"zmm": 0,
"label": "the cause — disk body + chamber optics"
},
{
"file": "plane-01-A-back.svg",
"sheet": "A",
"face": "back",
"zmm": 0,
"label": "the cause — disk granular texture"
},
{
"file": "plane-02-A-front.svg",
"sheet": "A",
"face": "front",
"zmm": 3,
"label": "history — older events sink"
},
{
"file": "plane-03-B-back.svg",
"sheet": "B",
"face": "back",
"zmm": 9,
"label": "halation — the trigger blooms behind itself"
},
{
"file": "plane-04-B-front.svg",
"sheet": "B",
"face": "front",
"zmm": 12,
"label": "the event — sharp beaded cores"
},
{
"file": "plane-05-C-back.svg",
"sheet": "C",
"face": "back",
"zmm": 18,
"label": "near scatter — δ-curls lift toward the eye"
},
{
"file": "plane-06-C-front.svg",
"sheet": "C",
"face": "front",
"zmm": 21,
"label": "the hand — grease pencil on the glass"
}
]
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 142 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 1.2 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 641 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 1.0 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 1.0 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 1.5 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

View File

@@ -0,0 +1,67 @@
{
"id": "02-palimpsest",
"title": "Palimpsest",
"seed": "KAON-0088",
"geometry": {
"thickness": 3,
"gap": 6
},
"planes": [
{
"file": "plane-00-A-back.svg",
"sheet": "A",
"face": "back",
"zmm": 0,
"label": "deep time — oldest exposures + the chamber"
},
{
"file": "plane-01-A-front.svg",
"sheet": "A",
"face": "front",
"zmm": 3,
"label": "earlier cycle"
},
{
"file": "plane-02-B-back.svg",
"sheet": "B",
"face": "back",
"zmm": 9,
"label": "moments ago"
},
{
"file": "plane-03-B-back.svg",
"sheet": "B",
"face": "back",
"zmm": 9,
"label": "the pressure wave — body + texture"
},
{
"file": "plane-04-B-back.svg",
"sheet": "B",
"face": "back",
"zmm": 9,
"label": "pressure-wave grain"
},
{
"file": "plane-05-B-front.svg",
"sheet": "B",
"face": "front",
"zmm": 12,
"label": "NOW — the trigger, all kinds, sharp"
},
{
"file": "plane-06-C-back.svg",
"sheet": "C",
"face": "back",
"zmm": 18,
"label": "still in flight — δ-debris of now"
},
{
"file": "plane-07-C-front.svg",
"sheet": "C",
"face": "front",
"zmm": 21,
"label": "after — the hand, the furniture, the wear"
}
]
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 2.7 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 3.1 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 474 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 146 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 1.3 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 1.3 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="1400" height="1400" viewBox="0 0 1400 1400">
<metadata>Bubble Chamber · seed=KAON-0088 · hash=1e2f9c933ac58 · palette=mono</metadata>
<defs>
<filter id="soften" x="-20%" y="-20%" width="140%" height="140%"><feGaussianBlur stdDeviation="1.40"/></filter>
<radialGradient id="paper" cx="50%" cy="42%" r="72%">
<stop offset="0%" stop-color="#e2dbc7"/><stop offset="100%" stop-color="#b3aa92"/>
</radialGradient>
<radialGradient id="bub-28_24_20" cx="50%" cy="50%" r="50%"><stop offset="0%" stop-color="#1c1814" stop-opacity="0.949"/><stop offset="48%" stop-color="#1c1814" stop-opacity="0.798"/><stop offset="100%" stop-color="#1c1814" stop-opacity="0.000"/></radialGradient>
<radialGradient id="shockcore" cx="50%" cy="50%" r="50%">
<stop offset="0%" stop-color="#16120f" stop-opacity="0.68"/>
<stop offset="28%" stop-color="#16120f" stop-opacity="0.45"/>
<stop offset="62%" stop-color="#1c1814" stop-opacity="0.28"/>
<stop offset="100%" stop-color="#1c1814" stop-opacity="0"/>
</radialGradient>
<radialGradient id="shockstain" cx="50%" cy="50%" r="50%">
<stop offset="0%" stop-color="#1c1814" stop-opacity="0.9"/>
<stop offset="100%" stop-color="#1c1814" stop-opacity="0"/>
</radialGradient>
<radialGradient id="shockclean" cx="50%" cy="50%" r="50%">
<stop offset="0%" stop-color="#cfc8b4" stop-opacity="0.9"/>
<stop offset="100%" stop-color="#cfc8b4" stop-opacity="0"/>
</radialGradient>
<radialGradient id="vign" cx="50%" cy="50%" r="72%">
<stop offset="30%" stop-color="#382e20" stop-opacity="0"/>
<stop offset="100%" stop-color="#382e20" stop-opacity="0"/>
</radialGradient>
</defs>
<g id="damage" inkscape:groupmode="layer" inkscape:label="Plate damage" style="display:inline">
<g stroke="#1c1814" fill="none" stroke-linecap="round"><circle cx="956.49" cy="1118.27" r="62.0" stroke-opacity="0.101" stroke-width="0.92"/><line x1="-165.08" y1="217.16" x2="759.53" y2="948.27" stroke-opacity="0.103" stroke-width="0.95"/><line x1="782.39" y1="691.43" x2="1321.41" y2="1717.56" stroke-opacity="0.123" stroke-width="0.73"/><line x1="1005.04" y1="814.99" x2="1239.92" y2="1410.61" stroke-opacity="0.221" stroke-width="0.43"/><line x1="1118.24" y1="1430.05" x2="968.95" y2="148.41" stroke-opacity="0.187" stroke-width="1.02"/><line x1="1454.37" y1="1651.97" x2="790.12" y2="913.80" stroke-opacity="0.115" stroke-width="0.66"/><path d="M 444.99 581.16 L 449.31 555.71 L 448.81 529.90 L 440.73 505.39 L 434.74 480.28 L 427.48 455.50 L 429.69 429.79 L 433.86 404.31 L 441.00 379.50 L 448.82 354.90 L 461.74 332.55 L 473.24 309.44 L 482.63 285.40 L 499.68 266.01 L 510.32 242.49 L 533.56 231.25 L 553.94 215.40 L 567.43 193.40 L 587.38 177.02 L 609.36 190.56 L 624.96 211.13 L 630.32 236.38 L 629.93 262.19 L 623.65 287.23 L 601.97 301.24 L 577.42 309.20 L 552.27 315.04 L 531.88 330.87 L 513.93 349.42" stroke-opacity="0.249" stroke-width="0.91"/><path d="M 242.23 622.29 L 233.10 602.86 L 226.14 582.55 L 230.53 561.54 L 239.13 541.86 L 251.87 524.58 L 268.17 510.62 L 286.60 499.61 L 304.38 487.57 L 323.24 477.31 L 340.81 464.98 L 362.20 463.17 L 382.47 456.11 L 402.11 447.45 L 407.85 426.76 L 415.83 406.83 L 434.65 396.52 L 456.12 396.32 L 477.31 392.85 L 494.31 405.95 L 514.34 413.69 L 535.57 416.86 L 555.33 425.25 L 575.21 433.35 L 595.70 439.77 L 616.79 443.78 L 637.13 450.64 L 646.53 469.94 L 660.80 485.97 L 672.51 503.97 L 685.32 521.19" stroke-opacity="0.225" stroke-width="1.05"/></g><g fill="#1c1814"><circle cx="467.63" cy="542.33" r="1.67" fill-opacity="0.310"/><circle cx="479.15" cy="544.76" r="0.88" fill-opacity="0.331"/><circle cx="486.58" cy="532.89" r="2.01" fill-opacity="0.234"/><circle cx="508.05" cy="536.46" r="0.66" fill-opacity="0.276"/><circle cx="463.94" cy="543.84" r="0.73" fill-opacity="0.300"/><circle cx="462.97" cy="557.88" r="0.94" fill-opacity="0.180"/><circle cx="568.21" cy="1197.08" r="1.48" fill-opacity="0.193"/><circle cx="424.16" cy="368.66" r="1.02" fill-opacity="0.383"/><circle cx="390.41" cy="326.62" r="1.78" fill-opacity="0.215"/><circle cx="460.65" cy="321.21" r="1.87" fill-opacity="0.156"/><circle cx="415.35" cy="339.99" r="1.80" fill-opacity="0.409"/><circle cx="481.74" cy="122.14" r="1.72" fill-opacity="0.250"/><circle cx="439.98" cy="124.51" r="0.81" fill-opacity="0.219"/><circle cx="447.47" cy="116.60" r="2.12" fill-opacity="0.403"/><circle cx="456.70" cy="94.46" r="1.44" fill-opacity="0.327"/><circle cx="437.56" cy="62.94" r="0.81" fill-opacity="0.365"/><circle cx="831.20" cy="888.38" r="1.27" fill-opacity="0.416"/><circle cx="874.34" cy="932.63" r="0.50" fill-opacity="0.307"/><circle cx="874.33" cy="932.27" r="1.70" fill-opacity="0.240"/><circle cx="873.22" cy="957.85" r="0.70" fill-opacity="0.203"/><circle cx="896.09" cy="931.92" r="1.38" fill-opacity="0.192"/><circle cx="892.40" cy="902.63" r="2.21" fill-opacity="0.230"/><circle cx="252.16" cy="868.61" r="1.79" fill-opacity="0.373"/><circle cx="265.02" cy="827.58" r="2.24" fill-opacity="0.399"/><circle cx="307.77" cy="870.71" r="1.17" fill-opacity="0.258"/><circle cx="1091.63" cy="1262.63" r="0.52" fill-opacity="0.306"/><circle cx="1136.10" cy="1271.88" r="1.46" fill-opacity="0.282"/><circle cx="1102.95" cy="1268.03" r="0.93" fill-opacity="0.363"/><circle cx="917.63" cy="303.65" r="1.85" fill-opacity="0.301"/><circle cx="921.65" cy="241.66" r="1.18" fill-opacity="0.192"/><circle cx="912.80" cy="326.36" r="0.54" fill-opacity="0.312"/><circle cx="908.94" cy="264.09" r="0.78" fill-opacity="0.440"/><circle cx="1154.45" cy="698.26" r="2.08" fill-opacity="0.429"/><circle cx="1183.48" cy="680.93" r="0.86" fill-opacity="0.436"/><circle cx="1210.26" cy="687.58" r="0.67" fill-opacity="0.418"/><circle cx="1235.14" cy="721.34" r="0.68" fill-opacity="0.152"/><circle cx="895.28" cy="85.22" r="0.75" fill-opacity="0.242"/><circle cx="916.78" cy="110.01" r="1.74" fill-opacity="0.385"/><circle cx="865.80" cy="120.73" r="1.15" fill-opacity="0.229"/><circle cx="916.25" cy="90.18" r="2.02" fill-opacity="0.359"/><circle cx="901.22" cy="70.57" r="1.27" fill-opacity="0.170"/><circle cx="928.37" cy="103.64" r="1.82" fill-opacity="0.235"/><circle cx="862.76" cy="104.59" r="0.50" fill-opacity="0.167"/></g>
</g>
<g id="fiducials" inkscape:groupmode="layer" inkscape:label="Fiducials" style="display:inline">
<g stroke="#1c1814" stroke-opacity="0.55" stroke-width="1.68"><line x1="104.30000000000001" y1="116.9" x2="129.5" y2="116.9"/><line x1="116.9" y1="104.30000000000001" x2="116.9" y2="129.5"/><line x1="1270.5" y1="116.9" x2="1295.6999999999998" y2="116.9"/><line x1="1283.1" y1="104.30000000000001" x2="1283.1" y2="129.5"/><line x1="104.30000000000001" y1="1283.1" x2="129.5" y2="1283.1"/><line x1="116.9" y1="1270.5" x2="116.9" y2="1295.6999999999998"/><line x1="1270.5" y1="1283.1" x2="1295.6999999999998" y2="1283.1"/><line x1="1283.1" y1="1270.5" x2="1283.1" y2="1295.6999999999998"/><line x1="687.4" y1="116.9" x2="712.6" y2="116.9"/><line x1="700" y1="104.30000000000001" x2="700" y2="129.5"/><line x1="104.30000000000001" y1="700" x2="129.5" y2="700"/><line x1="116.9" y1="687.4" x2="116.9" y2="712.6"/><line x1="1270.5" y1="700" x2="1295.6999999999998" y2="700"/><line x1="1283.1" y1="687.4" x2="1283.1" y2="712.6"/></g>
</g>
<g id="header" inkscape:groupmode="layer" inkscape:label="Archival header" style="display:inline">
<g fill="#1c1814" font-family="'JetBrains Mono', monospace"><text x="36" y="52" font-size="15" fill-opacity="0.62">GARGAMELLE · CERN</text><text x="36" y="74" font-size="13" fill-opacity="0.5">SEED KAON-0088</text><text x="1364" y="1345" font-size="14" text-anchor="end" fill-opacity="0.58">PLATE 163</text><text x="1364" y="1364" font-size="14" text-anchor="end" fill-opacity="0.58">EXPOSED 1971.06.13</text></g>
</g>
<g id="media" inkscape:groupmode="layer" inkscape:label="Media &amp; hand" style="display:inline">
<rect x="38.0" y="38.0" width="1324.0" height="1324.0" fill="none" stroke="#1c1814" stroke-opacity="0.5" stroke-width="2.8"/><rect x="14.7" y="65.5" width="19.2" height="34.3" rx="5.6" fill="#faf8f0" fill-opacity="0.7" stroke="#1c1814" stroke-opacity="0.4" stroke-width="1.4"/><rect x="1366.1" y="65.5" width="19.2" height="34.3" rx="5.6" fill="#faf8f0" fill-opacity="0.7" stroke="#1c1814" stroke-opacity="0.4" stroke-width="1.4"/><rect x="14.7" y="219.8" width="19.2" height="34.3" rx="5.6" fill="#faf8f0" fill-opacity="0.7" stroke="#1c1814" stroke-opacity="0.4" stroke-width="1.4"/><rect x="1366.1" y="219.8" width="19.2" height="34.3" rx="5.6" fill="#faf8f0" fill-opacity="0.7" stroke="#1c1814" stroke-opacity="0.4" stroke-width="1.4"/><rect x="14.7" y="374.2" width="19.2" height="34.3" rx="5.6" fill="#faf8f0" fill-opacity="0.7" stroke="#1c1814" stroke-opacity="0.4" stroke-width="1.4"/><rect x="1366.1" y="374.2" width="19.2" height="34.3" rx="5.6" fill="#faf8f0" fill-opacity="0.7" stroke="#1c1814" stroke-opacity="0.4" stroke-width="1.4"/><rect x="14.7" y="528.5" width="19.2" height="34.3" rx="5.6" fill="#faf8f0" fill-opacity="0.7" stroke="#1c1814" stroke-opacity="0.4" stroke-width="1.4"/><rect x="1366.1" y="528.5" width="19.2" height="34.3" rx="5.6" fill="#faf8f0" fill-opacity="0.7" stroke="#1c1814" stroke-opacity="0.4" stroke-width="1.4"/><rect x="14.7" y="682.9" width="19.2" height="34.3" rx="5.6" fill="#faf8f0" fill-opacity="0.7" stroke="#1c1814" stroke-opacity="0.4" stroke-width="1.4"/><rect x="1366.1" y="682.9" width="19.2" height="34.3" rx="5.6" fill="#faf8f0" fill-opacity="0.7" stroke="#1c1814" stroke-opacity="0.4" stroke-width="1.4"/><rect x="14.7" y="837.2" width="19.2" height="34.3" rx="5.6" fill="#faf8f0" fill-opacity="0.7" stroke="#1c1814" stroke-opacity="0.4" stroke-width="1.4"/><rect x="1366.1" y="837.2" width="19.2" height="34.3" rx="5.6" fill="#faf8f0" fill-opacity="0.7" stroke="#1c1814" stroke-opacity="0.4" stroke-width="1.4"/><rect x="14.7" y="991.6" width="19.2" height="34.3" rx="5.6" fill="#faf8f0" fill-opacity="0.7" stroke="#1c1814" stroke-opacity="0.4" stroke-width="1.4"/><rect x="1366.1" y="991.6" width="19.2" height="34.3" rx="5.6" fill="#faf8f0" fill-opacity="0.7" stroke="#1c1814" stroke-opacity="0.4" stroke-width="1.4"/><rect x="14.7" y="1145.9" width="19.2" height="34.3" rx="5.6" fill="#faf8f0" fill-opacity="0.7" stroke="#1c1814" stroke-opacity="0.4" stroke-width="1.4"/><rect x="1366.1" y="1145.9" width="19.2" height="34.3" rx="5.6" fill="#faf8f0" fill-opacity="0.7" stroke="#1c1814" stroke-opacity="0.4" stroke-width="1.4"/><rect x="14.7" y="1300.3" width="19.2" height="34.3" rx="5.6" fill="#faf8f0" fill-opacity="0.7" stroke="#1c1814" stroke-opacity="0.4" stroke-width="1.4"/><rect x="1366.1" y="1300.3" width="19.2" height="34.3" rx="5.6" fill="#faf8f0" fill-opacity="0.7" stroke="#1c1814" stroke-opacity="0.4" stroke-width="1.4"/><g fill="#1c1814" font-family="'JetBrains Mono', monospace"><text x="58.6" y="700.0" font-size="10" fill-opacity="0.45" text-anchor="middle" transform="rotate(-90 58.6 700.0)">KODAK SAFETY FILM</text><text x="82.6" y="1248.8" font-size="13" fill-opacity="0.5">ROLL 627</text><text x="82.6" y="1265.6" font-size="13" fill-opacity="0.5">FRAME 163</text><text x="82.6" y="1282.4" font-size="13" fill-opacity="0.5">1971.06.13</text></g><g stroke="#9c1e1e" fill="#9c1e1e" stroke-linecap="round" stroke-linejoin="round"><path d="M 1142.9 886.3 L 1140.6 890.2 L 1136.5 891.9 L 1133.9 896.9 L 1130.0 900.7 L 1125.0 901.9 L 1120.0 898.3 L 1115.0 900.6 L 1111.0 896.4 L 1106.5 895.4 L 1101.5 894.9 L 1097.6 892.0 L 1094.0 888.7 L 1091.2 884.8 L 1089.5 880.4 L 1088.1 875.9 L 1089.5 870.9 L 1086.8 867.0 L 1085.3 862.5 L 1087.2 858.2 L 1082.1 852.1 L 1088.7 849.3 L 1088.1 843.6 L 1088.7 837.7 L 1092.5 834.0 L 1099.5 834.8 L 1104.2 833.8 L 1106.8 828.3 L 1110.8 823.4 L 1116.5 827.6 L 1121.2 827.1 L 1126.2 826.2 L 1131.6 825.5 L 1133.6 833.3 L 1137.2 835.6 L 1140.9 837.9 L 1145.8 839.3 L 1150.6 841.7 L 1151.3 846.9 L 1154.8 850.7 L 1155.0 855.7 L 1157.0 860.4 L 1154.1 865.2 L 1152.5 869.6 L 1151.5 874.0 L 1152.6 879.7 L 1144.9 880.4 L 1144.8 886.0 L 1143.6 891.7 L 1134.9 887.5 L 1134.5 896.2 L 1128.8 894.5 L 1124.9 898.1" fill="none" stroke-opacity="0.85" stroke-width="1.68"/><path d="M 875.2 624.7 L 899.7 640.5 L 933.8 663.3 L 965.0 691.7 L 995.0 710.9 L 1037.6 729.5 L 1071.6 748.7 L 1097.6 777.1 L 1133.8 799.8 L 1166.6 822.1" fill="none" stroke-opacity="0.85" stroke-width="1.40"/><path d="M 1165.1 822.7 L 1145.0 818.6 M 1165.1 822.7 L 1154.1 805.4" fill="none" stroke-opacity="0.85" stroke-width="1.40"/><text x="1157.9" y="826.3" font-size="31" font-family="'Bradley Hand','Segoe Script','Comic Sans MS',cursive" fill-opacity="0.9" transform="rotate(-5.6 1157.9 826.3)">Nº 163</text></g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

View File

@@ -0,0 +1,67 @@
{
"id": "03-interference",
"title": "The Measurement Interferes",
"seed": "NEUTRINO-1973",
"geometry": {
"thickness": 3,
"gap": 6
},
"planes": [
{
"file": "plane-00-A-back.svg",
"sheet": "A",
"face": "back",
"zmm": 0,
"label": "the spectral disk — interference at the source"
},
{
"file": "plane-01-A-back.svg",
"sheet": "A",
"face": "back",
"zmm": 0,
"label": "the disk — granular spray"
},
{
"file": "plane-02-A-front.svg",
"sheet": "A",
"face": "front",
"zmm": 3,
"label": "the sea — sweepers, cosmics, history"
},
{
"file": "plane-03-B-back.svg",
"sheet": "B",
"face": "back",
"zmm": 9,
"label": "deep réseau — scaled +1.5%, moirés against the front grid"
},
{
"file": "plane-04-B-back.svg",
"sheet": "B",
"face": "back",
"zmm": 9,
"label": "halation — the trigger blooms"
},
{
"file": "plane-05-B-front.svg",
"sheet": "B",
"face": "front",
"zmm": 12,
"label": "the event — sharp"
},
{
"file": "plane-06-C-back.svg",
"sheet": "C",
"face": "back",
"zmm": 18,
"label": "δ-curls in flight"
},
{
"file": "plane-07-C-front.svg",
"sheet": "C",
"face": "front",
"zmm": 21,
"label": "front réseau + the hand — measurement on glass"
}
]
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 147 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 2.1 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 531 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 1.1 MiB

Some files were not shown because too many files have changed in this diff Show More