114 lines
6.0 KiB
Markdown
114 lines
6.0 KiB
Markdown
|
|
# 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.
|