Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[Support] FoxxMD - multi-scrobbler

Featured Replies

Application Name: multi-scrobbler

Application Site: https://github.com/FoxxMD/multi-scrobbler

Github Repo: https://github.com/FoxxMD/multi-scrobbler

Docker Hub: https://hub.docker.com/r/foxxmd/multi-scrobbler

Template Repo: https://github.com/FoxxMD/unraid-docker-templates

 

Overview

 

multi-scrobbler is a web application for scrobbling music you play from multiple sources to multiple scrobble clients. It's aim is 1) to provide a self-hosted alternative to capturing track plays and 2) fill in the gaps for track sources and scrobble clients that don't have existing methods of communication.

 

I am the developer of multi-scrobbler.

 

Current state of connectivity for m-s:

 

Track Sources (can capture plays from):

Scrobble Clients (can scrobble plays to):

 

Feature highlights of m-s:

  • Support configuration for single or multiple users (scrobble for your friends and family!)
  • Handles Spotify, Last.fm, and Dzzer authentication for unattended use after first-time setup
  • Logs track discovery/scrobbles to rotating daily files
  • Configurable using JSON files or environmental variables (through Docker or Node)
  • Provides static web page for displaying source/client status, discovery statistics, and recent log activity

 

 

multi-scrobbler-ui.thumb.png.8859fca11721ee7c2b4b2064b21e84df.png

 

Usage/Configuration

 

Configuration of m-s is done through JSON config files or through environmental variables (set in the unraid docker template). 

 

The CA template has default settings to map a config and logs directory. logs is optional and config is only required if you are using spotify.

 

There is a minimal setup example on the readme for using Docker to scrobble from Spotify to Maloja. In the docker example change the environmental variables into Variables in your unraid template.

 

Otherwise you can find examples of more thorough JSON setups in the configuration docs or in the kitchen sink example.

 

Support/Feature Request

 

Please feel free to give me any feedback on anything (unclear instructions, features you'd like to see, problems you are experiencing, etc.) as I am still developing this app:

 

 

2023-02-22 Update

If you have an existing multi-scrobbler container and have just updated you may need to update your unraid app configuration! See here for all 0.4.0 changes but the TLDR for unraid:

  • Add Variable PUID=99
  • Add Variable PGID=100
  • Remove Path "Logs"
  • Change Path "Config" Container Path
    • from /home/node/config 
    • to /config

       

Edited by FoxxMD
add more sources/clients to description

  • 2 months later...

Trying to get this setup and working and having issues with the last.fm client. It is telling me "Status: Auth Interaction Required". When I click the link to (re)authenticate or initialize I get various forms of failure. I have created an API key and put the values in to the config.json. I am unsure of how it should function when I get passed to lastfm and then back to the server http://tower.local:9078//lastfm/callback?state=FrankLFM&token=XXXXXXXXXXXX

 

At this point the page says OK and that is it. Heading back to the application it still says that last.fm is not authenticated. Any idea what I am missing?

 

2021-09-28T09:33:10-04:00 info : [App ] Server started at http://localhost:9078
2021-09-28T09:33:10-04:00 info : [Sources ] (partyPlex) plex source initialized
2021-09-28T09:33:10-04:00 info : [Source - Plex - partyPlex] Initializing with the following filters => Users: N/A | Libraries: party | Servers: N/A
2021-09-28T09:33:10-04:00 info : [Sources ] (FrankPlex) plex source initialized
2021-09-28T09:33:10-04:00 info : [Source - Plex - FrankPlex] Initializing with the following filters => Users: frank | Libraries: N/A | Servers: N/A
2021-09-28T09:33:10-04:00 warn : [Scrobblers ] (FrankLFM) lastfm client auth failed.
2021-09-28T09:33:10-04:00 error : [Client Lastfm - FrankLFM] Error: Invalid session key - Please re-authenticate
at CWD/node_modules/lastfm-node-client/lib/ApiRequest.js:136:11 at processTicksAndRejections (internal/process/task_queues.js:95:5) at async LastfmApiClient.callApi (file://CWD/apis/LastfmApiClient.js:84:20) at async LastfmApiClient.testAuth (file://CWD/apis/LastfmApiClient.js:148:30) at async LastfmScrobbler.testAuth (file://CWD/clients/LastfmScrobbler.js:34:27) at async ScrobbleClients.addClient (file://CWD/clients/ScrobbleClients.js:240:27) at async ScrobbleClients.buildClientsFromConfig (file://CWD/clients/ScrobbleClients.js:195:17) at async file://CWD/index.js:128:9 2021-09-28T09:33:10-04:00 error : [Client Lastfm - FrankLFM] Could not successfully communicate with Last.fm API
2021-09-28T09:33:10-04:00 error : [API - Lastfm - FrankLFM] Testing auth failed
2021-09-28T09:33:10-04:00 info : [Scrobblers] (FrankLFM) lastfm client initialized

 

Edited by Syco54645

  • Author

@Syco54645 I'm going to need more detail than that.

 

Quote

When I click the link to (re)authenticate or initialize I get various forms of failure.

 

What failures exactly? Do you see anything in the logs for the multi-scrobbler container?

I think most likely your callback url is incorrect -- it has to be registered with your last.fm application and it needs to be exactly where last.fm will redirect back to multi-scrobbler.

5 hours ago, FoxxMD said:

@Syco54645 I'm going to need more detail than that.

 

 

What failures exactly? Do you see anything in the logs for the multi-scrobbler container?

I think most likely your callback url is incorrect -- it has to be registered with your last.fm application and it needs to be exactly where last.fm will redirect back to multi-scrobbler.

 

I posted on github after I saw the message to post there instead so will continue there. Posting a reply currently as it looks like all config values are correct.

 

To answer the various failures were caused by not including a callback url. The comment for that line in the json samples is down a line and caused confusion on my end.

Edited by Syco54645

  • Author

2023-02-22 Update

If you have an existing multi-scrobbler container and are updating you may need to update your unraid app configuration! See here for all 0.4.0 changes but the TLDR for unraid:

  • Add Variable PUID=99
  • Add Variable PGID=100
  • Remove Path "Logs"
  • Change Path "Config" Container Path
    • from /home/node/config 
    • to /config

Edited by FoxxMD

  • 1 year later...

Can someone tell me why my connected lastfm account doesn't send recent scrobbles to multi-scrobber?

Maybe it helps, I cant access this docker via "localhost" domain. Instead of that I use IP:PORT.

image.thumb.png.7b7a82620c5736567f80bfa85b2208bd.png

  • Author

@rogales multi-scrobbler is like middleware that gets your listening activity from Sources like Spotify, Plex, etc... and then forwards them to Clients like Last.fm, Listenbrainz, and Maloja.

 

In your screenshot you have Last.fm configured as a Client (MS will sends scrobbles to it) but you do not have Sources configured to get scrobbles from.

Ohh.
so that's my problem. :|

is there any possibility to add sources to multiscrobber?

  • Author

@rogales There are many existing Sources to choose from. You can even use some Clients as Sources like a relay IE Your favorite app scrobbles to Last.FM -> mutli-scrobbler uses Last.fm as a Source -> Scrobbles to Maloja

 

If you are talking about adding a new Source not already coded for yeah I can do that but it depends on if the program/service provides connectivity. You can describe your scenario here but I'd prefer a new issue on github as it's easier for me to keep track of (and take a look at existing issues to see if your Source has already been requested).

Edited by FoxxMD

  • 3 weeks later...

Hey.

I've managed to make multi-scrobbler work like I wanted to, but now I'm trying to import my last.fm library, but it fails.

I've posted my problem here: https://github.com/krateng/maloja/issues/382 so if You had time, could you take a look on this one?

Any help would be much apperaciated. Thanks

 

UPDATE:
resolved my issue with a small script.

Your maloja docker repo still has https://benjaminbenben.com/lastfm-to-csv/ way of importing. Unfortunately site stops while trying to fetch the whole list, so... I've downloaded my list through https://lastfm.ghan.nl/export/ site, and after that, I've used script below to convert whole library to benjaminsbenben code.

and after the whole process maloja import .csv file was imported completely.

 

 

import csv
from datetime import datetime

# Funkcja do konwersji formatu daty
def convert_date(date_str):
    # Usuwanie przecinka i przekształcanie daty na format bez przecinka
    return datetime.strptime(date_str, "%d %b %Y, %H:%M").strftime("%d %b %Y %H:%M")

# Ścieżki plików (zamień na własne ścieżki)
input_file = 'rogal.csv'
output_file = 'proper.csv'

# Otwieranie pliku wejściowego
with open(input_file, 'r', newline='', encoding='utf-8') as csvfile:
    # Czytanie danych z pliku CSV
    reader = csv.DictReader(csvfile)
    
    # Otwieranie pliku wyjściowego
    with open(output_file, 'w', newline='', encoding='utf-8') as outfile:
        # Zapisz nowy plik CSV
        writer = csv.writer(outfile)
        
        # Iteracja przez każdą linię w pliku wejściowym
        for row in reader:
            artist = row['artist']  # Wykonawca
            album = row['album']  # Tytuł płyty
            track = row['track']  # Tytuł utworu
            date = convert_date(row['utc_time'])  # Data (zmieniona na nowy format)
            
            # Zapisz dane w nowym formacie
            writer.writerow([artist, album, track, date])

print("Konwersja zakończona. Wynik zapisano w pliku 'wyjsciowy.csv'.")

 

 

(and here small detail, on how to put Your docker in a shell mode:)

 

docker run -it --entrypoint sh -v /mnt/user/appdata/maloja:/config -e MALOJA_DATA_DIRECTORY=/config krateng/maloja

 

Edited by rogales

  • 1 month later...

Hi! 

i'm trying to set up a Multi-Scrobbler instance on my server but i'm not able to make it work 

From source, i want to use mpd, installed with MoOde on a Raspberry Pi, and for client i want to use a listenbrainz.org instance. 

 

I manage to connect to both, and make it work. I mean, Multi-scrobbles see both. 

But, it does not scrobble. 

 

Usually it demands at least 240 seconds to scrobble, wich is huge and many songs are under this time, and then it says there are an error with de Musicbrainz api. 
I put a scren of the log if someone can help me. 

Thx you in advance. 

Screenshot 2024-11-14 13.46.34.png

First of all;

You want Your ListenBrainz instance as a client, or as source?
Secondly, You have 400 Error so it's not capable to connect to.

Hi, i specify it on my first post:

"From source, i want to use mpd, installed with MoOde on a Raspberry Pi, and for client i want to use a listenbrainz.org instance"

 

Afer, i must understand, from your message, that my issue is that listenbrainz is not capable to connect?

 

it can be, but, if is the case, it is a bug because my instance is well config.

 

and, anything of this, answer my question: why 240s is the fixed length to scrobble a song, even if the song does not have so much seconds

Edited by Calaat

Now it is working, but it is missinng almost the half of tracks, the ones that not have the 240s and others not recognized, which make non sense because the tags are well set, because i have set myself.

  • 1 year later...

Hello,

i get an error in ms which i can't solve by myself. Scrobbling stoped working in ms and maloja sees no new songs. I'm totally clueless... deezer.json should be fine, arl is still correct. I found the "agressive" and "true" mode for double song import. But that didn't helped here.

[2026-01-24 00:24:30.655 +0100] ERROR : [App] [Sources] [Deezer - DeezerARL] Cannot start polling because error occurred while processing backlog Error: Cannot start polling because error occurred while processing backlog at DeezerInternalSource.poll (CWD/src/backend/sources/AbstractSource.ts:344:31) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) caused by: Error: Error occurred while fetching backlogged plays at DeezerInternalSource.processBacklog (CWD/src/backend/sources/AbstractSource.ts:283:23) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async DeezerInternalSource.poll (CWD/src/backend/sources/AbstractSource.ts:342:13) caused by: TypeError: resp.results.error is not iterable at DeezerInternalSource.getRecentlyPlayed (CWD/src/backend/sources/DeezerInternalSource.ts:143:37) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async DeezerInternalSource.getBackloggedPlays (CWD/src/backend/sources/DeezerInternalSource.ts:203:83) at async DeezerInternalSource.processBacklog (CWD/src/backend/sources/AbstractSource.ts:281:32) at async DeezerInternalSource.poll (CWD/src/backend/sources/AbstractSource.ts:342:13)

Edited by Domin1k

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.