Files
bubblechambersimart/README.md
noisedestroyers 7d6d5c232e Colour palettes, depth/exposure, disk & halo effects; stop tracking rasters
Generator
- Depth & exposure dynamics: per-track chamber depth (z) + event age drive
  opacity, bubble size and defocus (depthFactors); depth/aging dials.
- Palette abstraction (src/render/palette.js) — one registry entry per "feel":
  mono, charge, beta, kind, kindlife, kindrise, lifecycle, psychedelic,
  cyanotype, magentarise. Per-track ink + per-bubble bubbleInk hooks.
- Global colour controls: saturation, hue shift; paper toning (cream/sepia/
  selenium/cool/olive/neutral + brightness + gas-glow), bubble edge softness,
  iridescent disk (spectral sunburst), chromatic halo. Ink blend chosen by
  ground luminance so light-on-dark chemistries composite correctly.
- Tracks carry charge q; bubbles carry lifecycle position + local beta.
- All effects in raster + layered SVG + CMYK/OCG PDF; B&W remains the default.

Tooling & art
- tools/find-semicircle.mjs; render-svg/pdf --seed mode + k=v overrides.
- Curated vector SVG sets under output/ with browsable index.html.

Repo hygiene
- .gitignore: stop tracking generated rasters/PDFs (reproducible from seeds),
  the reference image, and a stray db; keep curated SVGs + code + docs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 15:55:03 -04:00

84 lines
4.5 KiB
Markdown
Raw Permalink 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.
# Bubble Chamber
A seeded, parametric generator of imaginary particle-physics plates — the
black-and-white "bubble chamber" photographs of mid-century high-energy physics —
built for large-format art print. One seed → one fully-determined image, rendered
either as a worn photographic plate or as clean, layered vector for print.
![a generated plate](output/iterations/01_archival-mono.svg)
## How the images are generated
Everything derives deterministically from a **seed** string: the seed is hashed
(`cyrb53`) to seed a chain of salted PRNGs (`mulberry32`) that drive a small
physics model, so the same seed always yields the same plate. Charged particles
are launched from interaction **vertices** and integrated step-by-step through a
uniform magnetic field — curving with radius `r = p/(qB)` and bleeding momentum to
a simplified BetheBloch energy loss, so slow particles tighten into inward
spirals. The velocity **β** is tracked along every path and sets both how densely
**bubbles** nucleate (`∝ 1/β²`) and how fat they are. Low-energy electrons
knocked loose along the way (**δ-rays**) are drawn as tight logarithmic spirals;
neutral particles leave **V-decays**; stiff **cosmic rays** and gentle
**sweepers** cross the frame; a pressure **shock disk**, faint **chamber-optics**
lines, and **emulsion damage** (scratches, dust, water rings, stains) complete the
scene. This pure geometric description — the **scene model** — is renderer-agnostic
and handed to independent renderers: a **photographic raster** compositor that
layers soft blooming bubbles, halation, film grain, tonal mottle, vignette and
plate damage for the worn-archival look; and a **vector renderer** that emits the
identical geometry as **layered SVG** and **CMYK PDF (with OCG layers)** for the
print shop. Because the seed fixes every choice, an inspiration thumbnail and its
print master are the same image at different sizes.
## Colour, palettes & effects
Black-and-white is the default; colour is an optional, seeded **palette** layer
(`src/render/palette.js`) applied over the same geometry. Shipped feels:
- **mono** (B&W), **charge** (duotone by charge sign), **β** (velocity → spectral)
- **kind** (one hue per particle type), **kindlife** / **kindrise** (type sets the
hue, lifecycle sets the *intensity* — fading to, or rising toward, the death)
- **lifecycle** (hue across birth→death), **psychedelic** (hue cycling along trails)
- **cyanotype** (a full chemistry — blueprint ground + pale ink), **magentarise**
(a restrained magenta-family example with a burnt-orange disk)
Orthogonal global controls: **paper tone** (cream/sepia/selenium/cool/olive/neutral
toners + brightness + gas-glow), **saturation**, **hue shift**, **depth/exposure**
(per-trail opacity, size & defocus from chamber depth + event age), **bubble edge
softness**, **iridescent disk** (spectral sunburst), and **chromatic halo** (a
hue-shifted aura around trails). Adding a new "feel" is one entry in the registry.
## Quick start
```bash
# interactive: open the single self-contained file in a browser
open bubble_chamber.html # type a seed, hit "Derive all params from seed", tweak sliders
# dev build (modular src/ → portable single file)
node build.mjs
# browse random plates, pick by seed, render print masters
tools/inspire.sh 24 600 # → output/inspiration/index.html
tools/render.sh LAMBDA-2648 # → output/masters/ (SVG + CMYK PDF + hi-res PNG)
node tools/render-svg.mjs --seed LAMBDA-2648 out.svg 6000 diskSoften=1.5
```
## Project layout
- `src/` — modular source: `scene/` (the deterministic model), `render/` (canvas /
svg / pdf), `ui/`, `rng.js`, `main.js`.
- `bubble_chamber.html` — built, portable single-file app (live sliders + export).
- `tools/` — headless render helpers, the inspiration randomizer, CLI renderers.
- `output/``inspiration/` contact sheets, `iterations*/` curated SVG sets (with
browsable `index.html`), and `masters/` print files. Raster PNGs and print
masters are **git-ignored** (large and fully reproducible from their seeds).
- **[DESIGN.md](DESIGN.md)** — architecture & physics decisions.
- **[PRINT.md](PRINT.md)** — large-format strategy (vector + texture layers, SVG/PDF layers, sizes/DPI).
- **[roadmap.md](roadmap.md)** — where the project is going, artistically and technically.
## Aesthetic
Faithful black-and-white photographic-positive by default (dark ink on milky
paper), with a "negative plate" variant and an optional colour-palette layer.
Vector-first for print; the seed/hash makes any preview reproducible at any
resolution.