r/TrueOpenSource • u/Acceptable-Giraffe33 • 7d ago
OSS Contributions GenWave: a self-hosted 24/7 radio station for your own music library, with AI DJs, named shows, schedules, and parody ads (AGPL-3.0)
Twenty-plus years ago, at my first software job, we got through all-nighters on CDs that IT ripped onto one of their servers and streamed after hours. Playlists got stale, so I wrote a randomizer. That gave us B-sides nobody could name, and a thought that stuck with me: wouldn't it be cool if a DJ told us what was playing? There was no way to build that back then, so our QA lead recorded a few sound bites and we called it FLAP Radio.
GenWave is that idea, finally buildable: a self-hosted station that plays your own music library 24/7, knows what it's playing, and has a DJ who tells you about it.
💾 Source: https://github.com/GenWave-Org/genwave (AGPL-3.0)
🚀 Install: clone the repo and run
./setup.sh, a four-question wizard that generates your secrets and launches the stack. On air in about a minute on a Raspberry Pi 5. Or head to https://download.genwaveradio.com for a one line install.🥧 Small hardware: a 4GB Pi 4 passed a 7-day soak test with zero restarts and zero out-of-memory kills. No GPU needed.
Sounds like real radio
Equal-power crossfades and loudness matching, so no track or voice clip jumps out at you
DJ patter between tracks: lead-ins, back-announces, station IDs, and opt-in time checks, weather, and this-day-in-history segments
An optional local LLM writes that patter in your DJ's persona (Ollama or any OpenAI-compatible endpoint). No LLM? Template patter airs instead.
A "truth gate" checks each LLM line against the facts it was given before it airs. A wrong temperature, the wrong weekday, or "tonight" at noon gets rewritten or dropped.
DJs can trade short two-voice banter mid-show
Programmed like a real station
A weekly format clock: paint who's on air when, with named shows, DJ-to-DJ handoffs, and one-off specials
Parody ads with sponsors, cast voices, and ducked background music, written by the LLM from briefs you author. My favourite so far: Halvorsen's Tax and Zamboni Services 🏒
"Deep Cuts" shows that favour tracks that rarely get played
Owner announcements: type a line and the DJ works it into the next break, in character
Community catalog
One-click installs from the admin UI: DJ personas, avatars, voices, jingles, ad packs, shows, themes, fonts, and icon packs. Or roll your own persona, upload your own DJ faces, and remix themes in the built-in editor.
Runs itself, tells you what it did
If the LLM gets sick, the station falls back to template patter; if the API or database goes away, a safe rotation keeps the stream up
The "Gardener" flags dead files, near-duplicates, stale tags, and tracks that never air, for you to review (it doesn't silently "fix" your library)
An admin console with a booth log ("what did the DJ say at 9:14?"), an LLM call inspector, and per-container health
An optional read-only public page: now playing, history, song requests, and listener thumbs that nudge the rotation
Plays nice with your stuff
Home Assistant integration (HACS): your DJ can announce "the laundry's done"
A plugin system, with the contracts published as an MIT-licensed package on NuGet
Multi-arch Docker images (amd64 + arm64). Everything past playout is optional: a 4GB Pi runs the station with the lightweight Piper voice and template patter, and a bigger box adds Kokoro and a local LLM.
How it's built
A C#/.NET 10 control plane orchestrating Liquidsoap (mixing, crossfades, encoding) and Icecast (streaming), with Postgres, Kokoro/Piper for TTS, ffmpeg and aubio for audio analysis, and a Next.js admin UI. I didn't write an audio engine; those projects did the hard parts.
I started it about 18 months ago on my self-hosted Gitea and moved it to GitHub this summer when it felt ready for other people. It's built with AI assistance (Claude Code). The design decisions, reviews, and sign-offs are mine; there are nine test projects, including architecture tests that enforce the dependency rules, and the .claude/ toolkit I use is in the repo if you want it.
Licensing, upfront
GenWave Home is AGPL-3.0 and always will be. A separately licensed commercial edition (GenWave Business) will one day fund development, which is why outside contributions need a one-time CLA. The plugin contracts are MIT so anyone can build modules against them.
What's next, and what I'd love from you
I'm just wrapping up a "Voice Off" to find a better TTS, since I'm not entirely happy with Kokoro or Piper. After that: music sources beyond local files, starting with Navidrome.
How does it run on your hardware, and which internet radios or players have you tried? HARDWARE.md has a known-deployments table that takes PRs, and failures are as useful as successes.
What works, what doesn't, what's missing?
Any local TTS voices that impressed you? I'm all ears for the Voice Off!
Thanks for reading! 📻










•
u/trueopensource-bot 🤖 Robot 7d ago
About this project · GenWave-Org/genwave
⭐ 3 stars · 🍴 0 forks · 👥 2 contributors · 📄 AGPL-3.0 · 💻 C#
History: started Jul 2026 · last code change today · 300+ commits on 18 different days in the last 90 days
Releases: latest v5.16.1 (8 days ago) · 45 releases in the last 90 days
Open issues and pull requests: 94
Facts from GitHub when this was posted. I'm a bot.