Professional web interface for radio moderators and DJs. Provides access to music from OpenSubsonic-compatible servers with live streaming to AzuraCast.
Available on multiple platforms:
- 🌐 Web Browser (Docker/Node.js)
- 💻 Desktop App (Electron - Windows/macOS/Linux)
- 📱 Android App (Native with embedded Node.js server)
- Music library browser for OpenSubsonic servers (Navidrome, Gonic, Ampache, Astiga, etc.)
- 4-deck audio player with crossfader
- Microphone input with live mixing
- Direct streaming to AzuraCast
- Smart metadata transmission
- Browser-based interface with native desktop/mobile apps
docker pull ghcr.io/lokke/subcaster:latest
docker-compose -f docker-compose.env.yml up -dnpm install
npm run electron:devnpm install
npm run android:init
npm run android:sync
npm run android:open📖 See PLATFORM_BUILDS.md for complete platform-specific instructions.
Non-commercial use only.
See LICENSE and COMMERCIAL-LICENSE.md for details.
This project uses Material Icons (MaterialIcons-Regular.woff2) provided by Google under the Apache License 2.0. See LICENSE-MATERIAL-ICONS for the full license text.
The easiest way to run SubCaster is using the pre-built Docker image from GitHub Container Registry:
# Pull latest image
docker pull ghcr.io/lokke/subcaster:latest
# Run with docker-compose
docker-compose -f docker-compose.env.yml up -dImage automatically rebuilds on every commit! ✅
We provide 3 deployment configurations:
| File | Use Case | Documentation |
|---|---|---|
docker-compose.production.yml |
Standalone (all ENV in file) | For Portainer/Remote |
docker-compose.env.yml |
With .env file |
Recommended |
docker-compose.ghcr.yml |
Minimal | Manual config |
📖 Full deployment guide: DOCKER_DEPLOYMENT.md
📖 CI/CD setup: DOCKER_CI_CD.md
Create a .env file with your configuration:
# Copy example
cp .env.example .env
# Edit with your values
nano .envEssential Variables:
VITE_OPENSUBSONIC_URL- Your music server URLVITE_AZURACAST_SERVERS- Your radio server URL(s)VITE_DISCORD_CHANNEL_ID- Discord channel for song requests (optional)
Security Note: 🔒
- Variables with
VITE_prefix are public (embedded in frontend) - Variables without
VITE_are private (server-side only) - Never put secrets in
VITE_*variables!
Full variable list: See .env.example or DOCKER_DEPLOYMENT.md
# Pull new image
docker-compose -f docker-compose.env.yml pull
# Restart with new version
docker-compose -f docker-compose.env.yml up -dCheck logs:
docker logs -f subcasterInstall dependencies:
npm installConfigure streaming in .env:
VITE_STREAM_USERNAME=username
VITE_STREAM_PASSWORD=passwordStart development server:
npm run devOpen interface at http://localhost:5173