Radiotomate release notes#

How to download the latest Radiotomate:

podman pull docker.io/martinkirch/radiotomate-webapps:latest
podman pull docker.io/martinkirch/radiotomate-playout:latest

Before launching the update, we advise you read release notes for the version you're updating to because you might have to update your configuration before launching the update.

Updates are performed automatically when starting, so restart when ready:

systemctl --user restart radiotomate.service

⚠️ your radio stream will be interrupted during the update ⚠️

0.2: Released SOON, after N commits#

This second beta brings some major improvements:

  • translated interface and documentation. Starting in french and open to contributions to speak new languages.
  • a "Music library" tab, to let you add and edit music that will be used by the AutoDJ.
  • improved randomization to avoid repetitions: jingles are now played as randomized playlists, auto-DJ repeatedly shuffles and enforces a configurable distance between each artist's tracks.
  • jingles carts are now associated to auto-DJ slots, so these slots also restrict when jingles are playing.
  • Moved sources to Heptapod, to enjoy the most comfortable setting for Mercurial. Thanks to Orbeet and Clever Cloud for foss.heptapod.net!

It also settles the settings system: existing installations will be easier to update to upcoming versions.

Other changes:

  • embed the generated doc in radiotomate/static
  • link to "playback logic" doc from the carts and autoDJ pages.
  • proper end-to-end tests for History
  • create Cart.schedule_summary(), so schedules are quickly readable from the Carts list
  • relay: show current URL when on /live
  • ui: separated form flows for sounds/jingles/relay carts, max_duration available via a checkbox
  • installer can pre-configure the Pulseaudio output (so test on a linux desktop will be simpler)
  • add "randomized playlist" mode, make it default for jingles
  • configuration loader includes meaningful defaults to ease later updates

0.1#

This first beta release settles Radiotomate's architecture by implementing the most important features:

  • Auto-DJ as non-overlapping time period that select via a (weighted) Beets filter(s)
  • Carts as a collection of sounds picked in order or randomly
  • "simple" mode for timed carts: pick a weekday and a HH:MM
  • "advanced" mode: cron formulas for timed carts
  • Relay external streams
  • External stream input
  • Automated switch to the first available source among external/relay/carts/autoDJ
  • "Live" page displaying what's currently playing
  • Log metadata and relay it to other HTTP endpoints
  • Configurable outputs, to Icecast or ALSA
  • Apply replay gain to music, carts and jingles
  • Basic user account creation and access rights
  • A minimalist History page
  • A fairly complete automated test suite that also checks the interface remains accessible to screen readers
  • A command-line interface for installation, updates and user management

All of that implemented in light, asynchronous web-apps, storing to SQlite and rendering server-side, using HTMX when we need some dynamic rendering.

It also comes with an automated pod creator, using two images: a playout container, based on Liquidsoap's, and a webapps container.

The installer hardcodes that interface is on :6811, scheduler on :6822, playout on :6833 and playout input on :6800 - we leave ports choice to the host, and the pod creation provides:

  • transparent paths bindings in containers, so application's data has the same path in and outside the contaniner
  • provide beets and radiotomate commands working on the usual $PATH outside the container
  • a parameter to configure pulseaudio bind or not
  • ... without ever being root

And minor/less visible things:

  • automated developer environment installation
  • carts' maximum duration
  • integrate beets 2.5, with drop2beets
  • ensure external.stop when switching to live
  • configurable logging to files
  • Liquidsoap script crash when no output is configured, and suggests to check the config
  • save who uploaded a sound/music
  • ability to push cart on the autodj queue (for promo spots)
  • so much documentation!