selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

SUB/WAVE logo

Self-host SUB/WAVE

v1.28.0

AI-powered internet radio station with automated DJ

ReleaseOpen SourceMIT
Docker ComposeFull install guide
curl -fsSL https://cli.getsubwave.com | sh # installs, then offers to init + start
Updatedyesterday
LanguageTypescript
Setup difficultyModerate
MobileNative app
ThemeDark mode
Stars
1 548
Ports
7700 (Web UI), 7701 (Controller API), 7702 (Icecast stream)
Requires
Liquidsoap
Docker
ghcr.io/perminder-klair/subwave-caddy
Player — the listener player on /listen showing live broadcast with song infoAdmin — Dash panel showing live status, queue, booth logAdmin — Personas showing the DJ roster with voices and habitsAdmin — Shows weekly schedule grid for 24x7 programming

What is SUB/WAVE?

SUB/WAVE is a personal internet radio station with an AI DJ that curates tracks and provides commentary including station idents, time checks, weather updates, and song intros. Users connect their own music library via Navidrome's Subsonic API—the DJ selects what plays based on moods, time of day, weather, and listener requests. The software runs entirely on a user's hardware through Docker Compose, broadcasting a single Icecast stream where every listener hears the same audio simultaneously. It supports multiple LLM providers (Ollama, Anthropic, OpenAI, Google) and six TTS engines for voice output.

Should you self-host SUB/WAVE?

SUB/WAVE scores 57/100 on selfhost.directory (how scoring works) and ranks #36 of 118 in Media Server. It has 1 548 GitHub stars, +12 in the last 30 days.

It shipped 10 stable releases in the past year. The latest, v1.28.0, came out on 26 October 2026. New versions land roughly every 2 days.

Setup is moderate: expect some configuration beyond a single command. An official Docker image is available. It is MIT-licensed and written mostly in Typescript.

Its closest alternative on selfhost.directory is Jellyfin (88/100, 58 793 stars). It scores higher overall, so compare the two before you pick. See SUB/WAVE vs Jellyfin side by side.

SUB/WAVE README

SUB/WAVE

A personal internet radio station. One Icecast stream, one broadcast. Every listener hears the same thing at the same time. An AI DJ picks the tracks and talks between them: station idents, time checks, the weather, a quick intro for whatever's going out next. You can ask for music in plain language; the DJ works out what you meant and slots it in.

It's radio, not a playlist. No per-listener shuffle, no skip button, no "up next for you." You tune in and hear whatever is on.

Showreel

How to install SUB/WAVE

Install SUB/WAVE with Docker

Environment variables
NAVIDROME_URL, NAVIDROME_USER, NAVIDROME_PASS; LLM URL + model set in admin UI
mkdir subwave && cd subwave
curl -O https://raw.githubusercontent.com/perminder-klair/subwave/main/docker-compose.yml
curl -O https://raw.githubusercontent.com/perminder-klair/subwave/main/.env.example
mv .env.example .env
# Edit .env: set ADMIN_USER, ADMIN_PASS, SITE_URL (three vars, that's it).
docker compose up -d
# Then open https://your-host/onboarding.
The web wizard collects Navidrome,
LLM, TTS, DJ persona, and offers to render jingles.

Skip CLI binary and use raw docker compose

How to configure SUB/WAVE

  • ADMIN_USERadminAdmin credentials gate the wizard + admin UI. Mandatory in prod (the controller refuses to boot without them when NODE_ENV=production).
  • ADMIN_PASS
  • SITE_URLPublic origin (used for absolute URLs, OG tags, manifest, sitemap). Example: https://radio.example.com
  • STATE_DIRStorage + locale
  • STEMS_DIROptional: place the stem cache on another disk. This HOST path is mounted into broadcast, controller and analyzer at a fixed container path, which the three of them read back as SUBWAVE_STEMS_DIR. Multi-station installs keep a per-station folder under it. Unset = the cache stays at <STATE_DIR>/stems. Moving it does NOT migrate what is already cached — `mv` the old contents across first, or the old

SUB/WAVE releases & version history

More in Media Server

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…