5.0 KiB
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)
- 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. - 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 behindsrc/(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 incompositions/; uses radial-grid keys (vp,rays,depthLines) thatgridSheetsnow 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.mjsreferences arender-milkweed-svg.mjsthat doesn't exist.
Known bugs
- Ripple grids silently dropped by
renderQFTSVG(src/qft/renderer.js:178-181) — every "ripple" variation across sketches 08–09 shipped without its subject. drawDamage/drawInstrumentlast param namedinvbut called withlight(src/render/canvasPhoto.js:110,208) — works today, trap for the next edit.perspectiveGridSVGcreates an rng it never uses — the compose layer's 'pA'/'pB' salts do nothing for radial grids.- Dead pre-palette-era fields in
canvasPhoto.jspalette();delta.js:53comment inverts what the formula does;watercolor.js:3740.05 * 8.