← Work

Jamarama

Four phones, one shared clock, one fused track.

Role  Audio architecture, jam system Award  Winner, Audiotool Challenge Venue  Google DeepMind Magenta Hackathon Date  June 2026 Stack  Tone.js, WebSocket, Node, Python, MLX

Two to four people scan a QR code and each take one dimension of a single piece of music — drums, harmony, lead, or crowd energy. Nobody plays their own track. They play one track together. The signature moment is that one player moves to a new chord and the whole band re-roots around their choice on the next downbeat.

A non-musician can contribute meaningfully in about ten seconds, which was the point. The pitch was the aux war, solved: instead of fighting over the music, everybody plays at once and your taste is your instrument.

The clock is the whole problem

The hard part of a shared instrument is not the sound. It is agreeing on when. I put the master clock in the host browser and made everything else follow it, fanning beats out over WebSocket to phones acting as thin controllers.

That still leaves the player holding a phone that has to feel like an instrument. So the lead keyboard fires its own tone locally, in under 20 milliseconds — the note sounds immediately, and the network catches up afterwards to tell everyone else about it. You never wait on a round trip to hear yourself.

Measuring the model instead of trusting it

We wanted a generative model in the mix. Before building anything around it, I tested whether it could hold tempo.

It cannot. There is no tempo input to the model at all, and a primed on-grid loop drifts audibly within about thirty seconds.

So the model came off the clock entirely. What shipped is a deterministic, clock-locked band — drums, chords, lead, all ours, all on one clock — wrapped in an arhythmic generative texture layer that floats free of the grid. Drift in an atmospheric wash has no downbeat to be late against, so it stops being an error and starts reading as room sound.

Every voice splits into a brain and a voice: the note-choosing logic is always deterministic and ours, and the generative model only ever paints atmosphere or renders notes we already chose. It never picks a note and nothing rhythmic is slaved to it.

Running the model on the machine

The texture layer runs Magenta RealTime 2 locally on Apple Silicon through MLX at roughly 2.37× real-time, conditioned on blended player taste, the live chord, and crowd energy, streaming through a queue-fed output that the OS mixes with the browser band. Players describe what they are into when they join; those descriptions are fused into the style conditioning, so the texture is literally made of everyone's taste at once.

Credits

Built over a weekend with one collaborator, who handled the lobby and onboarding. I led the audio architecture and the jam system. Won the Audiotool Challenge.