memoryridges
A note pushes the field up in a disc, weighted by velocity. Stripes reorganise around the push at their own fixed spacing, so a phrase leaves a fingerprint of labyrinths.
Eight recordings, from a 1909 sitar 78 to Beethoven's Fifth, became 4K music videos drawn by simulations that the notes themselves disturb. This is how a note becomes a mark, how a song is cast, and what broke on the way.
An audio-reactive visual guesses at music from a waveform. drift doesn't guess. Before a frame is drawn, every note of the piece is timed to the actual recording: when it starts, its pitch, how long it lasts and how hard it is played, filed under the player who plays it.
That is what lets a picture tell a cello from a viola, or know that a phrase is about to end. The picture reads the score at the clock of the recording, one frame at a time.
Sync is gated with a control clip built to be unambiguous: the note stream and the audio line up at 0 frames of lag. On Mozart's serenade, all 17 twenty-second windows matched at 0 ms.
| onset s | pitch | dur s | velocity |
|---|---|---|---|
| 0.0000 | 69 A4 | 1.7307 | 0.300 |
| 1.8305 | 67 G4 | 0.1391 | 0.594 |
| 1.9696 | 65 F4 | 0.1109 | 0.533 |
| 2.0805 | 64 E4 | 0.2409 | 0.474 |
| 2.3214 | 62 D4 | 0.1093 | 0.576 |
Each player is a colony with a home on a ring. A note lands inside its player's colony. Its pitch, placed within the piece's range, sets both the angle around the home and how far out it lands, so a rising phrase sweeps outward and around. Its velocity sets how large and strong the disturbance is.
Colour is harmonic, not decorative. A note's hue is its distance from the recording's tonic, counted in semitones from −6 to +5, plus a fixed offset for its player. Dense pieces get a narrower spread (46° minus up to 28°), so a busy fugue stays in one family of colour while a sparse nocturne ranges wider.
The hue is carried by the material. It lives in its own field and travels as the chemistry spreads and divides, so a cell started by the cello stays a cello cell through its own division.
Players also differ in wake, how long a note's trace lingers: in the Vivaldi, the viola's lasts 4.0 against the pizzicato's 0.9.
Each system is different physics, not a filter over the same picture. What they share is the input: the notes. What differs is what a note does when it arrives. Some seed a chemistry and let it grow, some drop energy into a wave, and two draw nothing from positions at all, only from what is sounding right now.
Each image below is one system alone, run by the engine on a real recording: named, with the moment it was stopped.
memoryA note pushes the field up in a disc, weighted by velocity. Stripes reorganise around the push at their own fixed spacing, so a phrase leaves a fingerprint of labyrinths.
memoryA note seeds a pocket of reagent that divides into spots, worms or coral. Loud strings keep it alive. On a soft nocturne it never takes hold, and it was the cause of the black screens in chapter 5.
memoryA note raises one reagent and eats the other in a disc. Seeds grow with the camera's travel, so each generation nests inside the next.
presentA note releases 30 to 200 agents, more when it's played harder. Each follows the strongest trail it can smell, so notes grow vein networks between each other.
alone onlyA note excites the medium. Wavefronts refuse to cross, so every disturbance winds into a rotating scroll that outlives the note.
memoryA note drops ink into a current that never compresses. The ink is carried and folded, so a melody reads as smoke trails. The sparsest system alone.
presentNo seeds. Each sounding note is a standing wave whose spatial frequency doubles with every octave. Sand gathers where the plate is still, so brightness is the nodal set of the chord being played.
presentNo seeds. One grating per sounding note, multiplied, not summed, because a product is what makes gratings beat. Consonance reads as calm fringes.
memoryEach player lays its own band of sediment in its own colour. Louder music lays down faster and everything rises. Nothing is removed, only buried: the one system that shows a whole piece at once.
presentA note is a hard bar: position from pitch, width from force, held about a beat and gone. No growth, nothing organic; it looks like data being read.
presentA note is a small stone. The drop is kept narrow on purpose: a wide one launches a blob, a narrow one the short wavelengths that read as rings. Built for plucks, metallophones and pizzicato.
presentThe tonic, Sa, sits at the top. A note's pitch class is its angle and its register its radius, and each note draws the arc from the one before, the short way round, the way a glide moves. A held note pools. Built for the raga, where it is the anchor that never leaves; alone it is a sparse, drawn line.
memoryOne turn is one cycle, taken from the bar lines of the recording. A note is a stroke at the angle where it falls in the cycle, on its player's ring. Cycles overlay and barely fade; a faint hand shows now.
not cast yetDiffusion rates, feed, kill and anisotropy are drawn from a hash of the track, then screened before use: 600 steps on a 64 × 64 grid, rejected on variance and coverage, up to 24 rolls. A chemistry nobody wrote.
two systems were cut. Flocking boids and diffusion-limited crystals both failed the same way: the music only seeded them. Boids self-organise into the same swarm whatever you feed them, so two pieces gave two versions of one picture. The pattern has to be a function of the notes, not of its starting points.
A song is cut into sections where the music turns. Boundaries come from musicians' own notes first (the fugue subject entering, the recapitulation), then a tradition's grammar (alap, gongan), and only then audio novelty to fill long gaps. A song gets as many sections as its arcs ask for: three for a 3½-minute concerto movement, five for an 8½-minute toccata and fugue.
Sections alternate between one system alone and a layered set, and the densest stretch is always layered. A layered set is a memory ground with present layers over it, turned apart in hue.
Nothing repeats inside a song unless the music does. A return copies the section it returns to, folded through a mirror. When no unused system can fill a section, the strongest one already used comes back folded and re-hued, spread across systems so no single one returns twice.
How layers meet depends on the ground. difference subtracts: over a sparse ground it draws, over a bright one it cancels. A bright ground takes screen on both layers above it.
| starts | moment | system | how |
|---|---|---|---|
| 0:00 | opening flourish | ridges | alone |
| 2:22 | fugue subject, first entry | strata + scan + moire | layered, screen / difference |
| 4:00 | novelty in the audio | cymatic | alone |
| 4:52 | novelty in the audio | ridges + ripple + slime | ridges returns folded, screen over a bright ground |
| 6:33 | novelty in the audio | cymatic | returns folded and re-hued |


The first full set of videos had empty screens. Chopin went black from 1:20, the gamelan from 2:00. The director had given those sections to cells from a fallback list, and on a soft nocturne or a 1931 field recording, cells never seeds.
Now, before a system gets a section, the engine runs it on that section's own audio, entering at the section start exactly as the video will, and measures how much of the frame is lit. A system carrying a section alone, or a layered ground, needs 20%. A layer on top needs 6%.
The first version of the test lied. It ran at thumbnail size, where the grid is only 200 cells and cells looked 21% lit; at the 4K grid it was under 1%. The test now runs at the smallest size that uses the same 1000-cell grid as 4K.
| recording · section | system | lit |
|---|---|---|
| chopin · 0:00–1:20 | cells | |
| chopin · 0:00–1:20 | ridges | |
| bach · 0:00–2:22 | cells | |
| bach · 0:00–2:22 | ridges | |
| beethoven · 0:00–1:42 | cells | |
| beethoven · 4:56–6:38 | cymatic | |
| gamelan · 1:59–2:56 | flow | |
| mozart · 0:00–1:40 | bloom |


the test isn't the last word. It measures a system raw; the video hue-shifts and folds it. The gamelan's flow passed at 9% and showed 0 to 3% on screen. Debussy's cymatic passed with a median of 44% and strobed to black between swells. Strata alone scored 33% and rendered with a brightest pixel of 31 out of 255. So every finished video is sampled again (chapter 7), and a system that fails there is barred from that section in pieces/avoid.json.
Every layer is its own copy of the engine on its own worker thread, with its own state, stepped against one clock: seconds into the recording. On a ten-second Vivaldi clip, worker layers ran at 25.1 frames per second against 12.55 in the old one-thread path, with pixel-identical frames.
The video opens on the title card, in the style of a Bauhaus poster. Every change slides right to left, the card's exit included; the only fade is to black at the end. Layers for an upcoming section run six seconds early, unseen, so a field is already alive when it slides in.
The camera moves the field, not the image. Warping the simulation lets the chemistry regenerate detail, and a slower view scale runs from 1× to 2× and wraps, invisible because the field is a seamless tile. One cycle takes about 36 seconds; a loud onset only nudges it.
one camera cycle · 36 s



Screen recording is a race between simulation, encoder and compositor, and at 4K the encoder wins by dropping frames. drift renders offline: the clock steps by hand, each finished frame goes to a hardware H.264 encoder with an explicit timestamp, and the frame count is checked against the edit before audio is added.
A 4K render holds a lot of memory for a long time on a 16 GB machine. Renders run one at a time, and a guard stops one only when the kernel reports critical memory pressure for 30 seconds running.
Then the finished video is sampled, every 2 seconds for anything doubtful, and each section's lit share is read off real frames. That pass caught what the test missed: Beethoven's coda at 3 to 15% lit (difference cancelling a bright ground, now 61 to 100%), and Debussy twice.
| piece | performers | length | frames |
|---|---|---|---|
| Bach, Toccata and Fugue BWV 565 | Ashtar Moïra, organ | 8:38 | 31,054 |
| Beethoven, Symphony No. 5, i | Skidmore College Orchestra | 8:24 | 30,245 |
| Mozart, Eine kleine Nachtmusik, i | Advent Chamber Orchestra | 5:59 | 21,565 |
| Debussy, Clair de lune | Laurens Goedhart, piano | 5:08 | 18,485 |
| Chopin, Nocturne Op. 9 No. 2 | Martha Goldstein, piano | 4:17 | 15,428 |
| Vivaldi, Winter, i | John Harrison, Wichita State Univ. Chamber Players | 3:33 | 12,770 |
| Sitar Ki Gat, Jaunpuri alap | Imdad Khan, sitar, 1909 | 3:31 | 12,634 |
| Lagu Kebiar | gamelan gong kebyar, Bali, 1931 | 3:00 | 10,804 |


The first Winter cut a new system for every moment and put each player on a board of its own. The board went: its cells cropped the action away, and a player's cell went dark whenever they rested. Kesava's review rules shaped every edit since: few changes, never an instant cut, a small palette used in combinations; then as many sections as the song needs, nothing repeated, every change sliding right to left, and a camera cycle of at least 30 seconds.
Each draft was judged on contact sheets, many frames of a render on one page, stepped at 60 fps because every system advances per frame: a sheet sampled at 12 fps shows a different chemistry from the video.



