2026-06-02 20:32:41 -04:00
2026-06-02 19:17:19 -04:00
2026-06-02 20:32:41 -04:00
2026-06-02 20:32:41 -04:00
2026-06-02 20:32:41 -04:00
2026-06-02 20:32:41 -04:00
2026-06-02 20:32:41 -04:00
2026-06-02 19:17:19 -04:00
2026-05-20 16:53:23 -04:00
2026-05-20 16:53:23 -04:00
2026-06-02 19:17:19 -04:00
2026-05-26 10:23:50 -04:00
2026-05-20 16:53:23 -04:00
2026-05-20 16:53:23 -04:00
2026-05-20 16:53:23 -04:00
2026-05-21 05:59:44 -04:00
2026-05-22 07:50:39 -04:00

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

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

# 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 — architecture & physics decisions.
  • PRINT.md — large-format strategy (vector + texture layers, SVG/PDF layers, sizes/DPI).
  • 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.

Description
No description provided
Readme 1.2 GiB
Languages
JavaScript 60.5%
HTML 38.3%
Shell 0.7%
CSS 0.5%