Files
bubblechambersimart/PRINT.md
2026-05-21 05:59:44 -04:00

117 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.
## 2a. SVG layers (for post manipulation)
Every SVG is organised into named **layers** (Inkscape `inkscape:groupmode="layer"`
convention) — they open as toggleable layers in **Inkscape** and **Affinity
Designer**, and as named groups in **Illustrator**:
```
Background paper + gas-glow gradient
Chamber optics boundary + structural fan / wall lines
Shock disk the piston disk (body + bubbles/strokes + stains)
Tracks · primary primary interaction tracks
Tracks · cosmic & sweepers
Tracks · V-decays
Tracks · δ-rays (curls) the little spirals, isolated for separate treatment
Plate damage scratches, hairs, dust, water rings
Fiducials registration crosses
Vignette edge darkening
Archival header lab / seed / plate / exposure text
```
So you can, e.g., recolour just the δ-rays, delete the header, mask the disk, or
push the plate-damage layer to a different blend — without touching the rest.
(Empty layers for a given seed are omitted.)
**PDF layers too.** The PDF carries the same set as **Optional Content Groups
(OCG)** — toggleable layers in Acrobat, Illustrator and Preview.
**SVG effects.** SVG supports filters; the **Shock disk** layer carries an
optional `feGaussianBlur` ("Disk edge softness" slider / `diskSoften`) to soften
just that layer's edges. It's matched in the raster preview/PNG. (The PDF keeps
the disk crisp — apply blur in post there, or use the PNG/SVG for the soft look.)
## 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.)