Private beta · open invites every Friday

Finished tracks.
From a conversation.

Zigzag is an AI-assisted audio engineering tool that produces finished tracks from scratch — the full audio stack, composition to waveform. Describe what you want; the AI composes the parts, dials the mix, masters the master, and gives it back as a track ready to release.

Conversational sessions Multitrack mixing Mastered to release Reproducible by design

Featured render

A track. Rendered from text.

Every note, mix decision, and effect on this track lives as text in the project tree. Edit a line, re-render, hear the change.

Hear it work

From a single interval to a finished track.

The same engine that rendered the track above gets the fundamentals exactly right. Press play on any one — every pitch is a function of the project, so what you hear is what was written.

Projection

The idea under everything here: a line of numbers carries no meaning until it is read through a context — so the same line becomes a melody or a harmony, moves the key, reshapes under the transform algebra, or gates another line.

one line · melody or harmony 21 s · 90 bpm · the numbers 1 5 6 4, read two ways
0:00 / 0:21
↗ share / download
modes in motion · one phrase recolored 12 s · 90 bpm · the scale shifts every bar
0:00 / 0:12
↗ share / download
key in motion · one shape, four keys 11 s · 90 bpm · the root moves C, F, G, C
0:00 / 0:11
↗ share / download
pan in motion · a tone swept across the field 5 s · 90 bpm · left, across to right, and back
0:00 / 0:05
↗ share / download
constrain · a run snapped to a scale 20 s · 100 bpm · chord tones, then pentatonic
0:00 / 0:20
↗ share / download
one motif, the transform algebra 29 s · 100 bpm · inverted, mirrored, rotated
0:00 / 0:29
↗ share / download
one motif, retimed 30 s · 100 bpm · stretched, tripletized, spread
0:00 / 0:30
↗ share / download
gating · one line shaped by another 23 s · 100 bpm · steady, thinned, then gated
0:00 / 0:23
↗ share / download

Intervals

Two notes a fixed distance apart — the atoms of melody and harmony. The distance is never stored; it emerges from where two degrees land in a scale. Start with the ladder; the complete tour names and plays all 144.

intervals · the diatonic ladder 11 s · 90 bpm · root struck before each step
0:00 / 0:11
↗ share / download
intervals · the complete tour 12 min · all 144 · spoken, then melodic & harmonic, slow
0:00 / 11:58
↗ share / download

Scales

The context a line is read through: the same ascending degrees become major, minor, or any of the seven modes — only the scale beneath them changes.

major scale · up and down 11 s · 90 bpm · C major, one octave
0:00 / 0:11
↗ share / download
minor scale · up and down 11 s · 90 bpm · C natural minor, one octave
0:00 / 0:11
↗ share / download
the seven modes 48 s · each mode played from C, announced
0:00 / 0:47
↗ share / download

Chords

The same move, stacked into harmony: one voicing read against a scale sets a chord's quality, and a line of degrees spells a whole progression. The notes are stacked, but the quality comes from the context.

triads · major, then minor 7 s · 90 bpm · C major chord into C minor
0:00 / 0:07
↗ share / download
a cadence · I–IV–V–I 12 s · 90 bpm · triads in C major, one per bar
0:00 / 0:12
↗ share / download
chord qualities 30 s · major through half-diminished, all on C
0:00 / 0:30
↗ share / download
chords as harmony lines 37 s · progressions written as a line of chord degrees
0:00 / 0:37
↗ share / download

Repetition & variation

One motif, then variations derived from the same line — repeated, reversed, transposed. The source never moves; each variation is just another way of reading it.

one motif, transformed 21 s · repeat, reverse, transpose
0:00 / 0:21
↗ share / download

Combination

The other way sounds relate — not one line read through a context, but several sounds stacked at once. One motif layered against itself, voice by voice, until a single line fills out into a full texture: the concurrent counterpart to playing notes in turn.

one block, layered 17 s · 100 bpm · a motif, then voices stacked on top
0:00 / 0:17
↗ share / download

Song form

The last rung of the ladder: a whole song's structure is one line of numbers read through a short list of sections — so reversing the line reorders the song, the way reversing a melody flips its notes.

song form · as written 21 s · 90 bpm · verse–chorus–verse–chorus–verse–bridge
0:00 / 0:21
↗ share / download
song form · reversed 21 s · 90 bpm · bridge–verse–chorus–verse–chorus–verse
0:00 / 0:21
↗ share / download

Voices

An arrangement is a grid — one row per voice, one column per moment. Reading down stacks the voices that sound together; reading across is time. So reversing the grid flips every voice back to front at once, the way reversing a melody flips a single line.

voices · as written 10 s · 100 bpm · a rising line over a steady bass
0:00 / 0:10
↗ share / download
voices · reversed 10 s · 100 bpm · the same grid, flipped end to end
0:00 / 0:10
↗ share / download

One phrase

A part is a brick. Take one short phrase and play it at different pitches — a third up, a fifth, an octave — and the single idea climbs into a melody. The sampler's oldest trick, with a whole phrase in place of a note.

one phrase · one pitch 8 s · 100 bpm · the same phrase, four times
0:00 / 0:08
↗ share / download
one phrase · a melody 8 s · 100 bpm · the same phrase, climbing in key — a fourth, a fifth, an octave
0:00 / 0:08
↗ share / download

Triplet feel

One operation turns each pair of cells (a, b) into a three-cell ripple (a, b, a) and shortens them to hold the time — straight twos become rolling threes. On a scale it is a triplet run; on a beat, a galloping shuffle — the same move on both, because both are the same grid underneath.

a scale, straight 7 s · 90 bpm · up to the octave and back
0:00 / 0:07
↗ share / download
the same scale, in triplets 7 s · 90 bpm · straight eighths → triplets
0:00 / 0:07
↗ share / download
the beat, in triplets 11 s · 90 bpm · straight grid → gallop
0:00 / 0:11
↗ share / download

Pull the hook out

A long phrase carries one memorable window. A scale keeps trying to fall home, gets snapped back to the top, and finally lands a clean run all the way down — and that closing run, lifted out, stands on its own as a hook; looped, an ostinato. The source never changes; the extract is just another way of reading it, shorter.

descent · keeps slipping back 6 s · 90 bpm · pulled back to the top, then home
0:00 / 0:06
↗ share / download
descent · just the run home 3 s · 90 bpm · the closing run, lifted out
0:00 / 0:03
↗ share / download
descent · that run, looped 11 s · 90 bpm · the lifted run, four times around
0:00 / 0:11
↗ share / download

Move one note

Take a plain scale and lift a single note up — only that note moves; every other one stays exactly where it was. Then lift a few the same way and the line turns into a rolling ornament. A surgical edit, one targeted note at a time, the source never rewritten.

ornament · the plain line 3 s · 100 bpm · a scale, every step in order
0:00 / 0:03
↗ share / download
ornament · one note lifted 3 s · 100 bpm · the same scale, a single note raised
0:00 / 0:03
↗ share / download
ornament · a few, lifted the same way 3 s · 100 bpm · alternating steps raised into a roll
0:00 / 0:03
↗ share / download

Timbres

The same scale read through four different voices — from a bare sine to a warm detuned chorus. The notes never change; only what sounds them does.

synth · bare sine C major scale · iteration 1
0:00 / 0:07
↗ share / download
synth · + envelope C major scale · iteration 2 · soft attack & sustaining body
0:00 / 0:07
↗ share / download
synth · + vibrato C major scale · iteration 3 · 5 Hz pitch wobble
0:00 / 0:07
↗ share / download
synth · + detune C major scale · iteration 4 · three-saw chorus, lowpassed for warmth
0:00 / 0:07
↗ share / download

Drums & rhythm

Lines read as rhythm instead of pitch — a beat built up layer by layer, classic patterns, and the click that holds it together.

808 + hi-hat 2 bars · 90 bpm · closed hat
0:00 / 0:05
↗ share / download
808 + hi-hat · open 2 bars · 90 bpm · open on the offbeat
0:00 / 0:05
↗ share / download
808 + hi-hat + bass 2 bars · 90 bpm · root F on the downbeat
0:00 / 0:05
↗ share / download
click · 4-count count-in 4 bars · 90 bpm · spoken cues over the click
0:00 / 0:11
↗ share / download
rhythmic patterns 100 s · steady pulse + kick patterns, then a big finale
0:00 / 1:39
↗ share / download

Studio moves

Production in motion — sidechain pumping, buses chained into buses, two lines fused point for point, and a scale derived from another.

pump · kick crunching the pad chord 16 bars · 116 bpm · sixteenth-note kicks · A major low pad
0:00 / 0:33
↗ share / download
pump · + walking sub-bass on I-IV-I-V 16 bars · 116 bpm · sub-bass arpeggio · also sidechained
0:00 / 0:33
↗ share / download
a bus into a bus into a bus 16 s · 90 bpm · three mix buses in series
0:00 / 0:16
↗ share / download
combine · two runs, three fusions 15 s · 120 bpm · ascending + descending → add / max / min
0:00 / 0:15
↗ share / download
lydian · derived from major 11 s · 100 bpm · same melody in G major, then derived G Lydian
0:00 / 0:11
↗ share / download

48 examples · scroll for more · more added as the library grows

Structure is data

Reverse a song the way you'd reverse a melody.

A song's structure is just a line of numbers — one per section. The same move that turns a line into a scale or a chord progression turns this one into verse, chorus, and bridge. So the shape of a whole song is as editable as a four-note phrase.

the line reads through three parts 0 verse 1 chorus 2 bridge
as written verse · chorus · verse · chorus · verse · bridge
song form · as written 21 s · 90 bpm · verse–chorus–verse–chorus–verse–bridge
0:00 / 0:21
↗ share / download
reversed bridge · verse · chorus · verse · chorus · verse
song form · reversed 21 s · 90 bpm · bridge–verse–chorus–verse–chorus–verse
0:00 / 0:21
↗ share / download

Same sections, same instruments — nothing rebuilt. One move on the line and the whole song reshapes. It's the last rung of the same ladder: a single interval, a scale, a chord, a motif — and now the structure of the song itself, all addressable the same way.

The beat is data

Reshape a beat the way you'd reshape a melody.

A groove is a grid of hits — one row per drum, one column per moment. The same reverse and rotate that reorder a phrase reorder the beat, and the new beat points back at the source — so the original stays the thing you edit.

three drums, one bar of sixteenths kick snare hat
as written kick syncopated · snare on 2 and 4 · steady hat
groove · as written 11 s · 90 bpm · kick, snare, hat — one bar, four times
0:00 / 0:11
↗ share / download
reversed every hit mirrored · snare off the backbeat
groove · reversed 11 s · 90 bpm · the same beat, played back to front
0:00 / 0:11
↗ share / download
rotated a beat bar turned one beat later · snare on 1 and 3
groove · rotated a beat 11 s · 90 bpm · the bar turned one beat later
0:00 / 0:11
↗ share / download

Same three drums, the same handful of hits — reversed, then turned a beat later. Nothing re-recorded; each is a derived reading of the one grid up top. The beat joins the melody, the chord line, the song's form, and the stack of voices: all reshaped by the same moves, because underneath they're the same grid of numbers.

One move, two worlds

Swing a scale the way you'd swing a beat.

Triplet turns each pair of cells (a, b) into a three-cell ripple (a, b, a) and shortens them to hold the time — straight twos become rolling threes. On a scale that's a triplet run; on a beat, a gallop. One move, because both are the same grid underneath.

on a scale → a triplet run
as written a major scale, up to the octave and back · straight eighths
a scale, straight 7 s · 90 bpm · up to the octave and back
0:00 / 0:07
↗ share / download
in triplets the same run, every pair rippled to three
the same scale, in triplets 7 s · 90 bpm · straight eighths → triplets
0:00 / 0:07
↗ share / download
on a beat → a gallop
three drums, one bar kick snare hat
as written straight sixteenths · the groove as a grid
groove · as written 11 s · 90 bpm · kick, snare, hat — one bar, four times
0:00 / 0:11
↗ share / download
in triplets every pair rippled to three · a galloping feel
the beat, in triplets 11 s · 90 bpm · straight grid → gallop
0:00 / 0:11
↗ share / download

The scale and the beat never met the same code path before this — yet one operation pushed both from straight time into triplets, because a run of pitches and a row of drum hits are the same thing underneath: a grid of numbers on a clock. Define a move once and it reaches every dimension at once. That is the whole bet — composition as algebra, not a pile of special cases.

Pull the hook out

Lift the part that lands out of the part that fights to get there.

A scale keeps trying to fall home and keeps getting snapped back to the top — until one steady run finally makes it all the way down. That closing run is the hook. Keep just that window and it stands on its own; loop it and it drives.

the whole phrase → keeps slipping back
as written every try gets pulled back to the top — then one clean run home
descent · keeps slipping back 6 s · 90 bpm · pulled back to the top, then home
0:00 / 0:06
↗ share / download
the hook that closing run, lifted out — a clean descent home
descent · just the run home 3 s · 90 bpm · the closing run, lifted out
0:00 / 0:03
↗ share / download
the hook, looped the lifted run set spinning — an ostinato
descent · that run, looped 11 s · 90 bpm · the lifted run, four times around
0:00 / 0:11
↗ share / download

Nothing here was re-written. The hook is the same eight notes that close the phrase — kept, while everything before them is set aside; and the loop is that window said again. A phrase is a row of numbers on a clock, so a window into it is just another reading of the same source: shorter, pointing at the same idea, ready to build on. Pull a piece out, then make something of it.

Move one note

Lift a single note and leave every other one exactly where it was.

Start with a plain scale. Raise one note — only that note moves; the rest are untouched. Then make the same move on a few notes and the line blooms into an ornament. A surgical edit, one note at a time, never a rewrite.

the plain line → one targeted lift at a time
the line a scale, every step in order — nothing touched yet
ornament · the plain line 3 s · 100 bpm · a scale, every step in order
0:00 / 0:03
↗ share / download
one note lifted the sixth step raised to the top — everything else identical
ornament · one note lifted 3 s · 100 bpm · the same scale, a single note raised
0:00 / 0:03
↗ share / download
a few, the same way every other step lifted — the line turns into a roll
ornament · a few, lifted the same way 3 s · 100 bpm · alternating steps raised into a roll
0:00 / 0:03
↗ share / download

Nothing was re-written between these. Each is the plain scale with a lift declared on top — pointed at one note, then at a handful. The notes that aren't named never move a hair, which is the whole point: you can reach into a line and color a single note, and know with certainty that everything around it is left exactly as it was. The decoration lives in what you change, not in a new copy of the line.

Voices are a grid

Reverse every voice at once, the way you'd reverse one melody.

A melody is a line of numbers. Stack a few lines and you have a grid — the voices of a whole arrangement, across is time and down is what sounds together. The same move that flips a melody flips the entire grid: every voice reverses with it.

two voices on one grid lead climbs the arpeggio bass holds the root
as written the lead steps up · do mi sol do
voices · as written 10 s · 100 bpm · a rising line over a steady bass
0:00 / 0:10
↗ share / download
reversed the same line, now falling · do sol mi do
voices · reversed 10 s · 100 bpm · the same grid, flipped end to end
0:00 / 0:10
↗ share / download

Same voices, same notes — nothing rebuilt. One move on the grid and every line turns back to front at the same instant. It's the projection idea in two dimensions: across is time, down is the voices that play together, and the whole arrangement is as addressable as a single phrase.

One phrase, many pitches

Build a melody from a single phrase.

Write one phrase. Then play it higher — a fourth, a fifth, an octave — and the same idea climbs into a melody, in key the whole way. One part, repitched, is a whole line: the sampler's oldest trick, with a phrase in place of a note.

the same phrase, four times one idea, repeating — the raw material
one phrase · one pitch 8 s · 100 bpm · the same phrase, four times
0:00 / 0:08
↗ share / download
one phrase, climbing root · a fourth · a fifth · an octave up
one phrase · a melody 8 s · 100 bpm · the same phrase, climbing in key — a fourth, a fifth, an octave
0:00 / 0:08
↗ share / download

The phrase never changes — it's one idea. Lifting it in pitch is the only move, and the four copies climb in key — a fourth, a fifth, an octave home — so a single part becomes the tune. The same thing a finished phrase does when it turns into an instrument: composed once, then played at any pitch.

Who this is for

If you want one prompt to one song,
this isn’t that.

If you want to type a sentence and get back a finished pop song — with vocals you didn’t write, in a key you didn’t pick, on a beat you didn’t choose — there are tools that do that beautifully. Zigzag isn’t trying to be any of them.

Things a prompt-to-song model is great at

  • Writing your lyrics for you.
  • Picking your key, tempo, and chord progression.
  • Singing the song in a voice you didn’t choose.
  • Mastering the result before you’ve heard the parts.
  • Generating ten variations before you’ve decided on one.

If any of those sound like the deal you’re looking for, those are real, well-built products. Genuinely — go try one:

A prompt-to-song tool

We’ll be over here, in the room where every parameter still has a hand on it.


Zigzag is a DAW for an AI.

The AI controls every layer of the machine — every bit of every sample of every signal of every channel, all the way up through synthesis, effects, mixing, mastering, arrangement, motifs, rhythms, keys, scales, repetition, harmony, and structure.

You direct at whatever level fits. Hand it a sentence and get a full track; or work down to a per-sample envelope curve. Same surface.


For anyone who wants to make the sound — not guess at it.

If you want to use a computer to create a sound file — and you care how it's made, every decision yours rather than a model's guess — that's the thread. Not a job title: the actual audio, built deliberately, with AI's leverage at every layer and your hands still on the controls. Today that artifact is a finished WAV you own.

It tends to land with producers, musicians, composers, coders, and sound designers — but the point isn't the role. It's wanting to make the thing, not order it.

What this is

An audio engineering studio with every engineer inside —
not another text-to-audio model.

Zigzag is two things. It’s a body of text — human-readable and machine-readable, fully source-control compatible — that compiles, deterministically, into every sample of every signal of every channel of the finished, mastered audio. And it’s a set of tools that make that text easy for an AI to read, reason about, and rewrite as you direct.

Generative models guess.

Zigzag composes.

Text-to-audio models are giant pre-trained weights — you write a prompt, audio comes out, the "what" of the music lives in the model. Zigzag is a project of human-readable text that deterministically renders to audio. Every musical decision is something you can read, diff, and refine.

The render isn’t the artifact.

The project is.

A finished mix is what a binary is to a compiler — a build output. What you keep, share, and iterate on is the directory: the chord progression, the instruments, the arrangement, the mix. Re-renderable, reproducible, content-addressable.

You direct it.

The AI conducts.

Speak in any vocabulary the studio uses — synths, reverb, sidechain compression, intervals, arpeggios, repetition, transposition. The agent is fluent in all of them: engineer, musician, director, conductor, producer, encapsulated. You direct; it writes the project; the engine renders.

It’s not AI making the music.

It’s AI making the program that makes the music.

Every sample of PCM in a render is determined algorithmically — by the patterns you wrote, the modulators you wired, the FX chain and arrangement you composed. The agent’s job isn’t to guess audio; it’s to author the deterministic program whose execution yields the audio. Reproducible. Readable. Refinable line by line.

A DAW for the agent

The whole room,
shrunk into the computer.

Synthesizers defined in code. Routing and effects without limit. Event data like MIDI, with monadic composition and transformation of musical ideas. Completely deterministic: every sample of every render is a function of the project — not a guess from a model.

Variations of variations

Declare a theme once. Derive everything else with composable transformations of pitch, time, shape, and accent. Variations can name variations as their source — they compose all the way down.

Every parameter is an expression

LFOs, envelopes, and automation lanes combine with arithmetic — drive a pad with a slow fade modulated by a rhythmic gate. Knobs are formulas, not single values you have to ride.

Stereo-aware effects

Every effect carries a channel side: left, right, or both. A right-side delay yields Haas-style width with no special-casing. Stereo is a property of the chain, not an afterthought.

Sidechain & studio mastering

Classic pump-and-duck compression on any track keyed by any other. A studio-grade multiband splits the signal into bands, compresses each independently, sums them back — house-music glue or transparent mastering on tap.

Voice as an instrument

A spoken clip synthesizes text into audio at render time — inline announcements, click-track callouts, spoken lyrics. Choose a voice from the catalog; swap engines without rewriting the project.

Hot-reload your mix

Watch mode re-renders only what changed and hot-reloads playback. Edit a filter cutoff, save, hear it a second later. The development loop you wish your DAW had.

Send / return busses

Short room verb. Long hall. Per-track sends, ducked by per-bus FX. The classic mixing topology — declared in plain text, summed inside the engine.

Built-in mix analysis

LUFS · true-peak · DR. Per-band stereo width. Onset timing. Anomalies — clip bursts, DC offset, channel asymmetry. The agent reads the report before it touches the mix — and after.

Incremental everything

Every clip and intermediate is keyed by content. Identical inputs become an instant cache hit. A render is instant when nothing changed, partial when little did, and never wastes a sample on what you already heard.

The full audio stack

Composition to waveform.
Every layer in between.

Zigzag isn’t pinned to one layer of the studio. The project contains the music as composition, as arrangement, as event data, as synthesis, as signals, as a mix, as a master, and as the final waveform — all at once, all derived from one source. Because every layer is real and addressable, Zigzag can read from — and write to — any tool that lives anywhere along that stack.

The stack · top to bottom
  1. 01 Composition motifs · keys · scales · structure
  2. 02 Arrangement sections · timeline · transitions
  3. 03 Patterns rhythms · phrases · variations
  4. 04 Event data notes · velocities · automation
  5. 05 Instruments synths · samplers · voices
  6. 06 Signals oscillators · noise · modulators
  7. 07 Effects filters · reverb · delay · sidechain
  8. 08 Mix busses · sends · stereo placement
  9. 09 Master crossovers · multiband · loudness
  10. 10 Waveform every sample of every channel

One project; ten descriptions of the same music. A change at the top propagates all the way to the last sample; a change near the bottom never silently disagrees with the score.

Formats read · write · transcode

Speaks the formats the studio already speaks.

WAV in and out, any common sample rate and channel layout, transcoded to whatever your delivery target needs. MIDI in and out, so event data crosses the boundary intact. ABC in and out, so the notation crosses too. Audio is audio; events are events; notation is notation — Zigzag knows the difference and preserves each one.

WAV read · write · transcode MIDI read · write ABC read · write
Your DAW both directions

Front of the pipeline. End of the pipeline. Anywhere in between.

Bring a project in from the DAW you already use — and pick up where it left off, with the agent on it. Or build the track in Zigzag and hand the project back out to your DAW to finish by hand. Stems, MIDI, arrangement — whatever crosses the boundary, crosses cleanly. Zigzag fits the workflow you already have; it doesn’t ask you to leave it.

Your DAW
Zigzag
Your DAW

The project tree

Open the project.
Read the music.

A Zigzag project is a directory of plain-text source. Show me the project is now a question with an answer. So is what changed? — every commit is a production diary entry, every mix decision a line you can read out loud.

Source
Plain text
Cache
By content
Output
48 kHz stereo
project · showcase
showcase # the project — versioned, shareable, deterministic
├─ project # tempo · sample rate · channels
├─ arrangement # the timeline · what plays when
├─ chords # the harmonic backbone
├─ instruments/
│ ├─ banjo
│ └─ bodhrán
├─ drums/
│ └─ kit
├─ variations/ # themes deriving themes
│ ├─ bass · half-time
│ └─ pad · chopped & wider
├─ effects/ # reverbs · filters · compression · delays
├─ modulators/ # every parameter is a formula
├─ busses/ # short room · long hall · returns
├─ master · render ← build output, content-addressed
└─ cache · incremental ← keyed by what changed; nothing re-rendered without reason

Direction → conducting

You direct.
The AI conducts.

People ask "what prompt did you use?" — but that question doesn’t quite fit. You speak in synths and intervals, reverbs and arpeggios. The agent is fluent in all of it — engineer, musician, director, conductor, producer — and writes the project to match. The result isn’t guessed; it’s constructed, decision by decision.

01 Drums · 808 + hi-hat
you
Hi, I want to hear an 808 with a hi-hat pattern.
zigzag · engineer
808 + hi-hat 2 bars · 90 bpm · closed hat
0:00 / 0:05
↓ wav ↓ midi
search_universe "808 kick" · sub-heavy
3 matches in the Universe
kick-808   #a1f3   80→35 Hz sweep · used in 12 projects
kick-808b  #7c20   punchier · 90→40 Hz
kick-sub   #e4d9   pure sub · no transient
reuse kick-808 #a1f3 + hat #b6e1
↳ search first — these already exist in the library; nothing synthesized from scratch.
you
Open the hats on the offbeat.
zigzag · engineer
808 + hi-hat · open 2 bars · 90 bpm · open on the offbeat
0:00 / 0:05
↓ wav ↓ midi
edit_pattern hat · open on the “and”
step 1 . . . 2 . . . 3 . . . 4 . . .
kick x . . . . . . . x . . . . . . .
- hat 1 . 1 . 1 . 1 . 1 . 1 . 1 . 1 .
+ hat 1 . 6 . 1 . 6 . 1 . 6 . 1 . 6 .
↳ one line changed — same kick, same grid; 6 is the open articulation.
render kick-808 + hat on “studio-mbp” · 2 bars
you
Now layer a low bass on the downbeat. Same key.
zigzag · engineer
808 + hi-hat + bass 2 bars · 90 bpm · root F on the downbeat
0:00 / 0:05
↓ wav ↓ midi
edit_pattern drums · 32 steps · 1/16
step  1 . . . 2 . . . 3 . . . 4 . . . 5 . . . 6 . . . 7 . . . 8 . . .
kick  x . . . . . . . x . . . . . . . x . . . . . . . x . . . . . . .
hat   1 . 6 . 1 . 6 . 1 . 6 . 1 . 6 . 1 . 6 . 1 . 6 . 1 . 6 . 1 . 6 .
bass  x . . . . . . . x . . . . . . . x . . . . . . . x . . . . . . .
map_rows kick→808 · hat→hat · bass→sub
render 808 kit + sub on “studio-mbp” · 2 bars
you
Love it. Can I get that beat as MIDI to drop into my DAW?
zigzag · engineer
Of course — the pattern resolves straight to events.
resolve_midi drums pattern → MIDI · kick · hat · bass
export drums.mid · 2 bars · 90 bpm · 3 tracks
drums.mid
↳ MIDI is just the project resolved to events — drops into any DAW.
02 Click · count-in for a live band
you
Click track for rehearsal — 90 bpm, four-count count-in spoken over the click.
zigzag · engineer
click · 4-count count-in 4 bars · 90 bpm · spoken cues over the click
0:00 / 0:11
↓ wav ↓ midi
edit_pattern click · accent on each bar (2 = downbeat)
step  1 . . . 2 . . . 3 . . . 4 . . .
click 2 . . . 1 . . . 1 . . . 1 . . .
add_voice spoken · “four · three · two · one”
render click + voice on “studio-mbp” · 4 bars
03 Synth · designing a patch from scratch
you
Start me a synth — just a bare sine. Play a C major scale so I can hear it.
zigzag · engineer
synth · bare sine C major scale · iteration 1
0:00 / 0:07
↓ wav ↓ midi
define_instrument sine · scriptable
export default ({ note_hz, velocity }) => {
  const amp = env({ A: 0.001, D: 0.4, S: 0, R: 0 })
  return sin(note_hz).mul(amp).mul(0.32).mul(velocity)
}
render sine on “studio-mbp” · C major · 8 notes
you
Before we shape it — show me that scale written out. Treble clef.
zigzag · engineer
Here it is — middle C up to the octave.
read C major · degrees 1–8
notate treble clef · ascending
Sheet Music
you
Each note clicks. Give it a proper envelope — soft attack, sustaining body.
zigzag · engineer
synth · + envelope C major scale · iteration 2 · soft attack & sustaining body
0:00 / 0:07
↓ wav ↓ midi
you
Add a little vibrato. Maybe 5 Hz, gentle.
zigzag · engineer
synth · + vibrato C major scale · iteration 3 · 5 Hz pitch wobble
0:00 / 0:07
↓ wav ↓ midi
you
Now layer two more saws slightly detuned for thickness, and warm it with a lowpass.
zigzag · engineer
synth · + detune C major scale · iteration 4 · three-saw chorus, lowpassed for warmth
0:00 / 0:07
↓ wav ↓ midi
04 Sidechain · kick pumping a low major-chord pad
you
Major chord on low pads. Sixteenth-note kicks at 116 BPM, with the downbeat of every beat hitting hardest. I want to hear that compressor-induced crunching sound as the kick pumps the pads. 16 bars.
zigzag · engineer
pump · kick crunching the pad chord 16 bars · 116 bpm · sixteenth-note kicks · A major low pad
0:00 / 0:33
↓ wav ↓ midi
you
Show me the pump — what's the sidechain doing to the pad?
zigzag · engineer
The pad ducks hard on every kick and climbs back before the next beat. Here's its level against the kick.
analyze_audio pad · level + spectrum vs kick
step  1 . . . 2 . . . 3 . . . 4 . . .
kick  2 1 1 1 2 1 1 1 2 1 1 1 2 1 1 1
pad   . - = # . - = # . - = # . - = #
spec  20Hz ########====++==--::..::..... 20kHz
measure pump depth ~9 dB · LUFS -9.4 · 116 bpm
you
Great. Now add a sub-bass walking through the chord tones, sidechained too so it pumps with the pad. And let's go 1-4-1-5 on the chords instead of just holding the I.
zigzag · engineer
pump · + walking sub-bass on I-IV-I-V 16 bars · 116 bpm · sub-bass arpeggio · also sidechained
0:00 / 0:33
↓ wav ↓ midi
add_track sub-bass · walking I–IV–I–V · sidechained
render pad + sub on “studio-mbp” · 16 bars
measure true-peak -0.2 dB · LUFS -7.9
↳ peaks are grazing 0 dB and −7.9 LUFS runs hot — want a limiter on the master?
05 Variations · one motif, three transformations
you
Give me a short motif, then derive variations from it — reverse it, transpose it up, and repeat it. Keep them tied to the same source.
zigzag · engineer
one motif, transformed 21 s · repeat, reverse, transpose
0:00 / 0:21
↓ wav ↓ midi
line motif · 6 steps · 1/8
step 1 2 3 4 5 6
deg  1 3 5 8 5 3
add_variation reverse(motif) → 3 5 8 5 3 1
add_variation transpose(motif, +2) → 3 5 7 10 7 5
add_variation repeat(motif, ×2)
↳ each variation points back at the one source line — edit the motif and all three follow.
render tone on “studio-mbp” · 21 s
you
Does that reach all the way up? Could the same transforms reshape the song’s structure?
zigzag · engineer
They can — the song’s form is just another line. Here it is, projected through the sections, then reversed.
section_line form · palette [verse · chorus · bridge]
bar   1 2 3 4 5 6
form  0 1 0 1 0 2
play  V C V C V B
add_variation reverse(form) → 2 0 1 0 1 0 · B V C V C V
↳ song form is a line too — so reverse / repeat / rotate reshape the whole arrangement, not just a motif.
06 Combine · two scales fused by add, max & min
you
Experiment for you. Take a rising eight-note scale and the same scale falling. Play me each, then combine them point-by-point three ways — add the two together, then keep the higher of the pair at each step, then the lower. (I'm guessing the sum comes out as one flat held note.)
zigzag · engineer
Good ear — the sum is dead flat: a rising ramp plus a falling ramp is constant at every step. After the two runs you get all three fusions back to back — add (the held tone), then max tracing the outer envelope as a valley, then min tracing the inner as an arch. One pair of motifs, one operator, three shapes.
combine · two runs, three fusions 15 s · 120 bpm · ascending + descending → add / max / min
0:00 / 0:15
↓ wav ↓ midi
lines rise + fall · 8 steps
combine add · max · min · point-by-point
step  1 2 3 4 5 6 7 8
rise  1 2 3 4 5 6 7 8
fall  8 7 6 5 4 3 2 1
add   9 9 9 9 9 9 9 9
max   8 7 6 5 5 6 7 8
min   1 2 3 4 4 3 2 1
↳ one pair of motifs, one operator, three shapes — add is flat, max a valley, min an arch.
render on “studio-mbp” · 15 s
07 Lydian · derived from major by rotating the interval pattern
you
Build me a scale the hard way. Take the major step-pattern — whole, whole, half, whole, whole, whole, half — and rotate it to Lydian instead of just looking the notes up. Turn that into a playable scale, then play a melody that leans on the fourth: first in plain G major, then in your derived Lydian, so I can hear what the rotation did.
zigzag · engineer
Rotating the major pattern by three lands on Lydian — whole, whole, whole, half, … — and a cumulative sum makes it playable: [0, 2, 4, 6, 7, 9, 11], a major scale with a raised fourth. Same melody twice below — G major first, then the derived Lydian. Every note that lands on the fourth lifts a semitone: that's the bright, floating Lydian color.
lydian · derived from major 11 s · 100 bpm · same melody in G major, then derived G Lydian
0:00 / 0:11
↓ wav ↓ midi
rotate_scale major pattern +3 → Lydian
major    W W H W W W H
rotated  W W W H W W H
degrees  0 2 4 6 7 9 11
↳ derived by rotating the interval pattern, then a cumulative sum — not looked up; the raised 4th lifts every degree-4 note a semitone.
render G major → derived Lydian on “studio-mbp” · 11 s

The Universe

You don’t start at sine waves.
Unless you want to.

The conversation above is real. The engineer can build an instrument from a single oscillator, one envelope at a time, and you can sit in the chair while it does. That’s a demonstration of reach, not a requirement. Most sessions never touch a raw oscillator. They don’t need to.

What the Universe contains

A body of musical pieces, already made.

Instruments. Patterns. Progressions. Motifs. Rhythms. Kits. Voices. Mastering chains. Every piece is named, versioned, and reachable from any project. When you ask for a banjo, a kick, a half-time shuffle, a I · V · vi · IV in A minor — the agent doesn’t synthesize it from scratch. It finds the piece that already exists and writes it into your project.

Instruments
banjoupright basskickhatbodhránrhodesserum-fat-bass
Patterns
four-on-the-floorhalf-time shuffleswung-16thsson clave
Progressions
I·V·vi·IVii-V-Imodal vamp · D dorian
Motifs
ascending fourthdescending minor thirdleading-tone resolve
Voices
narrator · lowsoprano · vibratowhisper
Append-only · forever

Nothing in the Universe is ever destroyed.

Every piece is permanent and addressed by its content. A change makes a new version next to the old one, never in place. A GUI overwrites history; the Universe accumulates it. Your project from a year ago still renders bit-identically a year from now — because every piece it points to is still there, exactly as it was.

Communal · derivative · alive

Your work is built on everyone else’s. And vice versa.

Reference someone’s banjo; fork it; tune it; publish your version. A motif you write today is something another project will derive a variation from next week. The Universe is the remix tree the studio always wanted — a living lineage where every piece carries its ancestors with it.

Information wants to be free. Music is just another form of information.

Under the hood

Every track is a value in a typed algebra.

Scroll through the core of the rendering engine. The same handful of ideas that shape a single melody shape an entire mix — numbers over time, read through a context, transformed by total functions, composed along two axes.

01 / 05

It's just numbers.

A musical event, before it carries any meaning, is a rest or an integer. A scale is seven of them; a chord progression, four. The grid stays small enough to read at a glance — and that legibility is a hard rule, not an accident.

src/matrix/line.rs rust
/// A single cell in a line matrix.
pub enum Cell {
    Rest,
    Value(i32),
}

impl Cell {
    pub fn value(self) -> Option<i32> {
        match self {
            Cell::Value(v) => Some(v),
            Cell::Rest => None,
        }
    }
}
02 / 05

Meaning is a projection.

The same integer becomes a pitch, a chord degree, a sweep over time — depending on the context you read it through. “Sample a value at this moment” is one function, shared by everything that turns data into sound.

src/projection.rs rust
/// A context that yields a `T` at a position of type `P`.
pub trait TimeIndexed<P, T> {
    fn at(&self, pos: P) -> T;
}

impl TimeIndexed<f64, i32> for LineSampler {
    fn at(&self, pos: f64) -> i32 {
        let n = self.cells.len() as i64;
        let idx = (pos / self.beats_per_cell).floor() as i64;
        self.cells[idx.rem_euclid(n) as usize].unwrap_or(self.default)
    }
}
03 / 05

Edits are typed functions.

Reverse a phrase. Invert it. Transpose it. Snap it to a scale. Each is a total function from one line of numbers to the next — so they compose, stack, and chain without surprises. Twenty-two of them, split by what they touch: the values, or their place in time.

src/matrix/model.rs rust
/// A single edit applied to a matrix. Transformations apply in
/// order; each takes a matrix and produces one of the same kind.
pub enum Transformation {
    Transpose { by: i32 },
    Reverse,
    Rotate { by: i32 },
    Invert { pivot: i32 },
    Quantize { allowed: Vec<i32> },
    Palindrome,
    Repeat { times: u32 },
    Combine { other: String, func: CombineOp },
    // … 14 more
}
04 / 05

Two ways to combine.

Lay sound after sound, or stack sound onto sound. Sequence and mix — two associative operations, mirror images of each other across time and amplitude. That single pair is the whole grammar of arrangement.

src/clip/model.rs rust
pub enum Source {
    // …
    /// Lay clips end-to-end, in order — B follows A.
    Concat { parts: Vec<String>, gap_seconds: f32 },

    /// Layer clips concurrently, summed sample-wise —
    /// the amplitude-axis dual of Concat's append.
    Mix { parts: Vec<String> },
}
05 / 05

One combinator underneath.

Drive one stream through another, cycling to fit. Nine lines, generic over whatever flows through them. Gating, combining, modulation — every one of them is this same shape, written once.

src/projection.rs rust
/// Co-indexed projection — the zipWith "brick". Drive `input`
/// through a `ctx` sequence, cycling `ctx` to align.
pub fn project<A: Copy, B: Copy, C>(
    input: &[A],
    ctx: &[B],
    f: impl Fn(A, B) -> C,
) -> Vec<C> {
    let n = ctx.len();
    input.iter().enumerate().map(|(i, &a)| f(a, ctx[i % n])).collect()
}

Determinism falls out of this: every sample of every render is a function of the project — not a guess from a model.

Make music with
every engineer in every room.

Zigzag is in private beta. New invites every Friday. Tell us a little about you and we’ll get you in.

We’ll only email you about the beta and GA launch. No newsletter, no drip, no growth-hack sequences.

Private beta · invites every Friday

Request an invite

Step 1 of 5 · You