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.
Image coming soon
- 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
Image coming soon
Image coming soon