Three browser instruments for making records that carry two channels: one that plays for anyone, and one that opens with a key.
They are made by Zariia, a music label whose records hold a sealed second channel. The released track plays for everybody and sounds whole. Held with the key, a second channel unlocks and plays in sync, and that is the complete work. These instruments produce both channels at once, sample for sample, from a single performance.
You do not need the label to use them. They are ordinary audio instruments and they run in a browser with nothing installed.
| port | ||
|---|---|---|
| the-firing | granular synthesis on one body of sound | 8123 |
| the-stepwell | wave terrain synthesis on still water | 8124 |
| the-zellij | latent mosaicing through a neural codec | 8125 |
the-firing is 0.2.0, the-stepwell 0.1.1, the-zellij 0.1.0. VERSIONING.md says what that means. ROADMAP.md says where they are going, which is toward fewer controls rather than more: these develop into a minimal interface as records are made on them.
Node 18 or newer. Nothing to install.
node the-firing/serve.mjs # → http://localhost:8123
node the-stepwell/serve.mjs # → http://localhost:8124
node the-zellij/serve.mjs # → http://localhost:8125/the-zellij/🔴 They must be served over http, not opened as files. The microphone and AudioWorklet
both require a secure context; localhost counts as one and file:// does not. Opened as a
file the page loads, looks entirely correct, and can neither hear you nor capture a take —
which is a confusing way to fail, so it is worth saying twice.
Allow the microphone when asked. Headphones are worth it: two channels are playing at once and speakers will feed one back into the other.
Every instrument writes two WAV files of identical length, so they line up when played together.
- The open track is what anybody hears. Gold, everywhere, in all three.
- The sealed channel is what the key adds. Ember, everywhere, in all three.
- Teal means placed but silent — audible to nobody yet.
The colours never change between instruments. A maker should not have to relearn them.
Only one microphone button in each instrument puts you on the record, and it says so on the button. Monitoring is monitoring. The open track has to carry the voice exactly once.
Capture is always WAV, never compressed. The open track must be lossless, because the Zariia carrier copies FLAC frames byte for byte and the song sounds identical is a claim the label makes in public. A compressed capture would quietly make that false.
Every instrument offers an overlay take, which sums a pass onto the last rather than replacing it. A first pass can be a poem alone on the open track; a second can add only to the sealed side.
They are siblings rather than one page three times. The firing is fired clay, warm, worked with heat. The stepwell is water, cold, with sandstone above it. The zellij is glaze — jewel colour on a near-black body, which is what zellij actually looks like. Different grounds, different primary gestures, one hand.
What is shared is the channel language, the capture format, and the refusal to make you learn a new vocabulary per instrument.
./make-zip.sh the-firing ~/somewhereThis builds a self-contained zip with its own recipient-facing README. It then unpacks what it just wrote, serves it, and checks that it answers before reporting success — because a zip that does not run is the ordinary way this fails, and it fails after it has been sent.
AGPL-3.0-or-later. See LICENSE.
The AGPL rather than the GPL because these run over a network. If you host a modified version somewhere people can use it, they are entitled to your source. Using the instruments to make music imposes nothing on the music: your recordings are yours, and nothing in this licence reaches them.
The bundled fonts are under the SIL Open Font Licence; see OFL.md beside them.
the-firing/material/starter.wav is synthesised by make-starter.py from nothing but the
Python standard library, so it carries no third-party rights.
Written by Prayas Abhinav for Zariia.
The zellij uses Kyutai's Mimi neural codec, fetched from Hugging Face on first use and then cached by the browser. Nothing is uploaded; the audio never leaves the machine.