Checking…

Not connected
You
DJ
100%

Call-in settings

Applies to the next caller — no restart. Leave a field on “Default” to fall through to the environment config.

Station

Admin credentials unlock library search, on-air announcements, the back-to-air mention, and mirroring each persona's voice from the station. Stored server-side, never shown back.

Security

The password protects this panel, the keys and the test buttons. The call card and embed stay public — they're guarded by the usage limits instead. Stored as a salted hash, never plaintext. Locked out? Set CALLIN_ADMIN_KEY in the environment as a recovery override; restarting the app clears IP bans.

API keys

Stored server-side in data/secrets.json and never sent back to this page — only whether each is set and its last four characters. Leave a field blank to keep the current value.

Brains

Runs one real completion on your key — costs a fraction of a cent on hosted providers, free on Ollama.

Voice

Synthesizes one real line — a fraction of a cent on cloud TTS, free on a local backend.

Caller permissions

Segments put audio on air on a caller’s say-so, so they’re off by default. Track skipping, sound effects and direct queueing are never available to callers, regardless of settings — use “Test station + tools” to see the exact list.

Usage controls

Every call costs model time and airtime, so these stop runaway use — one open tab could otherwise dial in a loop. Defaults are generous; set any to 0 to turn it off. Callers see a friendly “lines are busy” message, never an error code.

Speech hygiene

Applied to every spoken line on its way to the voice, so it holds regardless of which model or provider is in use — and regardless of whether the prompt was obeyed.

Call behaviour

Off by default — being asked your name just to request a song is friction. A name the caller volunteers is still used to credit the request on air either way.

The station refuses song requests when nobody is listening — and a caller on the line isn’t pulling the stream, so they don’t count. This tunes their browser in for the duration of the call so requests are accepted. Volume 0 keeps it silent behind the DJ.

Station awareness

What the DJ is told about the station before the call. Each item costs time-to-first-token on every turn, not just at the start — so more context means a slightly slower reply. Set a count to 0 to leave it out.

The music library is not preloaded — the DJ searches it on demand with a tool, so it always reflects what you actually have. That needs the station admin credentials.

House style

Small steers layered on top of the persona — not a replacement for it. The DJ keeps its own voice and applies these lightly. Leave blank and the persona alone decides.

Back to air

After the caller hangs up, the DJ can mention the call on air — “just had someone on about…”. It’s one passing line between tracks, not a recap, and the station re-voices it in the persona. Needs the station admin credentials.

Call sounds

Leave a URL blank to use the built-in synthesized tone — no audio file needed. Point at your own file to replace it.

What callers can ask

Live reference — reflects the permissions you've enabled above. Anything greyed out is currently off.

    Embed on another page

    Drops an iframe into the target div. allow="microphone" is set for you — without it the mic silently fails inside a frame.

    Walks every leg a real call depends on and reports the first thing that would break. The model and voice stages each make one real (sub-cent) API call.