124 lines
7.2 KiB
Markdown
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
|