Multi-source radio app for browsing, streaming, downloading, scheduling, and organizing shows from RTE, BBC Sounds, Worldwide FM, NTS, FIP, and KEXP.
Runtimes: Electron desktop · Express web/server on port 8080 (default).
- Live playback and per-source explorers; episode downloads via
yt-dlpandffmpeg - BBC programme metadata uses the on-page masthead title link (
.br-masthead__title) when present, in addition to structured data, so presenter names stay accurate when titles differ fromog:title m4a/mp3with artwork, tags, tracklists, chapters; optional.cuesidecars (cueAutoGenerate/id3Taggingin settings)- Queue (prefer queue when something is already playing), persistent download queue with pause/resume/retry, schedulers with backfill and retries
- Per-program rules: folders, path tokens (
{program},{episode},{host},{hosts},{source_type}, dates), retention, rerun skipping - Library (main hub): You may like (cross-source picks from subscriptions + discovery cache, source-balanced), Library Jump, subscriptions, collections, metadata explorer & harvest (including subscription-based suggestions), entity graph, feeds, queue, history, diagnostics, source health, vendor repair
- Accessibility: skip link to the Library, visible :focus-visible outlines, labeled Library Jump nav and metric summaries, improved contrast on metric detail text, theme toggle and health cards exposed to assistive tech
Desktop
npm install
npm startWeb / server
npm install
npm run start:serverOpen http://localhost:8080/.
Docker
docker compose up -d --buildTypical env: PORT=8080, DATA_DIR=/data, DOWNLOAD_DIR=/downloads, TZ=Europe/Dublin. Image is server-mode only. See DOCKERHUB_README.md for Hub-focused instructions.
- Node.js 20+
yt-dlp,ffmpeg(desktop/Docker can use bundledvendor/binaries)
Optional: AtomicParsley, songrec, fpcalc, AudD / AcoustID keys for recognition features.
| Command | Purpose |
|---|---|
npm start |
Electron |
npm run start:server |
Express |
npm test / npm run lint |
CI |
npm run bootstrap:all-binaries |
Vendor binaries |
npm run pack:win / pack:mac |
Desktop packages |
| Mode | Where |
|---|---|
| Desktop | Electron user-data directory |
| Server | DATA_DIR — settings, schedules, feeds, queue/history, collections, harvested + materialized metadata, graph snapshots |
DOWNLOAD_DIR — audio files |
src/main.js, server.js, preload.js — entries
src/lib/ — adapters, queue, scheduler, metadata, diagnostics
src/renderer/ — UI
scripts/ — bootstrap, packaging helpers
vendor/ — yt-dlp, ffmpeg, optional tools
| File | Role |
|---|---|
README.md |
This overview |
CLAUDE.md |
Short repo ops |
CONTEXT.md |
Deep engineering reference |
DOCKERHUB_README.md |
Docker Hub copy |
- Failed downloads → Library diagnostics (binaries, paths).
- Missing chapters/tracklists → History Rebuild Tags/Chapters after fixing settings.
- Thin metadata → source health; Reharvest / Deep Reharvest.
- Empty You may like → add subscriptions and refresh the discovery cache (Metadata Explorer).
- Missing vendor tools → Repair Binaries in Diagnostics.
MIT