Lumen is a collection of twelve generative-art pieces written in vanilla JavaScript with the raw Canvas 2D API — no frameworks, no libraries, no shortcuts. Flocking birds, combable lattices, audio-reactive rings, a hand-rolled 3D sphere. Built with Claude Code, and playable right here on this page.
A sixty-second reel of the collection in motion — every study captured live, then cut to the Prompt Atelier house style.
These are the actual pieces running live, not recordings. Each responds to your pointer — and most carry a control panel (top-left) for palettes, sliders, reseeding and PNG export.
Every flock, ripple and glow is computed by hand — position by position, frame by frame. That constraint is the point: when nothing is abstracted away, the agent has to actually understand the math, and you end up owning every line.
Three families of four: reimagined course techniques, flow-and-flock systems designed from scratch, and rebuilds sparked by a fellow student's work. Every card opens the real piece.
Curated palettes, simplex drift, glow lighting — with sliders and PNG export.
Lines carved from a photograph's luminance; the pointer sends springy ripples through the cloth.
Photos dissolved into full-color particles — brush through them, shatter and reform.
Radial frequency arcs and a waveform ring — feed it your microphone or drop in a song.
Hundreds of boids with a spatial hash; click to switch your pointer from predator to lure.
Ink particles etching permanent trails — leave it minutes and it develops a photograph.
Click to plant; branches grow with noise curvature; a seeded Regrow replays your garden.
A fibonacci sphere with rotation and perspective projection — no libraries. Drag to spin.
A seeded mandala with a symmetry dial — 1.0 is a kaleidoscope, 0 lets every slice go feral.
Bouncing stars with proximity threads; your pointer's gravity gathers or scatters on click.
A grid of strokes turned by simplex noise — and combable: the pointer parts it like fur.
Your photos retyped in katakana, latin, digits or density — quietly shimmering as it retypes.
The real engineering isn't in any single piece — it's in the shared library underneath, built once and reused everywhere.
Every composition is reproducible: the same seed always paints the same picture. That's what makes "Reseed" and Bloom's "Regrow" possible — art you can replay.
One noise implementation drives Silk's wind, Undertow's currents, Weave's turns, Meridian's storms and Halo's drift — five different feelings from one function.
One tiny sketch.js handles retina scaling, resize and the animation loop for every piece — so each study is only its idea, not its plumbing.
Murmuration's flock stays at 60fps because each boid only looks at neighbors in its grid cell — a classic optimization the agent had to implement, not import.
Undertow skips the canvas clear entirely — the piece accumulates, etching itself over minutes like a photographic plate developing.
Meridian projects a fibonacci sphere through hand-written rotation matrices and perspective division — 3D as math, not as a dependency.
These pieces didn't appear from nothing, and pretending otherwise would be against the house rules. The techniques were first explored in Bruno Imbrizi's Domestika course Creative Coding 2.0 in JS, with a second wave sparked by experiments across brunoimbrizi.com and a fellow student's course repo. Everything here was then redesigned and rewritten from scratch — new compositions, new interactions, new code — which is exactly how creative coding has always worked: you learn a technique, then you make it yours.