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

5.4 KiB
Raw Permalink Blame History

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.)

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.)