Radiotomate release notes#

To update radiotomate, see the Updating section of the Maintenance page

Upcoming#

  • bug fixes

0.3.0: Released August 9, 2026, after 35 commits#

This third beta integrates a first round of feedback from testers (thanks!). Biggest changes happened to radiotomate install, that now launches a whole new Web application acting like an install wizard.

It also brings a clearer interface and documentation. And a few fixes. Notable changes:

  • Jingle carts are now available from the AutoDJ page only?
  • Removed the confirmation step when editing music tracks' tags.
  • Added a "Help" button to the navigation bar, leading to a documentation-specific start page.

0.2.0: Released May 17, 2026, after 108 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!

Prior work#

Radiotomate benefits from experience gained while developing showergel and radioz. Those prototypes have been running Radio Campus Grenoble's programs since 2021. Some details of their implementation have been presented online during some Liquidsoap workshops: find out Martin Kirchgessner's presentations in edition #1, #3, #5.