Scrobbling to Last.fm

Musium can be set up to scrobble plays to Last.fm. Musium logs plays to its SQLite database. An enclosed script can batch-submit those plays to Last.fm. Running the script regularly ensures that all plays get scrobbled. Musium does not currently offer immediate scrobbling or now playing updates.

Authenticating

To scrobble to Last.fm, you need an API key and secret. Create those at last.fm/api/account/create. Ensure that the API key and secret are available in the environment as LAST_FM_API_KEY and LAST_FM_SECRET.

Next, you need to authorize the script to submit scrobbles to your account. In the repository, run

tools/scrobble.py authenticate

This will print a LAST_FM_SESSION_KEY, which you also need to put in the environment to be able to submit scrobbles.

Running manually

With the environment variables set up, run the scrobble command in the repository:

tools/scrobble.py scrobble /db_path/musium.sqlite3

The file to pass is the db_path as configured; this is where Musium tracks listens.

The script only scrobbles listens that originated from Musium itself, it does not scrobble imported listening history. Listens that were scrobbled successfully get marked as such in the database, so they are only scrobbled once.

With systemd

Systemd timers can be useful for scrobbling periodically. First create a one-shot service that runs the scrobble script:

[Unit]
Description=Musium Scrobbler

[Service]
Type=oneshot
ExecStart=/checkouts/musium/tools/scrobble.py scrobble /var/lib/musium/musium.sqlite3

# The values below are randomly generated examples, they are not real secrets.
# Replace them with your personal secrets.
Environment=LAST_FM_API_KEY=5d41402abc4b2a76b9719d911017c592
Environment=LAST_FM_SECRET=f330c2f5a4e075a21593f477b9ee967a
Environment=LAST_FM_SESSION_KEY=gE7P1f444dLu6NbZeMs4wb9V4roITlAF

[Install]
WantedBy=default.target

Write it to /etc/systemd/system/musium-scrobble.service. Then add a timer to start the script periodically:

[Unit]
Description=Musium Scrobbler

[Timer]
# Run daily, between 08:00 and 08:15 local time.
OnCalendar=*-*-* 08:00:00
RandomizedDelaySec=900

# Run after boot if the system was powered off at the previous scheduled time.
Persistent=true

[Install]
WantedBy=timers.target

Write it to /etc/systemd/system/musium-scrobble.timer, then start the timer:

systemctl daemon-reload
systemctl enable musium-scrobble.timer
systemctl start musium-scrobble.timer

On post-idle

It is possible to scrobble listens right after playback ends using a post-idle command. For this, set the exec_post_idle_path setting in your configuration file to a shell script. That script could either call scrobble.py directly, or it could systemctl start musium-scrobble.service if you also have the systemd unit set up as described above.