lanradio
v1.0.0
Published
Broadcast audio to every device on your Wi-Fi — secure, zero-config LAN radio station with HLS streaming, station branding and live DJ metadata
Downloads
96
Maintainers
Readme
📻 lanradio
Turn your computer into a Wi-Fi radio station. Anyone on your network opens a URL and hears your audio — live, smooth, secure.
Browser tab (Spotify / YouTube / anything)
↓ Chrome extension captures tab audio
lanradio server ──ffmpeg──▶ HLS stream
↓
📱 every phone, tablet & laptop on your Wi-FiInstall
npm install -g lanradioYou also need FFmpeg:
| OS | Command |
|---|---|
| macOS | brew install ffmpeg |
| Windows | winget install ffmpeg |
| Linux | sudo apt install ffmpeg |
Quick start
lanradio init # station name, DJ name, port, HTTPS — 30 seconds
lanradio # on air 🎙The console prints your listener URL — share it with anyone on your Wi-Fi:
╔════════════════════════════════════════════════════╗
║ 📻 Midnight FM ║
║ 🎧 DJ Jahid ║
╠════════════════════════════════════════════════════╣
║ Listen: http://192.168.1.42:8012 ║
║ Secure: https://192.168.1.42:8443 ║
╚════════════════════════════════════════════════════╝Broadcast with the LAN Radio browser extension (captures any tab's audio — no virtual audio drivers needed), or pipe anything in with FFmpeg:
ffmpeg -f avfoundation -i ":0" -f webm -content_type "video/webm" \
-headers "X-Broadcast-Key: $(lanradio key)" http://localhost:8012/liveFeatures
- One-command setup —
lanradio initconfigures everything - Plays everywhere — HLS + AAC: Android, iPhone, desktop, smart TVs
- Gapless & smooth — fMP4 segments, hls.js player with auto-recovery
- Station branding — station name, DJ name, tagline, accent color
- Live "Now Playing" — update track info from the extension while on air
- Listener analytics — live listener count on the player and in
/status - Secure by default
- Broadcast endpoints require a SHA-256-verified key (timing-safe compare)
- Broadcasting locked to localhost unless explicitly opened
- Optional HTTPS with auto-generated certificates (encrypted packets on the LAN)
- Rate-limited auth, body-size caps, hardened headers, zero-trust public surface (read-only)
Commands
| Command | What it does |
|---|---|
| lanradio | Start the station |
| lanradio init | Interactive setup |
| lanradio key | Print your broadcast key |
| lanradio config | Print config file path (~/.lanradio/config.json) |
API
| Endpoint | Auth | Description |
|---|---|---|
| GET / | — | Listener player page |
| GET /hls/live.m3u8 | — | HLS stream |
| GET /status | — | { broadcasting, listeners, uptimeSeconds, nowPlaying } |
| GET /api/info | — | Station branding |
| POST /live-chunk | 🔑 | Extension audio chunks (WebM/Opus) |
| POST /live | 🔑 | Direct stream (FFmpeg, any format) |
| POST /api/nowplaying | 🔑 | Update now-playing text |
🔑 = requires X-Broadcast-Key header.
License
MIT
