Quickstart
This guide will get you up and running with multi-scrobbler using Docker and docker compose. At the end of the guide you will have:
- the dashboard served on port
9078of a host machine which has an IP/domain of - data saved to the same directory as the
docker-compose.ymlfile - multi-scrobbler monitoring Spotify, Jellyfin, Navidrome, Plex, and/or Last.fm for listening activity
- multi-scrobbler scrobbling to Lastfm, Maloja, and/or Koito
Create Docker Compose File
Section titled “Create Docker Compose File”Create a new folder for multi-scrobbler related data and then create docker-compose.yml with this content:
services: multi-scrobbler: image: foxxmd/multi-scrobbler container_name: multi-scrobbler environment: - BASE_URL=http://YOUR_MS_DOMAIN # all Environmental Variables in below examples go here!
volumes: - "./config:/config" ports: - "9078:9078" restart: unless-stopped- 1.Specify timezone from TZ Database TZ identifier
Setup Sources
Section titled “Setup Sources”Sources are the services/music players multi-scrobbler monitors to look for listening activity.
Follow the Jellyfin configuration instructions for setting up an API Key.
Then, add these values to the environment section in the docker-compose.yml you created.
To access your Spotify activity you must create a Spotify App to get a Client ID/Secret and set a valid Redirect URI.
Refer to the Spotify Authentication instructions in the docs.
Assuming you used the HTTPS method for your Redirect URI from the instructions above…after the application is created add these values to the environment section in the docker-compose.yml you created.
- SPOTIFY_CLIENT_ID=yourClientId- SPOTIFY_CLIENT_SECRET=yourClientSecret- SPOTIFY_REDIRECT_URI=https://YOUR_MS_DOMAIN/callback- SPOTIFY_ID=mySpotifyLater, after starting multi-scrobbler, visit the dashboard at and click (Re)authenticate on the Spotify card to authorize multi-scrobbler to use your account. Monitoring will begin automatically after authorization is complete.
Navidrome supports scrobbling using Listenbrainz. You should use this, rather than a Subsonic Source because Navidrome’s internal scrobbling functionality supports providing multiple artists and offline scrobbling while the Subsonic Source does not.
To setup Navidrome to scrobble to multi-scrobbler via the Listenbrainz option:
Create Listenbrainz Endpoint Source
Section titled “Create Listenbrainz Endpoint Source”Create a new Listenbrainz Endpoint Source in multi-scrobbler by creating a token to use with the endpoint via ENV Config in environment section in the docker-compose.yml you created.
- LZE_TOKEN=myCoolToken- LZE_ID=navidromeLZThe token can be anything. (Re)start multi-scrobbler after making this change.
Configure Navidrome
Section titled “Configure Navidrome”Set the ListenBrainz.BaseURL (env ND_LISTENBRAINZ_BASEURL) to http:// in your Navidrome installation. Assuming you are using the docker installation, modify environment to add:
- ND_LISTENBRAINZ_BASEURL=http://YOUR_MS_DOMAIN/1/Restart Navidrome after making this change. Then, follow the directions for enabling Listenbrainz scrobbling in Navidrome. The Listenbrainz user token is the token you created for LZE_TOKEN earlier.
Find your Plex Token and make note of the URL and Port used to connect to your Plex instance.
Add these values to the environment section in the docker-compose.yml you created.
- PLEX_URL=http://192.168.0.101:32400- PLEX_TOKEN=6c0ihz8j7__f5r18oa0zm8- PLEX_ID=myPlex#- PLEX_USERS_ALLOW=myPlexUsername1- 1.optional, restrict scrobbling to a list of comma-delimited users
Restart multi-scrobbler to create the new Source. You may wish to refer to the User and Library defaults/filtering in the Plex Source docs for a more granular setup.
If you are already scrobbling to Last.fm and wish to mirror your scrobbling activity to one or more other Clients, use this Source.
If, instead, you want to scrobble from multi-scrobbler to Last.fm then see the Last.fm tab in the Setup Clients section below.
Register for an API account at Last.fm.
Use the following for Callback URL:
http://YOUR_MS_DOMAIN/lastfm/callbackAfter account creation make note of the Api Key and Secret that are displayed.
Add these values to the environment section in the docker-compose.yml you created.
- SOURCE_LASTFM_API_KEY=MY_API_KEY_PLACEDHOLDER- SOURCE_LASTFM_SECRET=MY_SECRET_PLACEHOLDER- SOURCE_LASTFM_REDIRECT_URI=http://YOUR_MS_DOMAIN/lastfm/callback- SOURCE_LASTFM_ID=myLFMSourceLater, after starting multi-scrobbler, visit the dashboard at http:// and click (Re)authenticate on the Last.fm (Source) card to authorize multi-scrobbler to use your account. Monitoring will begin automatically after authorization is complete.
(Optional) Correct Scrobbles with Musicbrainz
Section titled “(Optional) Correct Scrobbles with Musicbrainz”Multi-scrobbler can use Musicbrainz to match activity from your Sources in order to fill in missing data, or correct/normalize existing data, before it is scrobbled to the Clients below. This step is optional.
Musicbrainz Setup Instructions
Configure Musicbrainz API
Add these value to the environment section in the docker-compose.yml you created.
- 1.how musicbrainz searches and selects matches: isrc => then tries basic text fields => then tries extracted artists
Presets are found here.
Enable Musicbrainz For A Source
Musicbrainz can be enabled for multiple Sources. Follow the directions in each tab to enable it for that Source.
Add this value to the environment section in the docker-compose.yml you created.
- JELLYFIN_TRANSFORMS=musicbrainzAdd this value to the environment section in the docker-compose.yml you created.
- SPOTIFY_TRANSFORMS=musicbrainzAdd this value to the environment section in the docker-compose.yml you created.
- LZE_TRANSFORMS=musicbrainzAdd this value to the environment section in the docker-compose.yml you created.
- PLEX_TRANSFORMS=musicbrainzModify the lastfm.json file you created in the Setup Sources step to add the highlighted section in the example below. The comma at the top highlighted section is important!
[ { "name": "myLastFmSource", "configureAs": "source", "data": { "apiKey": "MY_API_KEY_PLACEDHOLDER", "secret": "MY_SECRET_PLACEHOLDER", "redirectUri": "http://YOUR_MS_DOMAIN/lastfm/callback" }, "options": { "playTransform": { "preCompare": { "type": "musicbrainz" } } } }]Setup Clients
Section titled “Setup Clients”Clients are services that store scrobbles. Multi-scrobbler will scrobble all listening activity from the Sources you configured to all Clients you configure here.
Setup a Koito server if you have not already done this.
- Create (or get) an API Key
- From your Koito server dashboard navigate to Settings (bottom-left icon) => API Keys
- Create a new Key (or use an existing) and Copy the key using the copy icon to the right of the key
- EX
pM195xPV98CDpk0QW47FIIOR8AKATAX5DblBF-Jq0t1MbbKL
- EX
- Take note of your Koito username (used below as
) - Determine your Koito URL
- This is the URL you use to access your Koito dashboard OR whatever URL is accessible from your multi-scrobbler instance.
- EX dashboard at
http://192.168.0.100:4110=> replacebelow with http://192.168.0.100:4110 - More info on the URL to use is the full docs
Add/Substitute values above into these examples values and add them to the environment section in the docker-compose.yml you created for multi-scrobbler earlier.
- KOITO_TOKEN=myToken- KOITO_USER=myUser- KOITO_URL=myURL- KOITO_ID=myKoitoRegister for an API account at Last.fm.
Use the following for Callback URL:
http://YOUR_MS_DOMAIN/lastfm/callbackAfter account creation use the displayed information and add these values to the environment section in the docker-compose.yml you created for multi-scrobbler earlier.
- LASTFM_API_KEY=myApiKey- LASTFM_SECRET=myApiSecret- LASTFM_ID=myLfmClientSetup a Maloja server if you have not already done this.
Maloja Setup Intructions
Using Maloja’s example docker-compose.yml:
services: maloja: # from dockerhub image: "krateng/maloja:latest" # or built locally #build: # context: . # dockerfile: ./Containerfile ports: - "42010:42010" # different directories for configuration, state and logs volumes: - "$PWD/config:/etc/maloja" - "$PWD/data:/var/lib/maloja" - "$PWD/logs:/var/log/maloja" #you can also have everything together instead: #volumes: #- "$PWD/data:/data" #environment: #- "MALOJA_DATA_DIRECTORY=/data"Uncomment environment and add MALOJA_FORCE_PASSWORD=CHANGE_ME to set an admin password
Start the container:
docker compose up -d- Navigate to the Admin Panel (Cog in upper-right corner) -> API Keys (or at http://192.168.0.100:42010/admin_apikeys)
- Create a New Key and then copy the generated key value
Finally, add these values to the environment section in the docker-compose.yml you created for multi-scrobbler earlier.
- MALOJA_URL=http://192.168.0.100:42010- MALOJA_API_KEY=myApiKey- MALOJA_ID=myMalojaStart Multi-Scrobbler
Section titled “Start Multi-Scrobbler”From the same directory as the docker-compose.yml you created earlier start the container:
docker compose up -dYou’re done! Multi-scrobbler is now running. It will monitor the sources you configured and scrobble to clients you set up.
Visit http:// to see the dashboard where
- configured Sources/Clients
- show current status and authentication options
- display statistics about discovered/scrobbled tracks and Now Playing status
- a real-time log shows multi-scrobbler’s activity
Next Steps
Section titled “Next Steps”- If your instance is accessible from the public internet, read Securing Multi-Scrobbler
- See more advanced docker options as well as other install methods in the Installation docs
- Setup secondary caching with valkey for increased performance and reduced memory usage
- Review the Configuration docs
- Learn about how to configure multi-scrobbler using files for more complicated Source/Client scenarios
- See all available Sources and Clients alongside configuration examples
- Learn how to set up notification webhooks
- Check out the kitchensink example
- Setup Scrobble Enhancements with Musicbrainz to automatically correct and fill in missing track information for your scrobbles
- Consult the FAQ for solutions to common problems