Compare commits
4 Commits
milkweed-w
...
2a4fffbb2a
| Author | SHA1 | Date | |
|---|---|---|---|
| 2a4fffbb2a | |||
| 3f2d25f90e | |||
| 6dcb10c68b | |||
| 4314087557 |
154
fable/01-intent-vs-execution.md
Normal 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 20–21** — 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 1300–1600 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.
|
||||||
|
- ~150–200 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 01–09,
|
||||||
|
templates 1–4, 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
@@ -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 24–25) |
|
||||||
|
| 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 24–25) 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`);
|
||||||
|
~150–200 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 3–4 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 20–21) → 5 iteration series → QFT sketches 01–09 → qft-bc →
|
||||||
|
layering (642 MB, the largest) → liberation → templates 1–4 → watercolor +
|
||||||
|
milkweed (untracked).
|
||||||
|
- `output/masters/`: 7 masters, 5 seeds, all from May 20–21. 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 08–09 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
@@ -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: 3–4 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
@@ -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 07–14: 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
@@ -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.
|
||||||
24
fable/Proof1/base/merge-45.svg
Normal file
|
After Width: | Height: | Size: 6.1 MiB |
24
fable/Proof1/base/merge-55.svg
Normal file
|
After Width: | Height: | Size: 6.1 MiB |
83
fable/Proof1/manifest.json
Normal 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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
1
fable/Proof1/plane-1-sun.svg
Normal file
|
After Width: | Height: | Size: 206 KiB |
1
fable/Proof1/plane-2-sea-far.svg
Normal file
|
After Width: | Height: | Size: 396 KiB |
1
fable/Proof1/plane-3-sea-mid.svg
Normal file
|
After Width: | Height: | Size: 396 KiB |
1
fable/Proof1/plane-4-sea-near.svg
Normal file
|
After Width: | Height: | Size: 396 KiB |
1
fable/Proof1/plane-5-event-halo.svg
Normal file
|
After Width: | Height: | Size: 4.5 MiB |
1
fable/Proof1/plane-6-event-core.svg
Normal file
|
After Width: | Height: | Size: 4.5 MiB |
1
fable/Proof1/plane-7-front-glass.svg
Normal 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 |
BIN
fable/Proof1/proof1_letter_8.5x11.png
Normal file
|
After Width: | Height: | Size: 9.4 MiB |
81
fable/Proof1/simulator.html
Normal 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
@@ -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.
|
||||||
29
fable/REFINED_Backlit/01_sun-above.svg
Normal file
|
After Width: | Height: | Size: 6.5 MiB |
29
fable/REFINED_Backlit/02_sun-touching.svg
Normal file
|
After Width: | Height: | Size: 6.7 MiB |
29
fable/REFINED_Backlit/03_sun-half.svg
Normal file
|
After Width: | Height: | Size: 6.9 MiB |
29
fable/REFINED_Backlit/04_sun-drowned.svg
Normal file
|
After Width: | Height: | Size: 7.0 MiB |
29
fable/REFINED_Backlit/05_sun-gone.svg
Normal file
|
After Width: | Height: | Size: 7.2 MiB |
13
fable/REFINED_Backlit/index.html
Normal 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>
|
||||||
28
fable/REFINED_Backlit2/00_reference.svg
Normal file
|
After Width: | Height: | Size: 6.5 MiB |
28
fable/REFINED_Backlit2/01_traces-bold.svg
Normal file
|
After Width: | Height: | Size: 5.6 MiB |
28
fable/REFINED_Backlit2/02_traces-fine.svg
Normal file
|
After Width: | Height: | Size: 6.8 MiB |
28
fable/REFINED_Backlit2/03_sea-broad.svg
Normal file
|
After Width: | Height: | Size: 5.8 MiB |
28
fable/REFINED_Backlit2/04_sea-fine.svg
Normal file
|
After Width: | Height: | Size: 7.7 MiB |
28
fable/REFINED_Backlit2/05_sea-deep.svg
Normal file
|
After Width: | Height: | Size: 6.5 MiB |
28
fable/REFINED_Backlit2/06_sea-etched.svg
Normal file
|
After Width: | Height: | Size: 6.5 MiB |
28
fable/REFINED_Backlit2/07_giant-evidence.svg
Normal file
|
After Width: | Height: | Size: 6.6 MiB |
28
fable/REFINED_Backlit2/08_woodcut.svg
Normal file
|
After Width: | Height: | Size: 6.0 MiB |
9
fable/REFINED_Backlit2/index.html
Normal 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 & 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>
|
||||||
24
fable/REFINED_Backlit3/00_bold-base.svg
Normal file
|
After Width: | Height: | Size: 5.6 MiB |
24
fable/REFINED_Backlit3/01_broad-swell.svg
Normal file
|
After Width: | Height: | Size: 4.3 MiB |
24
fable/REFINED_Backlit3/02_fine-ripple.svg
Normal file
|
After Width: | Height: | Size: 7.2 MiB |
24
fable/REFINED_Backlit3/03_deep-heave.svg
Normal file
|
After Width: | Height: | Size: 6.1 MiB |
24
fable/REFINED_Backlit3/04_etched-sea.svg
Normal file
|
After Width: | Height: | Size: 5.4 MiB |
24
fable/REFINED_Backlit3/05_glassy-calm.svg
Normal file
|
After Width: | Height: | Size: 6.3 MiB |
24
fable/REFINED_Backlit3/06_turbulent.svg
Normal file
|
After Width: | Height: | Size: 5.9 MiB |
24
fable/REFINED_Backlit3/07_woodcut.svg
Normal file
|
After Width: | Height: | Size: 5.5 MiB |
24
fable/REFINED_Backlit3/08_giant-ink-calm.svg
Normal file
|
After Width: | Height: | Size: 7.0 MiB |
24
fable/REFINED_Backlit3/09_max-bold.svg
Normal file
|
After Width: | Height: | Size: 6.5 MiB |
9
fable/REFINED_Backlit3/index.html
Normal 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>
|
||||||
24
fable/REFINED_Backlit4/00_golden.svg
Normal file
|
After Width: | Height: | Size: 5.9 MiB |
24
fable/REFINED_Backlit4/01_golden.svg
Normal file
|
After Width: | Height: | Size: 5.3 MiB |
24
fable/REFINED_Backlit4/02_golden.svg
Normal file
|
After Width: | Height: | Size: 5.9 MiB |
24
fable/REFINED_Backlit4/03_golden-mirror.svg
Normal file
|
After Width: | Height: | Size: 6.5 MiB |
24
fable/REFINED_Backlit4/04_golden-mirror.svg
Normal file
|
After Width: | Height: | Size: 5.6 MiB |
24
fable/REFINED_Backlit4/05_golden-mirror.svg
Normal file
|
After Width: | Height: | Size: 6.5 MiB |
9
fable/REFINED_Backlit4/index.html
Normal 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>
|
||||||
24
fable/REFINED_Backlit5/00_golden.svg
Normal file
|
After Width: | Height: | Size: 5.9 MiB |
24
fable/REFINED_Backlit5/01_golden.svg
Normal file
|
After Width: | Height: | Size: 5.3 MiB |
24
fable/REFINED_Backlit5/02_golden.svg
Normal file
|
After Width: | Height: | Size: 6.0 MiB |
24
fable/REFINED_Backlit5/03_golden-mirror.svg
Normal file
|
After Width: | Height: | Size: 6.5 MiB |
24
fable/REFINED_Backlit5/04_golden-mirror.svg
Normal file
|
After Width: | Height: | Size: 5.6 MiB |
24
fable/REFINED_Backlit5/05_golden-mirror.svg
Normal file
|
After Width: | Height: | Size: 6.5 MiB |
9
fable/REFINED_Backlit5/index.html
Normal 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>
|
||||||
9
fable/REFINED_Backlit6/index.html
Normal 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>
|
||||||
24
fable/REFINED_Backlit6/op-20.svg
Normal file
|
After Width: | Height: | Size: 6.5 MiB |
24
fable/REFINED_Backlit6/op-32.svg
Normal file
|
After Width: | Height: | Size: 6.5 MiB |
24
fable/REFINED_Backlit6/op-44.svg
Normal file
|
After Width: | Height: | Size: 6.5 MiB |
24
fable/REFINED_Backlit6/op-56.svg
Normal file
|
After Width: | Height: | Size: 6.5 MiB |
24
fable/REFINED_Backlit6/op-68.svg
Normal file
|
After Width: | Height: | Size: 6.5 MiB |
24
fable/REFINED_Backlit6/op-80.svg
Normal file
|
After Width: | Height: | Size: 6.5 MiB |
9
fable/REFINED_Backlit7/index.html
Normal 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>
|
||||||
24
fable/REFINED_Backlit7/merge-35.svg
Normal file
|
After Width: | Height: | Size: 6.3 MiB |
24
fable/REFINED_Backlit7/merge-45.svg
Normal file
|
After Width: | Height: | Size: 6.3 MiB |
24
fable/REFINED_Backlit7/merge-55.svg
Normal file
|
After Width: | Height: | Size: 6.3 MiB |
24
fable/REFINED_Backlit7/merge-65.svg
Normal file
|
After Width: | Height: | Size: 6.3 MiB |
24
fable/REFINED_Backlit7/merge-75.svg
Normal file
|
After Width: | Height: | Size: 6.3 MiB |
24
fable/REFINED_Backlit7/merge-85.svg
Normal file
|
After Width: | Height: | Size: 6.3 MiB |
99
fable/stack/SPEC.md
Normal 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 2–3 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 = 320–420) 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 × 2–3 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
|
||||||
BIN
fable/stack/candidates/01-event-volume/composite-lit.png
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
60
fable/stack/candidates/01-event-volume/manifest.json
Normal 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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
38
fable/stack/candidates/01-event-volume/plane-00-A-back.svg
Normal file
|
After Width: | Height: | Size: 142 KiB |
42
fable/stack/candidates/01-event-volume/plane-01-A-back.svg
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
157
fable/stack/candidates/01-event-volume/plane-02-A-front.svg
Normal file
|
After Width: | Height: | Size: 641 KiB |
106
fable/stack/candidates/01-event-volume/plane-03-B-back.svg
Normal file
|
After Width: | Height: | Size: 1.0 MiB |
105
fable/stack/candidates/01-event-volume/plane-04-B-front.svg
Normal file
|
After Width: | Height: | Size: 1.0 MiB |
207
fable/stack/candidates/01-event-volume/plane-05-C-back.svg
Normal file
|
After Width: | Height: | Size: 1.5 MiB |
41
fable/stack/candidates/01-event-volume/plane-06-C-front.svg
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
fable/stack/candidates/02-palimpsest/composite-lit.png
Normal file
|
After Width: | Height: | Size: 1.5 MiB |
67
fable/stack/candidates/02-palimpsest/manifest.json
Normal 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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
49
fable/stack/candidates/02-palimpsest/plane-00-A-back.svg
Normal file
|
After Width: | Height: | Size: 2.7 MiB |
50
fable/stack/candidates/02-palimpsest/plane-01-A-front.svg
Normal file
|
After Width: | Height: | Size: 3.1 MiB |
38
fable/stack/candidates/02-palimpsest/plane-02-B-back.svg
Normal file
|
After Width: | Height: | Size: 474 KiB |
34
fable/stack/candidates/02-palimpsest/plane-03-B-back.svg
Normal file
|
After Width: | Height: | Size: 146 KiB |
42
fable/stack/candidates/02-palimpsest/plane-04-B-back.svg
Normal file
|
After Width: | Height: | Size: 1.3 MiB |
40
fable/stack/candidates/02-palimpsest/plane-05-B-front.svg
Normal file
|
After Width: | Height: | Size: 1.3 MiB |
36
fable/stack/candidates/02-palimpsest/plane-06-C-back.svg
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
41
fable/stack/candidates/02-palimpsest/plane-07-C-front.svg
Normal 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 & 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 |
BIN
fable/stack/candidates/03-interference/composite-lit.png
Normal file
|
After Width: | Height: | Size: 1.5 MiB |
67
fable/stack/candidates/03-interference/manifest.json
Normal 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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
38
fable/stack/candidates/03-interference/plane-00-A-back.svg
Normal file
|
After Width: | Height: | Size: 147 KiB |
42
fable/stack/candidates/03-interference/plane-01-A-back.svg
Normal file
|
After Width: | Height: | Size: 2.1 MiB |
44
fable/stack/candidates/03-interference/plane-02-A-front.svg
Normal file
|
After Width: | Height: | Size: 531 KiB |
33
fable/stack/candidates/03-interference/plane-03-B-back.svg
Normal file
|
After Width: | Height: | Size: 12 KiB |
42
fable/stack/candidates/03-interference/plane-04-B-back.svg
Normal file
|
After Width: | Height: | Size: 1.1 MiB |