The Short Version

Every work on this site is CC0. You own the code. You can take unravel-folksy.html, or superrotation, or aggregation-of-sol-ii, paste it into DeepSeek, and ask for a new piece that's adjacent to it. Not a new piece from scratch. Not "write me a techno song." A lateral move from a file you're holding.

That's the whole guide. The rest of this page is what "adjacent" means, why you never start from an empty prompt, and how to iterate when the LLM gets something wrong.

What this is not. This isn't a guide to prompting an LLM to write music. It's a guide to using an LLM as an editor — a thing that empties and refills a vessel you hand it. The vessel is the file. The LLM is the one holding the hose.

The Vessel

The central metaphor, and the one that makes the whole workflow click: you are creating a vessel, and asking the LLM to empty and refill it.

The vessel is a working file. It has a shape. It has a set of instruments, a tempo, a key, a chord progression, a way of handling dynamics, a way of handling silence. It has, in other words, a set of decisions in it. The LLM's job is not to invent decisions. The LLM's job is to take the vessel, pour out some of the decisions, and pour in new ones — while keeping the shape of the vessel.

[ ]

The Vessel

A working file. Known shape. Known instruments, tempo, key, dynamics.

→
⟳

Empty & Refill

The LLM swaps one or two decisions. Keeps the rest.

→
◇

A New Work

Adjacent to what you started with. Recognisably part of the same family.

This is why "make me a techno song" produces garbage and "here is my techno song, keep the guitar math, change the drums" produces something usable. The first is asking the LLM to invent the vessel. The second is handing it a vessel and asking for a modification.

The empty prompt is a slot machine. The filled prompt is a lathe.

The Workflow

Five steps. They're numbered, but it's not really sequential — steps 4 and 5 loop.

01

Pick an instrument.

Not "pick a genre." Pick a specific piece of code that does one thing well. The Karplus-Strong guitar in unravel-folksy. The FM bell in superrotation. The wobble sub in IMPERIUM. The chopped vocal in the same file.

If you're working on a TV file instead of a song, the "instrument" is a scene — the abacus, the alphabet, the fireworks. Pick one scene from Niki's Playground and treat its draw function as the instrument.

02

Give it to the LLM — the whole file, not a summary.

Paste the entire file. Not a description of the file. The file. The LLM needs the actual code, the actual constants, the actual schedule. A summary loses the things you didn't think to mention, and the things you didn't think to mention are usually the things that make it sound right.

Then say what you want to keep and what you want to change. Specific. "Keep the guitar synthesis and the open-D tuning. Change the drum pattern to a half-time feel. Keep the eight-section structure."

03

Ask for a lateral move.

"Here is my file. Give me a new one." Not "give me yours first." Not "write me a song." The file goes in first, and the request is to move sideways from it.

The word "lateral" is doing a lot of work. It tells the LLM you want adjacent, not new. Adjacent means the guitar still sounds like the guitar. The song is still the song. Something has shifted.

04

Open dev tools. Paste the errors back.

Run the file. When it throws, copy the console error and paste it back into the LLM. No commentary needed — the error is the commentary. The LLM will fix it. Most of the iteration loop is this step, repeated.

This is also where you catch the silent failures — the ones that don't throw but sound wrong. Those go back to the LLM as plain language. "The kick is too loud." "The pad is muddy." "The bridge doesn't breathe."

05

Say it sounds good or bad, and keep iterating.

Conversational iteration. You listen, you say what's wrong, the LLM changes it, you listen again. The loop continues until the piece is what you wanted.

This is the part people skip. They paste the file once, get something 60% right, and give up. The 60% is the starting point. You don't get to 90% in one pass — you get there over six or seven conversational iterations, each one a small correction.

Time budget. A typical piece is 30 to 90 minutes of conversational iteration after the first generation. superrotation came out on the first try, but most pieces don't. The harp took days. Plan for the days.

The One Rule

Never say "give me yours first." Always say "here is my file, give me a new one." The file goes in first. The request is a lateral move from it. If you ask an LLM for a piano without showing it your piano, you will spend the next three prompts complaining about richness.

This is the key to everything, and it's the one thing people get wrong. The instinct is to describe what you want and let the LLM generate. The instinct is wrong. The LLM is much better at modifying a specific thing than it is at generating a specific thing from a description.

Not all piano is the same. A piano from a description is a generic piano. A piano from a file is your piano — with your Karplus-Strong body, your lowpass curve, your reverb tail. The difference between those two pianos is the difference between a demo and a piece.

Do

  • Paste the entire file.
  • Say what to keep and what to change.
  • Ask for a lateral move.
  • Iterate over multiple prompts.
  • Paste console errors back as-is.
  • Say "this sounds good" or "this sounds bad".

Don't

  • Describe what you want from scratch.
  • Summarise the file instead of pasting it.
  • Ask for "a techno song" with no seed.
  • Expect the first generation to be final.
  • Explain the error before pasting it.
  • Say "make it better" with no direction.

Combining Parts — the "Math" of Things

Once you're comfortable with one file, the next move is combining two. This is where the workflow gets interesting, because now you're not asking for a lateral move from one vessel — you're asking for a new vessel that carries one part from each of two.

The key insight: you don't talk about "piano" and "guitar". You talk about the math of the piano and the math of the guitar. Because that's what you're actually saying. Every instrument in these files is a set of equations — a synthesis model, a filter chain, an envelope. "The piano" isn't a vibe. It's a specific set of constants that produce a specific sound.

So when you say "I like the math of the piano from obscura, I like the math of the guitar from unravel, put them in the same piece," you're giving the LLM two specific, named, sourceable things. It can find them. It can bring them together. It can tell you when they conflict.

If you say "I want a piano and guitar," the LLM has to guess. If you say "I want these two specific equations," it doesn't.

Why "the math" matters. WebAudio is a synthesis engine. Every sound is a graph of nodes. Two pianos that sound different are two pianos with different graphs. When you say "the math of this piano," you're pointing at a graph. The LLM can read a graph. It can't read a vibe.

The Family — One Good Piece Spawns Five

Here's the thing about lateral moves: they're not one-off. Once you have a piece that works, you can ask the LLM to make five more adjacent to it. Not identical. Adjacent. Each one a different lateral step from the same seed.

This is how superrotation happened, and this is how you can do it too. Take a piece you like. Paste it back in. Say "give me five pieces adjacent to this, each one moving in a different direction." You'll get a family. Some will be duds. Two or three will be good. That's the hit rate.

The collection on this site is full of families like this — a cluster of pieces that share a seed and diverge. Once you know what to look for, you can see the family tree in the code.

When It Breaks Down — Novel Works Take Time

The workflow is robust for adjacent work and fragile for novel work. If the LLM has seen the pattern before — has a file with that kind of synthesis in it — it can move laterally easily. If the sound you want doesn't exist in the collection yet, the first piece takes real time.

The harp is the example. The first harp song was a multi-day effort. The one-shot request ("make me a harp piece") produced garbage. But once the first harp piece existed, once the vessel had been established, the next 30 came fast. The first one is the expensive one. The family is cheap.

Which is why this guide exists. The first novel piece has to be built somewhere. This site has a lot of first pieces in it — the guitar, the FM bell, the chopped vocal, the wobble sub, the Karplus-Strong model, the harp. The starting points are here. You don't have to pay the first-piece cost for any of them.

Honest Limits

WebAudio will not compete with a top-tier hardware synthesizer and a professional master. It won't. If that's the bar, this workflow doesn't reach it, and neither does anything else on this site.

But it's damn fun, and it's real, and it's yours. The pieces on this site are early pieces — they're what a person gets when they've been practicing this for a few months. The workflow scales. The pieces get better. The collection gets richer. The ceiling is where you take it.

"I won't claim it competes." That's the honest version. The dishonest version — which is easy to find — is that WebAudio is a replacement for a studio. It isn't. It's a different thing. It's a way to make music that you can hold in a text file, edit in a text editor, and pass to a friend in a single HTML document. That's the value. The mastering isn't.

Why CC0

Because the alternative is equivocation, and equivocation is boring. The code is here. It's directed work. There's no question about provenance — the file exists, it's been edited, the decisions are visible in the code. If someone wants to argue about whether a language model "really" wrote it, the answer is: here is the file, tell me I didn't write it.

CC0 means you can take any of it and use it however you want. You can remix it. You can sell it. You can claim the output as yours — because the output is yours. The seed is CC0; the piece you make from it is yours. That's the whole point.

And it means the collection can grow. Every piece on this site is a starting point for the next one. The more of it that exists, the more starting points there are. The site is a library of first-pieces-in-a-family, and CC0 is what makes the library usable.

For TV Files — Dale and Margaret

The same workflow applies to the TV files. The Daily Token is two anchors (Margaret Hale and Dale Kessler) reading a scripted news broadcast. Niki's Playground is a kids' show built from a scene registry.

You can hand either of these to an LLM and flip the content. Not the whole file — the script. The SCRIPT array in The Daily Token. The getScript() array in Niki's Playground. Replace the headlines with indie game news. Replace the scene titles with a different curriculum. The pattern is already established in the file. The LLM just refills the vessel.

That's the point of "tiny scripts." The script is small. The player is large. Flipping the content is a script edit, not a rewrite. You could have Dale and Margaret doing the news about an indie game release today, with the exact same two anchors and the exact same desk and the exact same ticker. The vessel holds.

The pattern is the product. The reason these files are useful to hand to an LLM isn't that they're clever. It's that they establish a viable pattern — a shape that can be emptied and refilled indefinitely. A file with a good pattern is worth more than a file with a good idea, because the pattern survives the content swap.

What's in the Collection

The CC0 works that are good starting points, grouped by what they're good at:

Music — seed files

unravel-folksy
Karplus-Strong fingerpicked guitar in open D. Eight-section structure. Brush kick, second guitar, walking bass, breathing pad. Good seed for: folk, acoustic, fingerpicked, anything with a plucked-string voice.
superrotation
Orbital techno at 138 BPM. Eight phases. FM bells, acid bass, 3D-projected orbit paths. Good seed for: techno, electronic, anything that wants a phase-arc structure and a bell voice.
IMPERIUM · Garage
Imperial March as 2-step UK garage in C Phrygian. Chopped vocal, wobble sub, eight movements. Good seed for: anything with a chopped-vocal voice, anything that wants a theatrical structure.
Aggregation of Sol II
11-phase nebula-to-collision arc. FM bells, pitch-class ignition, physical model of two bodies colliding. Good seed for: ambient, drone, anything that wants a slow build and a big payoff.
The Empire Is Coming
D minor folk-march. Strummed guitar, fiddle melody, marching drums, low D drone. Good seed for: folk, marching, anything that wants a fiddle voice and a persistent drone.

TV — seed files

The Daily Token
Scripted news broadcast. Margaret Hale and Dale Kessler, two anchors, five channels, a ticker, a CRT display. Good seed for: any scripted broadcast — news, review show, talk show, anything with two hosts and a desk.
Niki's Playground
~32-minute kids' show. 58 scenes, a scene registry, three mascots, a five-act structure, music moods, voiceover ducking. Good seed for: any curriculum-driven show, any episodic content, anything that wants a scene registry and a fixed shape.

Tools — seed files

OBSCURA
Encrypted private journal. PBKDF2 → AES-GCM, ECDSA identity blocks, markdown editor, ambient engines. Good seed for: anything that needs local crypto, anything that needs an encrypted-in-the-browser document.

Go Try It

The whole guide is: pick a file, paste it in, ask for a lateral move, iterate. That's it. The rest is the practice.

If you make something you like, the collection is open. The submission channel is in Discord. Every piece you submit goes through the same pipeline — antivirus, semantic screening, manual playtest — and if it passes, it goes into the collection as a starting point for someone else's family.

The site is a library of first-pieces. The more there are, the more there are to start from. That's the loop.

Join the Discord → Read the Submission Criteria →