Radio Show
An autonomous radio DJ: an agent writes the script of a live show, voices it with text to speech and controls Spotify playback in each listener's own browser.

- Status
- Self-hosted, in development
What it does
- Plans the whole show as a running order, then writes each block live, one block ahead of what is playing.
- Picks tracks on Spotify, rejecting karaoke versions and songs played too recently.
- Voices each link with text to speech and lowers the music under the voice.
- Remembers past shows: a short digest of recent plays, plus a history search the model calls when it needs it.
How it is built
- Spotify delivers no audio through its API, so the backend produces and the browser directs: each listener plays the music with the Web Playback SDK and the voice is mixed locally with Web Audio.
- The producer is a LangGraph graph with one thread per show, checkpointed in PostgreSQL, so a show survives an API restart. A rejected track is an edge back to the writing step.
- FastAPI serves HTTP and a WebSocket. Voice clips wait in Redis and the next block is prepared while the current one plays.
- Each listener uses their own OpenAI key, never shared, with a spending guard per show and tracing switched off.
- A rewrite of a first version that polled Spotify every 200 ms. Message types are generated from the backend OpenAPI into TypeScript, so the two repositories share one contract.
More views

