MANUAL · 15
Seven things that get asked over and over — not because they're broken, but because the name doesn't tell you what's underneath. What each one is, what changes when you move it, and where the control lives.
PERSONA TONE
Every persona carries three dials from 0 to 10 — Humour, Local Colour and Warmth. They look like faders, but nothing scales smoothly as you drag them. Each one resolves to a band: 0–3 is low, 4–6 is neutral, 7–10 is high. Only a band away from neutral changes anything, so 4, 5 and 6 are the same setting — and so are 7 and 10.
That’s on purpose. A model can’t hear the difference between a 6 and a 7 in a raw “7 out of 10” instruction, so rather than fake a precision that isn’t there, the dial picks one of two style directions.
| Dial | Turned down | Turned up |
|---|---|---|
| Humour | Plays it straight; wit stays rare and understated. | Leans into dry, playful wit; an aside or a wink is welcome. |
| Local Colour | Keeps it universal; skips local references and place-specific colour. | Leans on the local setting — the town, the weather, the hour — as texture. |
| Warmth | Keeps a cool, dry distance; lets the music carry the warmth. | Warm and earnest; speaks to the listener like a friend. |
Local Colour is the one people ask about. It governs how much the DJ reaches for where and when you are — your town, today’s weather, the hour — as raw material. Turned up, links open with the drizzle outside. Turned down, the same DJ could be broadcasting from anywhere.
It doesn’t add facts: the place, the weather and the clock reach the DJ either way, and the dial only decides whether it leans on them. It can’t invent a second location either — exactly one place name reaches any script, the on-air location under Settings → Station. A persona left at the defaults writes exactly what it wrote before the dials existed. Find them under Personas → Behaviour.
CHOOSING THE NEXT TRACK
Both end in the same place — one track, handed to the queue — and both run inside a session and get logged. They use the same show context, musical policy, artist spacing and recency protection. What differs is how the choice is reached.
With Track Shortlist, the controller does the discovery. It combines eligible tracks from the library, de-duplicates them, applies the show and recency rules, then asks the model once to choose from the resulting shortlist. That keeps the model’s job small and predictable: one structured decision, with no tool loop required. It is a good fit for modest local models and for hosted models where token use matters.
With Agentic Tools, the model drives the discovery. It can use the library’s search tools across several steps before committing to a track. That is an equally valid route for a robust tool-capable model, but it asks more of the model and may use more time and tokens. The setting is a choice of workflow, not a claim that one path has better taste or less variety.
The shared discovery tools now include frequently played albums, mood-named playlists, neighbouring artists and an autonomous mood detour. These are available to Agentic Tools and agent-assisted requests as well as Shortlist, so existing Agentic stations can discover different tracks after upgrading. Energy requested within a mood is a preference; strict show restrictions still apply. A show’s pinned moods suppress the mood detour on both routes. Similarity scores describe resemblance, while measured tempo and key help judge the transition.
Shortlist’s Prepare targeted searches setting is off by default, including for stations migrated from Candidate Pool. Enable it under Music selection to have an extra, bounded model call extract explicit musical requests from the show brief once per airing. It uses the existing discovery pass budget. With two passes and a soft playlist, the playlist keeps its pass and targeted searches rotate with other sources in the remaining pass. Preparation can add time to the first pick; ordinary discovery continues if it fails. Prompt memory follows your live DJ behaviour settings for the number, age and length of already-aired remarks.
Start with Track Shortlist if you use modest local hardware, want a predictable token budget, or your model does not reliably call tools. Try Agentic Tools when you have a strong tool-capable model and want it to explore the library itself. The station still writes links and honours the same track rules either way. Requests and segments have their own direct or agent-assisted settings, so changing the picker does not force a change there.
Two behaviours hold whichever you run. Variety is enforced after the choice as well as during discovery, so a recent artist or album can cause a re-pick. And the daily token budget degrades in tiers: optional work is reduced first; at the cap the station coasts on the fallback playlist. The music never stops. Choose the track-selection path under Settings → Music Selection; the model side is on Models & Tokens.
TWO KINDS OF GROUPING
They sound like alternatives. They’re layers — and a show can use playlists.
| Playlist | Show | |
|---|---|---|
| What it is | A named set of tracks | A block of programming on the schedule |
| Lives in | Navidrome | The station’s own schedule |
| Has a time | No | Yes — that’s the point |
| Has a persona, theme, topic | No | Yes |
A playlist is just tracks. Build one by hand in Navidrome, or describe what you want (“late-night driving, mostly instrumental, ninety minutes”) and let the playlist builder assemble it from the same mood, vector and similarity machinery the DJ picks with, then order it into an energy arc.
A show is an hour or more with an identity: which persona is on the mic, which skin the player wears, what the show is about, and a set of music filters — moods, genres, eras, energies, vocals. The DJ still picks every track live; the show narrows what it may pick from.
Where they meet: a show can be anchored to one or more playlists. Anchored on its own makes the playlists the show’s dominant source while leaving the DJ free to reach outside for a better fit. Anchored with strict on makes them the show’s entire universe, and everything off-playlist is dropped before the DJ ever sees it.
If a show pins playlists that no longer resolve — deleted and recreated in Navidrome, so the id moved — the anchor is ignored and the station says so in the log, including that the strict toggle had no effect. The show still airs; it just airs unanchored. Re-select the playlists in the show editor to fix it. Rule of thumb: recurring identity at a fixed hour is a show; a set of tracks you want to reach for is a playlist; “this hour, only these tracks” is a show anchored to a playlist with strict on.
DISK FOR SEAMS
A stem-blend transition mixes two tracks by instrument rather than fading two finished mixes together: the outgoing drums duck out under the incoming bass, and the vocals clear before the new vocal enters. Doing that needs the four separated stems — drums, bass, other, vocals — for both sides of the seam.
Separating them takes far longer than the gap between two songs, so it can’t happen at the seam. The analyzer does it during acoustic analysis instead, keeping the first forty seconds and the last twenty of each track. A transition is then a fast mix of files already on disk.
Which makes the trade a simple one: the cost is disk, and only disk. The separation is paid for during analysis whether you keep the output or not. Budget 13–25 MB per track; the default 15 GB budget holds somewhere between six hundred and twelve hundred of them. Once you’re over, a sweep evicts the tracks with the least to gain from a blend first — the ones the station never plays, and the ones whose analysis found no beat grid to align a seam on.
A blend needs stems on both tracks of a pair. With half your library cached, far fewer than half your seams will blend — most fall back to a plain crossfade, which isn’t a failure, just the ordinary behaviour. So the reason to raise the budget is coverage of pairs, not coverage of tracks. DJ Doc says this outright, with the track count your current budget actually holds.
Small library? Raise the budget until it covers the lot and let the analysis pass backfill. Tens of thousands of tracks? The budget will always bind, and blends land wherever the cache happens to be warm. Short on disk? Turn the cache off — every seam becomes a crossfade and nothing else changes. The dial is under Settings → Transitions.
TWO LOCKS, ONE PASSWORD
These get confused because turning either one on asks for the same station password. They are independent, and only one of them actually stops anyone listening.
The private player swaps the public pages for a password prompt. It hides the interface. The now-playing endpoints stay public — the player and the admin dash need them — and anyone who knows the stream address can still tune in. It applies live, with no restart.
The stream password turns on listener authentication at Icecast itself, on every mount. That is the real boundary: without the password, there is no audio. Turning it on or off needs a mixer restart; changing the password applies live.
The private player is a curtain. The stream password is a lock. Most people who want a private station want both, so that one prompt unlocks the page and the audio together.
A third thing is often mistaken for these two: HTTP Basic Auth applied in front of the whole station at your own reverse proxy. That isn’t a SUB/WAVE feature and it behaves differently, particularly for the mobile apps. Both locks live under Settings → Station → Privacy; tuning in from VLC, Sonos, hardware radios and the apps once a password is on is covered on Listen With.
THE SHAPE OF THE DAY
The station divides the day into eight named periods, on fixed wall-clock hours in your station’s timezone.
| Period | Hours |
|---|---|
early-morning | 05:00 – 09:00 |
morning | 09:00 – 12:00 |
midday | 12:00 – 14:00 |
afternoon | 14:00 – 17:00 |
drive-time | 17:00 – 19:00 |
evening | 19:00 – 22:00 |
late-evening | 22:00 – 01:00 |
after-hours | 01:00 – 05:00 |
These boundaries are not derived from sunrise or sunset, and they aren’t configurable. Which reads oddly above about 55° north or south, where “evening” is full daylight in June and pitch dark in December.
It’s a deliberate trade. A daypart is a programming idea — drive-time means the end of the working day, which is five o’clock whatever the sky is doing — and it has to be predictable, because the schedule, the mood plan and the show grid are all built against named hours. Boundaries that drifted three hours across the year would quietly move your shows with them.
What is sun-aware is the DJ’s description of the world outside. The station reads whether the sun is currently up at your coordinates and puts that on the prompt, which is what stops it describing dusk two hours after dark in December, or “the last of the light” at nine in the evening in June. That runs off real solar position, so it’s right at any latitude.
So the lever at high latitude isn’t moving the boundary, it’s retuning what happens inside it: each period’s mood is yours to set, under Moods → Moments. Give a Nordic summer evening a brighter mood than the default wind-down and let the sun-aware flag keep the DJ’s language honest. Two nudges sit on top of the table and aren’t editable: the small hours pull the speaking pace down whatever period the hour formally belongs to, and commute windows push it up. A show with a pinned energy overrides both.
LISTENER SIGNAL
There are two hearts and they aren’t the same signal. The listener heart on the player is one like per apparent listener per airing — the same song aired again later can be liked again. Listeners have no accounts, so “apparent listener” is a one-way hash of the address; the raw address is never stored and everyone behind one router shares a key. It’s lightweight de-duplication, not identity. The operator heart in the admin library is something else: curation, not a taste snapshot.
By default a like changes nothing about rotation. It’s recorded, it shows up in stats, and the track gets starred in Navidrome if you’ve left that on. The DJ never hears about it.
Influence is opt-in, under Settings → Listeners. Turned on, the most-liked tracks become one more signal available to Track Shortlist, capped like every other source — a weighted preference, never a lock, so the crowd can steer the pool without taking it over. Out of the box that means the ten most-liked tracks of the last thirty days; both numbers are yours to change, and a window of zero means all time.
An operator heart never expires from that window. A listener like ageing out is a taste snapshot going stale, which is right. An operator like ageing out would be the DJ forgetting curation you set by hand, which isn’t.
Clearing them: from any row in the admin library, un-heart removes your own heart and leaves listener likes alone, while clear likes removes both. If yours was the last like standing and Navidrome starring is on, the track is unstarred there too.