diff --git a/CLAUDE.md b/CLAUDE.md index 230d8b3..4770aa3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -37,10 +37,12 @@ On the Storage Box, mounted at `/mnt/trashbox/denpa-radio/library/` on summer: / # id must match [a-z0-9-]+ ├── _meta.yml # name, description, color, tags ├── cover.{jpg,png,webp} # optional; served by /api/stations//cover -├── tracks/ # any decoder-supported audio (flac, mp3, opus, m4a, wav, ogg) +├── tracks/ # audio files; subdirs supported (e.g. tracks/Volume Alpha/, tracks/Singles/) └── jingles/ # optional, currently unused in v1 ``` +Liquidsoap's `playlist()` recurses into subdirectories of `tracks/` by default — organize by album/source however you like. Any decoder-supported audio works (flac, mp3, opus, m4a, wav, ogg). Non-audio files in `tracks/` will be picked up and fail to decode (FFmpeg returns no audio stream); keep cover art and other non-audio at the station root, NOT inside `tracks/`. + Adding a station: mkdir + `_meta.yml` + tracks → edit `config/liquidsoap.liq` to add a new station block following the `# === station: ===` pattern → tar-pipe the script and `docker compose restart liquidsoap` on summer. The frontend's `/api/stations.json` picks up the new entry within ~30s (Cache-Control max-age) without a rebuild. No Caddy reload, no Icecast restart. ## Deployment target ("summer") diff --git a/README.md b/README.md index 4bdf052..ed363d1 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ three docker containers (icecast, liquidsoap, frontend) and a Caddy host service on the storage box (mounted at `/mnt/trashbox/denpa-radio/library/` on summer): ``` -mkdir /{tracks,jingles} +mkdir -p /{tracks,jingles} cat > /_meta.yml </tracks/ -# (optional) drop cover.jpg into / +# subdirs supported: tracks/Volume Alpha/, tracks/Singles/, etc — Liquidsoap recurses +# (optional) drop cover.jpg into / (NOT inside tracks/ — would fail to decode) ``` then on summer: