Logs & Metadata
Runtime logs
The scheduler and pipeline write logs under LOG_ROOT (E:/radionew/logs on the
local node). The production worker writes as-run logs under
/home/sms/radio/logs.
| Log | Source | Contains |
|---|---|---|
| Scheduler run log | smart-scheduler.js | Selections, cooldown decisions, arm updates, fetch activity |
| Pipeline log | content-pipeline.js | Discovery, sanitize results, loudness, sync results, errors |
| As-run log (prod) | Liquidsoap worker | Timestamped every played file — the air-check record |
As-run CSV
The worker records one line per played file:
timestamp,file,artist,title,duration,category
2026-08-03T14:00:05,music/arabic_hits/amr_diab_x.mp3,Amr Diab,…,271.3,arabic_hits
Why it matters
- Air-check: verify what actually went to air (vs. what was scheduled).
- RL training data: the neural variants and bandits learn transition patterns from this history.
- Compliance: a complete record of everything broadcast.
Media registry (meta_registry.json)
The registry is the metadata store the scheduler reads. See Registry & Metadata for the schema and how entries are derived and repaired.
Rundown JSON
scripts/regenerate-rundown.js produces a per-category JSON inventory with
defaults (artist: "LOKLOK System", energy: 5) when tags are missing. See
Rundown generation.
Download archive
yt_download_archive.txt records every fetched YouTube video ID to prevent
re-downloading. retag_library.js backs it up before truncating on a clean
reload.
Telemetry (live)
stats_update(listeners, bandwidth, history) — listener count is MediaMTX HLS via the read-only proxy:19353(Icecast fallback), pushed over Socket.io.timeline_update(queue) — upcoming tracks for the monitor page.GET /api/status— snapshot of now-playing + telemetry.