Files
2026-06-09 18:40:21 +02:00

124 lines
7.2 KiB
Markdown

---
title: Multi-Scrobbler
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, music, scrobble, lastfm, listenbrainz, typescript, nodejs, docker]
confidence: high
contested: false
sources:
- https://selfh.st/apps/?tag=Music+Streaming
- https://github.com/FoxxMD/multi-scrobbler
- https://docs.multi-scrobbler.app/
---
# 🎚️ Multi-Scrobbler
> Service Node/TypeScript qui centralise le scrobbling : il écoute **28+ sources** (Spotify, Plex, Jellyfin, Navidrome, Mopidy, MPRIS, Sonos, Chromecast…) et **rejoue** automatiquement les écoutes vers **8+ clients** (Last.fm, ListenBrainz, Maloja, Koito, Discord, Rocksky, teal.fm).
| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | [docs.multi-scrobbler.app](https://docs.multi-scrobbler.app/) |
| **GitHub** | [https://github.com/FoxxMD/multi-scrobbler](https://github.com/FoxxMD/multi-scrobbler) |
| **License** | MIT |
| **Langage** | TypeScript (81.4 %), MDX, Node.js 20+ |
| **Étoiles** | ≈1 100 ⭐ (42 sur selfh.st/apps) |
| **Dernière MAJ** | 2026-06-03 (v0.14.1) |
| **Catégorie** | [[cat-music]] |
## Description
Multi-Scrobbler (MS) est un **agrégateur de scrobbles** développé par Matt Foxx. La philosophie du projet : vous écoutez de la musique à des endroits très différents (Spotify sur mobile, Plex sur le salon, Navidrome au bureau, Sonos dans la cuisine, fichier local sur le PC Linux) et vous voulez **un seul historique** sur Last.fm / ListenBrainz / Maloja, peu importe la source. Plutôt que d'installer une extension par plateforme, MS fait office de **hub centralisé** : il parle l'API de chaque source, détecte les écoutes, et les rejoue vers les clients configurés.
**Sources supportées (28+)** : Spotify, Deezer, YouTube Music, teal.fm, Rocksky, Plex, Jellyfin, Navidrome, Airsonic (et tous serveurs Subsonic-compatibles), Koito, Mopidy, MPD, Musikcube, Kodi, AzuraCast, Icecast, Last.fm, ListenBrainz, Libre.fm, Maloja, Google Cast (Chromecast), JRiver, **MPRIS** (desktop Linux), **Sonos**, VLC, WebScrobbler, Yamaha MusicCast, Music Assistant. **Clients supportés (8)** : Discord (Rich Presence « Listening to… »), Koito, Last.fm, Libre.fm, ListenBrainz, Maloja, Rocksky, teal.fm.
Fonctionnalités clés : gestion **multi-utilisateurs** (vous pouvez scrobbler pour la famille, en isolant les sources par client), **transformations regex** sur les titres avant envoi (uniformiser une nomenclature « Artist - Title.mp3 »), **file d'attente** avec retry automatique en cas d'échec d'API, **webhooks** (Gotify, Ntfy, Apprise), **endpoints Prometheus**, **web UI** sur le port 9078 (stats, logs, contrôle), et configuration soit par **variables d'environnement**, soit par fichier **JSON**. La v0.12 a notamment revu le matching historique des scrobbles.
Multi-Scrobbler se distingue de [[app-multi-scrobbler]] (le sien, l'original) face à des solutions comme **WebScrobbler** (extension navigateur) en étant **platform-independent** : pas besoin d'extension, tout passe par les API officielles. La v0.11.1 a ajouté Sonos comme source, la v0.12 a amélioré la correspondance rétroactive, et la v0.14 a stabilisé la nouvelle UI.
## Installation
### Docker (recommandé)
```yaml
# docker-compose.yml
services:
multi-scrobbler:
image: foxxmd/multi-scrobbler:latest
container_name: multi-scrobbler
ports:
- "9078:9078"
environment:
- TZ=Europe/Paris
# Exemple : source Spotify + client Last.fm
- SPOTIFY_SOURCES=spotifyMain
- SPOTIFY_SPOTIFYMAIN_CLIENTID=${SPOTIFY_CLIENTID}
- SPOTIFY_SPOTIFYMAIN_CLIENTSECRET=${SPOTIFY_SECRET}
- LASTFM_CLIENTS=lfmMain
- LASTFM_LFMMAIN_APIKEY=${LASTFM_KEY}
- LASTFM_LFMMAIN_SECRET=${LASTFM_SECRET}
- LASTFM_LFMMAIN_SESSIONKEY=${LASTFM_SESSION}
volumes:
- ./config:/config:rw
restart: unless-stopped
```
Lancement : `docker compose up -d`, puis `http://localhost:9078` pour l'UI. À la première connexion, suivez le wizard OAuth pour autoriser Spotify et/ou Last.fm (callback accessible depuis la page de statut).
### Node.js local
```bash
git clone https://github.com/FoxxMD/multi-scrobbler.git
cd multi-scrobbler
npm install
npm run build
node index.js
```
## Configuration
Deux modes de configuration, interchangeables ou combinables :
1. **Variables d'environnement** : préfixe `MS_` ou directement les variables par service (cf. exemples Docker). Pratique pour les secrets.
2. **Fichier JSON** dans `/config/config.json` (par défaut). Sections `sources: []` et `clients: []`. Documentation : [docs.multi-scrobbler.app/configuration](https://docs.multi-scrobbler.app/configuration).
Options globales :
- `scrobbleThreshold` : % minimum d'écoute pour scrobbler (défaut 50)
- `scrobbleInterval` : délai avant scrobble (défaut 240 s)
- `transformRegex` / `transformReplace` : regex appliquée aux titres (ex. retirer `(feat. X)` ou normaliser les espaces)
- `logLevel` : `info`, `debug`, `verbose`
- `monitoring.webhook` : URL Gotify/Ntfy/Apprise
L'UI `http://IP:9078` permet de visualiser les scrobbles en temps réel, voir les erreurs API, et déclencher des re-scans.
## Alternatives
**Open Source :** [[app-koito]] (scrobbler ListenBrainz, Go+TS), **Maloja** (Python, auto-hébergé), **WebScrobbler** (extension navigateur, non-server), **Pano Scrobbler** (Android), **ScrobbleBot** (Discord), **lastfm-listening-data** (Python), **lastfm-to-listenbrainz** (sync), **ListenBrainz scrobbler** (officiel, minimaliste), **Switch ListenBrainz Lastfm** (Python). Multi-Scrobbler est le **seul** à gérer 28+ sources en agrégateur.
**Propriétaire (que cette app remplace) :** les fonctions de scrobbling intégrées à **Last.fm Pro** (limité à la souris sur la plateforme Last.fm), **Pano Scrobbler Premium** (cloud sync), **Spotify pour Last.fm** (uniquement Spotify → Last.fm), **Lastify**, **lastfm-plus** (services cloud opaques). Multi-Scrobbler vous évite de payer pour une fonction que vous pouvez héberger et auditrer.
## Sécurité
- Les **API keys** et **session keys** sont sensibles : utilisez `docker secrets` ou Vault, pas de variable en clair dans le compose.
- L'UI web `9078` n'a pas d'authentification par défaut : obligatoire de la mettre derrière un **reverse proxy** (Traefik + Authelia ou basic auth).
- Si vous exposez le scrobbleur sur Internet, vous laissez fuiter vos habitudes d'écoute 24/7 : limitez l'accès au LAN ou via VPN.
- L'image `foxxmd/multi-scrobbler` supporte **x86_64 et ARM64** : pratique pour Raspberry Pi.
- Surveillez le **scrobble threshold** pour éviter les scrobbles fantômes (intro de 5 s sur Spotify).
- Mettez à jour régulièrement : le support des API Last.fm/Spotify/Listening Brainz évolue, MS suit.
## Ressources
- [Dépôt GitHub](https://github.com/FoxxMD/multi-scrobbler)
- [Documentation officielle](https://docs.multi-scrobbler.app/)
- [Quickstart](https://docs.multi-scrobbler.app/quickstart)
- [Liste des sources](https://docs.multi-scrobbler.app/configuration/sources/)
- [Discord DB Tech (présenté par son dev)](https://selfh.st/survey/2025-results/)
## Pages Liées
- [[cat-music]] — Catégorie Music
- [[recettes-docker-compose]] — Templates Docker Compose
- [[app-koito]] — Scrobbler ListenBrainz (complémentaire)
- [[app-navidrome]] — Source Subsonic typique
- [[securisation-home-lab]] — Reverse proxy + secrets