One stream, one AI DJ, and absolutely no skip button
It turns your private music library into a single shared broadcast where an AI DJ curates tracks, talks between them, and listeners can't hit skip.

What it does
SUB/WAVE is a self-hosted internet radio stack built around a single shared Icecast stream. Every listener hears the same audio at the same time, while an AI DJ pulls tracks from your own Navidrome library, introduces them, reads station idents, checks the time, and fields plain-language song requests. The operator steers the station from an admin console that manages scheduling, DJ personas, between-track skills, and multiple audio format mounts; listeners tune in through web, native mobile, or desktop players.
The interesting bit
The project treats radio as a social object rather than a utility. By removing the skip button and enforcing one synchronized stream, it turns an LLM’s curation of your library into a shared experience instead of a solitary algorithm. The DJ is a pluggable persona system with up to 24 characters, co-host banter, mood-aware rotation, and stem blends that duck the music whenever it speaks.
Key highlights
- One shared Icecast mount with optional MP3, Opus, AAC, and lossless FLAC streams, toggleable from the admin UI.
- Swappable LLM providers (Ollama, Anthropic, OpenAI, Google, DeepSeek, OpenRouter, and others) and six TTS engines including local Piper/Kokoro and cloud options, switchable at runtime without redeploying.
- Pluggable “skills” for between-track segments—weather, news, traffic, or your own—that operators can edit, write, or install from a community exchange without touching code.
- A Library Observatory data-art map at
/observatoryvisualizing every tagged track by genre and energy, with per-track dossiers covering BPM, key, mood, and nearest neighbours in vector space. - Native iOS, Android, macOS, Windows, and Linux apps with background audio, CarPlay, Android Auto, and a menu-bar mini player.
Caveats
- The project requires an existing Navidrome music server over the Subsonic API; it does not ship with its own music catalog.
- The README is explicit that this is “radio, not a playlist,” meaning listeners sacrifice on-demand control—operators can skip via the admin API, but the public stream is strictly linear.
Verdict
Worth a look if you already run a personal music server and want to turn it into a communal listening experience for friends or family. Give it a pass if you need per-user on-demand playback, algorithmic personalization, or a solution that works without first setting up Navidrome.
Frequently asked
- What is perminder-klair/subwave?
- It turns your private music library into a single shared broadcast where an AI DJ curates tracks, talks between them, and listeners can't hit skip.
- Is subwave open source?
- Yes — perminder-klair/subwave is open source, released under the MIT license.
- What language is subwave written in?
- perminder-klair/subwave is primarily written in TypeScript.
- How popular is subwave?
- perminder-klair/subwave has 1k stars on GitHub.
- Where can I find subwave?
- perminder-klair/subwave is on GitHub at https://github.com/perminder-klair/subwave.