BEETBRAINZ-REPLAY(1)

πŸ“¦ version 1.13.1, in fedora 44

πŸ’– BEETBRAINZ-REPLAY πŸ’–

okay bestie, welcome to the beetbrainz-replay(1) manual β€” section 1, User Commands, she's a little command-line icon and she's here to save your scrobbles ✨


🌸 NAME 🌸

beetbrainz-replay β€” replays all your queued Beetbrainz scrobbles from the local spool directory. like, it literally goes and rescues them 🫢


πŸŽ€ SYNOPSIS πŸŽ€

beetbrainz-replay

no flags, no args, no drama. just vibes. πŸ’…


πŸ¦‹ DESCRIPTION πŸ¦‹

so here's the tea: beetbrainz-replay resubmits scrobbles that beetbrainz(1) already wrote to disk back when ListenBrainz was unavailable. she kept receipts, and now she's mailing them in.

Those scrobbles live as append-only JSON Lines (.jsonl) files inside the spool directory. every single line is a complete ListenBrainz payload, exactly as it would have been submitted. no editing, no remixing, the original thing fr fr. ✨

The replay command reads those files and tries to resubmit the scrobbles to ListenBrainz using the same configuration and authentication tokens as the running beetbrainz service. same fit, same energy. πŸ‘‘


πŸ”₯ BEHAVIOR πŸ”₯

Replay has the following properties, and honestly? she ate:

  • Processes spool files in chronological order β€” oldest tea first, no skipping the line ⏳
  • Preserves original timestamps (listened_at) β€” the moment stays the moment πŸ’–
  • Skips playing_now entries β€” we don't do half-finished over here, periodt πŸ™ˆ
  • Deletes spool files only after successful submission β€” no deleting before the mission is complete, that would be a crime πŸ’€
  • Safe to re-run at any time β€” run her again, run her ten times, she's chill like that 🧚
If ListenBrainz is unavailable during replay, files are left intact and no data is lost. she's not gonna ghost your scrobbles bestie, she's just gonna wait. 🌈

⭐ AUTOMATIC REPLAY ⭐

A user-level systemd service and timer are typically provided, because who has the energy to run things manually:

  • beetbrainz-replay.service
  • beetbrainz-replay.timer

When enabled, the timer periodically executes beetbrainz-replay β€” typically hourly β€” and automatically drains any backlog once ListenBrainz becomes reachable again. set it and forget it, main character energy only. πŸ‘‘

Enable automatic replay with:

systemctl --user enable --now beetbrainz-replay.timer

And if user lingering is enabled via:

loginctl enable-linger <username>

then the replay timer will keep running even when the user is logged out. she does not need you watching. she simply continues. πŸ’…


πŸ“ SPOOL DIRECTORY πŸ“

The spool directory is controlled by this environment variable:

  • BEETBRAINZ_SPOOL_DIR β€” the spot where all your spool files hang out. Default: ~/.local/state/beetbrainz/spool

If you don't explicitly set it, the default location is used. that's it, that's the whole vibe check. ✨


πŸ’œ EXIT STATUS πŸ’œ

  • 0 β€” Replay completed successfully, or no spool files were present. (either way, we're thriving 🌸)
  • 1 β€” An error occurred during replay, e.g. a network failure or a submission error. (ngl, not the moment 😭)

🌈 SEE ALSO 🌈

beetbrainz(1), beets(1), systemd(1), systemctl(1)

go read those too, the whole friend group is iconic. iykyk πŸ’–


πŸ‘‘ AUTHORS πŸ‘‘

gbcox β€” thank you for your service, we are obsessed 🫢


and that's the whole page, bestie!! this was the Beetbrainz Documentation for BEETBRAINZ-REPLAY(1), dated March 3, 2026. go drain that backlog. slay. πŸ’…βœ¨πŸŽ€πŸ¦‹

πŸ“¦ where this page comes from