A minimal MPRIS → Last.fm scrobbler daemon for Linux, porting the scrobbling core of pano-scrobbler: its metadata cleanup (YouTube title parsing, remaster/explicit stripping, user regex rules), scrobble timing rules, and offline queue — without the GUI.
go build -o ~/.local/bin/panobble ./cmd/panobble- Create a Last.fm API account: https://www.last.fm/api/account/create
- Copy
contrib/config.example.tomlto~/.config/panobble/config.tomland fill inapi_key/api_secret. - Log in (opens a browser):
panobble auth - Discover your players and add them to
[players].allowed:panobble players - Run it:
panobble daemon— or install the systemd user unit:
cp contrib/panobble.service ~/.config/systemd/user/
systemctl --user enable --now panobble| command | |
|---|---|
panobble daemon |
run the scrobbler in the foreground |
panobble auth |
log in to Last.fm |
panobble players |
list current MPRIS players and their config ids |
panobble parse [--host H] ARTIST TITLE [ALBUM] |
dry-run the cleanup pipeline |
panobble pending [--flush] |
list / submit queued offline scrobbles |
panobble version |
print the version |
Set PANOBBLE_DEBUG=1 for debug logs.
- Only players in
[players].allowed(ids normalized: chromium's.instanceNNNsuffix is stripped). Hostnames in[players].blocked_hostnamesnever scrobble. - A track qualifies after
min(50% of its duration, 4 min), minimum 30s (also the delay when the duration is unknown); paused time doesn't count. The scrobble is committed when the play actually ends — track change, stop, player exit, replay, or daemon shutdown — so last.fm never shows a track as both scrobbled and now-playing. Qualified tracks are journaled on disk, so a crash before the commit loses nothing. - Tracks are cleaned first: placeholder metadata dropped,
(2004 Remaster)and(Explicit)suffixes stripped, YouTube video titles parsed into artist/track, then your[[rule]]regex edits —contrib/config.example.tomlhas examples, including block rules. - By default a track only scrobbles when artist, title and album are all
present (
require_album, on by default) — the heuristic that skips YouTube videos while scrobbling YT Music. Turn it off if your players report untagged files or radio streams. - Failed submissions queue in
$XDG_DATA_HOME/panobble/pending.jsonland retry on start, hourly, and after the next successful scrobble.
The regex rule set lives in rules/*.json as plain, RE2-compatible JSON —
deliberately language-neutral so it can be reused by ports (each file notes
the pano-scrobbler source it was extracted from).
GPL-3.0, as it derives logic from pano-scrobbler. Test fixtures in
testdata/ originate from web-scrobbler via pano-scrobbler.