Files
bubblechambersimart/PRINT.md

85 lines
3.9 KiB
Markdown
Raw Normal View History

2026-05-20 16:53:23 -04:00
# Large-format print strategy
For a wall-scale piece (you mentioned ~2.5 m × 4 m, assembled in layers with
other artwork), the key idea is: **don't bake one giant flat raster.** Work with
a vector geometry master plus separable raster texture, and let the seed be the
single source of truth.
## 1. The seed is the whole fingerprint
Every parameter is derived deterministically from the seed (`src/scene/params.js`).
So an inspiration thumbnail and its print master are the *same image* at different
sizes — you never track parameters, you just keep a seed.
```
tools/inspire.sh 40 600 # 40 random plates → output/inspiration/ + index.html
# browse output/inspiration/index.html, note the seeds you like
tools/render.sh STRANGENESS-7 # → output/masters/STRANGENESS-7.{svg,pdf,_9000.png}
tools/render.sh STRANGENESS-7 12000 # bigger raster if you want it
```
## 2. Two masters per chosen seed
| master | resolution | carries | use |
|---|---|---|---|
| **SVG** (`<SEED>.svg`) | infinite | geometry: tracks, curls, disk structure, fan lines, header | scale to the full 4 m with zero pixelation — the crisp "ink" |
| **PNG** (`<SEED>_<px>.png`) | up to ~14000 px | the analog layer: grain, bloom, tonal mottle, stains, vignette | the photographic texture/feel |
| **PDF** (`<SEED>.pdf`) | infinite (CMYK) | same geometry, print-shop colour | hand to a print shop as-is |
Why both: vector stays razor-sharp at any size but is "clean"; the raster holds
the worn-film texture but is resolution-limited. At 4 m you want the geometry
crisp *and* the grain present — so use both as layers.
## 3. Recommended assembly (in your compositor)
Think of each plate as a small stack you drop into your larger artwork:
1. **Geometry** — place the **SVG**, scale to final size. Stays sharp at 4 m.
2. **Texture/feel** — place the **PNG** over it; it already contains grain +
bloom + stains. Blend `Multiply` (positive plates) and dial opacity, or
isolate just its grain/mottle if you only want texture.
3. Your **other artistic layers** above/below, blended to taste.
Because the PNG and SVG come from the same seed they register exactly (same
composition, same coordinate frame, same margins).
> Film grain *should* enlarge — real emulsion grain gets bigger on big prints.
> So upscaling the PNG's texture to 4 m is not a defect, it's the look. Render the
> PNG at whatever size is comfortable (9000 px is plenty as a texture source) and
> let it scale up.
## 4. Resolution math
For viewing a wall piece from > 12 m, 100150 DPI is ample (the eye can't
resolve more at that distance).
| print dimension | 100 DPI | 150 DPI |
|---|---|---|
| 2.5 m (98 in) | 9 800 px | 14 700 px |
| 4.0 m (157 in) | 15 700 px | 23 600 px |
- The **SVG/PDF** meet any of these exactly (vector).
- The **PNG** tops out around **14 000 px** in this headless pipeline (Chrome
canvas limit ≈ 16384²; 14000 renders reliably, ~78 s, ~260 MB). That covers the
2.5 m dimension at 140 DPI as a *baked* image; for the 4 m dimension rely on the
SVG for sharpness and let the PNG texture scale.
## 5. If you need a baked raster bigger than ~14000 px
Options, in order of preference:
1. **Use the SVG** as the geometry and only scale the PNG *texture* — almost
always the right answer.
2. **Tiled render** — render the scene in N×N tiles and stitch (a future
`tools/render-tiled.mjs`). Seamless grain/bloom across tiles needs care; ask
and I'll build it.
3. **node-canvas offline** — move the photographic renderer to Node with
`node-canvas` (no Chrome canvas-size limit). Adds a native dependency.
## 6. Tuning a seed before committing
Found a seed that's close? Open `bubble_chamber.html`, type the seed, and nudge
sliders — including **Shock-wave Disk → Staining / erosion** for the disk's
cleanliness. (Note: manual slider tweaks are *not* part of the seed fingerprint;
if you want a tweak to be permanent, tell me the values and I'll fold them into a
preset or the seed-derivation ranges.)