Skip to content

v0.3.0

Choose a tag to compare

@nilicule nilicule released this 15 May 21:46
· 63 commits to main since this release

Added

Relay

  • New [[relays]] config block — each entry pulls from a remote Icecast-compatible URL and re-broadcasts on a local mount. Optional HTTP Basic auth, optional per-relay [relays.transcode] (falls back to global [transcode], passthrough when unset).
  • Reconnect-on-failure with exponential backoff (1 s → 30 s cap). Resets on successful connect.
  • Live Icecast sources connecting to a relay-owned mount preempt the relay until they disconnect, then the relay reconnects automatically. /api/mounts exposes source_kind = "relay" to disambiguate from live and AutoDJ sources.

Stream detail page

  • Public per-stream detail page, reached by clicking a stream on the landing page (landing entries now open this page instead of the raw stream URL).
  • Built-in in-browser player — a custom play/stop control driving an HTML5 <audio> element, with an offline state for mounts with no live source.
  • Real-time audio visualizer with a bars (frequency spectrum) / line (oscilloscope waveform) toggle, driven by the Web Audio API; synthetic-motion fallback when Web Audio is unavailable.
  • Now-playing card showing the live title, description, genre, listener count, uptime, and a compact codec / bitrate / sample-rate / channels spec line.
  • Stream responses now send Access-Control-Allow-Origin: * so the browser can analyse the audio cross-origin for the visualizer.

Fixed

  • Suppress symphonia_metadata INFO noise from the default logger so AutoDJ folders with tagged audio no longer flood the console with unsupported frame GEOB (and similar) lines.
  • Live sources can now preempt an AutoDJ or Relay on a mount that has no [[mounts]] entry of its own. verify_source falls back to the global [auth].source_password when no per-mount password is configured — previously such PUTs were always rejected with 401, so the live-source preemption promised by the AutoDJ feature never actually worked.