MANUAL · 09
Questions & answers.
The things people ask most about how SUB/WAVE behaves — how it copes with an empty room, what it needs from a model, and what the moving parts behind the DJ actually do.
AN EMPTY ROOM
What happens when no one is listening?
By default, nothing changes — the station broadcasts the same whether anyone is tuned in or not. But there is an optional setting, Pause when empty, that changes this. With it on, the moment the listener count hits zero the DJ stops doing AI work: no track-picking, no spoken links, no station IDs. The music keeps flowing from a fallback playlist so the stream never goes silent, and the DJ wakes straight back up the instant someone tunes in. It exists to save tokens — and money, on a paid model — when there is no one there to hear the DJ anyway. See Models & Tokens.
MODEST HARDWARE
Does it work with a small model?
Yes. The AI DJ doesn’t need a frontier model — a modest one running on your own hardware is plenty. A 9B-class local model such as Qwen3.5 9B comfortably picks tracks and writes the DJ’s lines, as long as you run the station on its lean settings: reasoning off, the simpler track-picker, concise scripts. The full set of dials, and what to turn which way, is on the Models & Tokens page.
A TAGGED LIBRARY
What is mood tagging?
Every track in the library can carry a mood — a label like calm, energetic or reflective. The station tags the library in the background, and the DJ leans on those tags to pick music that fits the moment: the time of day, the weather, the show that is on. A well-tagged library gives the DJ a far richer palette to choose from. You can watch the tagger’s progress on the Library page in the admin console. Untagged tracks still play — they just don’t get matched by feel.
OPERATOR TOOLING
What are the “deploy” and “start” SUB/WAVE skills?
These are two helper skills bundled with the project for whoever runs the station, used through Claude Code. subwave-deploy handles installing and updating — a first-time setup from a fresh checkout, or pulling the latest code and rebuilding only the parts that actually changed. subwave-control is lighter: it simply starts or stops the station in development or production mode, with no builds. Day to day you reach for control; after a code change you reach for deploy. The hands-on steps they automate are written out in the setup guide.
CHOOSING THE NEXT SONG
What are the candidate pool and the agentic picker?
They are two ways the DJ chooses what to play next. The candidate pool picker is the straightforward one: it gathers a shortlist of tracks from your library — similar songs, similar artists, mood matches, recently-added and frequently-played albums — caps it to a couple of dozen, and asks the model to pick one from that list.
The agentic picker is the richer one. It runs as a small reasoning loop with a memory of the current session and tools to search the library itself, so its choices — and the links between them — stay coherent across a run rather than starting cold each time. It is on by default; if it ever fails or runs slow, the station quietly falls back to the candidate pool, so the music never stops either way. Which one suits you comes down to the model — see Models & Tokens.
WHEN SOMETHING’S OFF
Why is there a debug page?
The admin console’s Debug page is a live snapshot of the station’s inner workings — the most recent AI calls and whether they succeeded, the audio mixer’s status, and the latest log lines. You don’t need it day to day, but it is the first place to look when something is off: the stream stalls, the DJ goes quiet, or a voice sounds wrong. It turns a vague “something’s broken” into a specific, visible cause. More on it in Admin & Settings.
For a deeper look there is also subwave-log-analysis, a bundled skill used through Claude Code. Where the Debug page shows the live moment, this reads the station’s full event log over time and reports back on how it has been behaving — how often it calls the music library, why the picker keeps favouring certain artists, whether the library pool is too narrow, and any runtime anomalies. It is the tool for “the station works, but something feels off” rather than an outright break.