Tapes plugin for Lyrion Music Server: Tapes are like playlists, but they remember the position within the currently playing track in addition to the current track itself. Whenever you play a tape - even after other content has played in the meantime, or after a server restart - it resumes from the point at which it was last interrupted.
  • Perl 99.5%
  • HTML 0.5%
Find a file
2026-06-15 11:01:36 +01:00
Tapes Repo and install xml file updates for v0.28. Also updated README.md with updated renaming behaviour from fix in previous commit. 2026-06-15 11:01:36 +01:00
.gitignore Add README and .gitignore 2026-05-11 19:00:40 +01:00
README.md Repo and install xml file updates for v0.28. Also updated README.md with updated renaming behaviour from fix in previous commit. 2026-06-15 11:01:36 +01:00
repo-stag.xml Repo and install xml file updates for v0.28. Also updated README.md with updated renaming behaviour from fix in previous commit. 2026-06-15 11:01:36 +01:00
repo.xml Repo and install xml file updates for v0.28. Also updated README.md with updated renaming behaviour from fix in previous commit. 2026-06-15 11:01:36 +01:00

Tapes plugin for Lyrion Music Server

Tapes are like playlists, but they remember the position within the currently playing track in addition to the current track itself. Whenever you play a tape - even after other content has played in the meantime, or after a server restart - it resumes from the point at which it was last interrupted.

Think of it like a cassette in a tape deck: take it out, drop it back in next week, hit play, and it carries on where you left off.

This plugin has been developed with a Large Language Model (Amp).

What it does

  • Adds a Tapes app to LMS (under Apps in the web UI / Material Skin / Jive).
  • Lets you create a Tape from the current play queue, or convert any saved playlist into a Tape via that playlist's context menu.
  • A Tape played from the Tapes app expands into its tracks and seeks to the saved offset within the saved track index.
  • Position is snapshot to disk on pause, stop, track change, power off, player disconnect, server shutdown, and - optionally - on a configurable periodic heartbeat (default off).
  • After a server restart the per-player active-Tape association is restored - provided the queue LMS restores from disk still matches the Tape's tracks exactly - and playback resumes from the saved position when you hit play.
  • Stop+Play resumes (instead of LMS's default "restart current track from 0:00").

Usage

You can create a Tape as follows:

  • From the current playing queue by going to Apps -> Tapes -> Save current playlist as a tape (you can enter a name here, too, otherwise it saves as the current time); or
  • From a playlist menu -> More -> Convert this playlist to a tape

You can rename, delete, or rewind a Tape to the beginning from Apps -> Tapes -> Manage tapes, as well as delete or rewind a Tape from the three dot menu on each Tape.

Play a Tape by clicking on the Tape from the Apps -> Tapes menu. They will start from wherever you last paused / stopped the Tape, no matter which playing device you play the Tape to.

It is worth noting that playing a Tape on multiple devices at the same time (not using Grouped Players) may produce some unexpected positions. The last device to stop / pause will be the one that stores the position.

If the Tape is already in the current queue then it should always start from where it left off.

Material Skin

There is a Tapes Scrollable List for the Home Screen. To enable it tick the Tapes checkbox in Interface Settings -> Home Screen Items -> Scrollable Lists.

Installation

Using the repository

  • Add the following URL to your Additional Repositories in Server settings -> Manage plugins: https://toby.bryans.org/lms/repo.xml
  • A new plugin list should be added: "Toby Bryans' LMS Plugins" with the Tapes plugin listed
  • Tick the box to install and enable the plugin

Configuration

Settings → Advanced → Tapes exposes:

  • Position-save interval (seconds): how often the periodic heartbeat writes the current position to the prefs file while playback is in progress. Default 0, which disables the heartbeat entirely; the position is then only written on pause, stop, track change, power off and disconnect, which should be enought for most use cases.

CLI commands

tapes list
tapes new <name>
tapes delete <id>
tapes rename <id> <name>
tapes addtrack <id> <url>
tapes rewind <id>
tapes play <id>
tapes convert_playlist playlist_id:<id>

Storage

All tapes and per-player active-tape state live in the plugin pref file:

/var/lib/squeezeboxserver/prefs/plugin/tapes.prefs

The format is YAML, one hash keyed by tape UUID.

License

GPL v2 (matching LMS itself). See individual file headers for full notice.