[READ-ONLY] Mirror of https://github.com/FoxxMD/multi-scrobbler. Scrobble plays from multiple sources to multiple clients docs.multi-scrobbler.app
deezer docker jellyfin koito lastfm listenbrainz maloja mopidy mpris music music-assistant plex scrobble self-hosted spotify subsonic tautulli youtube-music
0

Configure Feed

Select the types of activity you want to include in your feed.

Add new Source overview using category

FoxxMD (Oct 30, 2025, 5:06 PM UTC) 9b91f689 bc62b994

+148
+7
docsite/docs/configuration/sources/_category_.json
··· 1 + { 2 + "label": "Scrobble Sources", 3 + "link": { 4 + "type": "doc", 5 + "id": "configuration/sources/overview" 6 + } 7 + }
+141
docsite/docs/configuration/sources/overview.mdx
··· 1 + --- 2 + sidebar_position: 2 3 + title: Overview 4 + toc_max_heading_level: 4 5 + --- 6 + 7 + import ScrobbleThreshold from "@site/src/components/snippets/_scrobble-threshold.mdx" 8 + 9 + A **Source** is a data source that contains information about tracks you are playing like a music player or platform. Examples are **Spotify, Jellyfin, Plex, Youtube Music, Airsonic**, etc... 10 + 11 + ## Sources 12 + 13 + | Name | Networking | Scrobble SOT | [Multi Device/User](#multi-device-user) | [Scrobble Destination](#limiting-scrobble-destination) | [Thresholds](#scrobble-thresholds) | [Should Scrobble](#should-scrobble-behavior) | 14 + | :-------------------------------------------------------------------------- | :------------------ | :-------------------- | :-------------------------------------- | :----------------------------------------------------- | :--------------------------------- | :------------------------------------------- | 15 + | [Azuracast](/configuration/sources/azuracast) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ✅ | 16 + | [Deezer](/configuration/sources/deezer) | [Active](#active) | [History](#history) | ✅ | ✅ | ❌ | ❌ | 17 + | [Google Cast (Chromecast)](/configuration/sources/google-cast-chromecast) | [Active](#active) | [Activity](#activity) | ✅ | ✅ | ✅ | ❌ | 18 + | [Icecast](/configuration/sources/icecast) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ✅ | 19 + | [Jellyfin](/configuration/sources/jellyfin) | [Active](#active) | [Activity](#activity) | ✅ | ✅ | ✅ | ❌ | 20 + | [JRiver](/configuration/sources/jriver) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ❌ | 21 + | [Kodi](/configuration/sources/kodi) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ❌ | 22 + | [Koito](/configuration/sources/koito-source) | [Active](#active) | [History](#history) | ❌ | ✅ | ❌ | ❌ | 23 + | [Last.fm](/configuration/sources/lastfm-source) | [Active](#active) | [History](#history) | ❌ | ✅ | ❌ | ❌ | 24 + | [Last.fm (Endpoint)](/configuration/sources/lastfm-endpoint) | [Ingress](#ingress) | [History](#history) | ❌ | ✅ | ❌ | ❌ | 25 + | [ListenBrainz](configuration#/sources/istenbrainz-source) | [Active](#active) | [History](#history) | ❌ | ✅ | ❌ | ❌ | 26 + | [ListenBrainz (Endpoint)](/configuration/sources/listenbrainz-endpoint) | [Ingress](#ingress) | [History](#history) | ❌ | ✅ | ❌ | ❌ | 27 + | [Maloja](/configuration/sources/maloja-source) | [Active](#active) | [History](#history) | ❌ | ✅ | ❌ | ❌ | 28 + | [Mopidy](/configuration/sources/mopidy) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ❌ | 29 + | [MPD (Music Player Daemon)](/configuration/sources/mpd-music-player-daemon) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ❌ | 30 + | [Musikcube](/configuration/sources/musikcube) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ❌ | 31 + | [Plex](/configuration/sources/plex) | [Active](#active) | [Activity](#activity) | ✅ | ✅ | ✅ | ❌ | 32 + | [Spotify](/configuration/sources/spotify) | [Active](#active) | [Activity](#activity) | ✅ | ✅ | ✅ | ❌ | 33 + | [Subsonic-compatible APIs](configuration/sources/subsonic) | [Active](#active) | [Activity](#activity) | ✅ | ✅ | ✅ | ❌ | 34 + | [WebScrobbler](docs/configuration#webscrobbler) | [Ingress](#active) | [History](#history) | ❌ | ✅ | ❌ | ❌ | 35 + | [VLC](/configuration/sources/vlc) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ❌ | 36 + | [Yamaha MusicCast](/configuration/sources/yamaha-musiccast) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ❌ | 37 + | [Youtube Music](/configuration/sources/youtube-music) | [Active](#active) | [History](#history) | ❌ | ✅ | ❌ | ❌ | 38 + 39 + ## Features 40 + 41 + ### Types of Sources 42 + 43 + The Sources implemented in multi-scrobbler can be broken down into two categories. 44 + 45 + #### By Communication Method 46 + 47 + How does this Source get data from the service/application? 48 + 49 + ##### Active 50 + 51 + The MS Source makes network requests to the service which returns a response with data MS can use to monitor listening activity or scrobbles. 52 + 53 + ##### Ingress 54 + 55 + The MS Source waits for the service/application to send data to multi-scrobbler. 56 + 57 + These types of Sources require that multi-scrobbler is accessible to the service, generally through an open port or reverse proxy. 58 + 59 + #### By Data Source of Truth 60 + 61 + How does MS determine if/when a song has been played and is scrobbable? 62 + 63 + ##### Listening Activity {#activity} 64 + 65 + These Sources expose some kind of real-time listening data for users, like: 66 + 67 + * player state (paused, stopped, playing) 68 + * player position (1:50/2:40) 69 + * current listened duration (Track A playing for 1m:20s) 70 + 71 + For theses Sources multi-scrobbler keeps track of the real-time state of your activity and scrobbles a track after it meets certain [scrobble thresholds](#scrobble-thresholds). 72 + 73 + ##### Listening History/Scrobbles {#history} 74 + 75 + Some Sources expose their own version of "this track has been scrobbled." 76 + 77 + * Listenbrainz, Koito, and Last.fm are all scrobble services that have "definitive" histories of scrobbled tracks. 78 + 79 + For these Sources multi-scrobbler monitors the listening history data and scrobbles when it sees a new entry in the list. 80 + 81 + ### Multi-Device/User 82 + 83 + Some Sources report which User is playing a track and/or on what device the track is being played. These Sources can be filtered with configuration to only monitor activity for specific devices or users. 84 + 85 + ### Limiting Scrobble Destination 86 + 87 + By default a Source will scrobble to **all** configured Clients. 88 + 89 + To limit which Clients a Source will scrobble to use the `clients` property in a Source's [File/AIO configuration](./?configType=file#configuration-types) to specify the **names** of the Clients that it should scrobble to: 90 + 91 + ```json5 title="jellyfin.json" 92 + { 93 + "name": "MyJellyfin", 94 + "clients": ["myMaloja","koitoA","listenbrainzFoo"] 95 + "data": { 96 + // ... 97 + }, 98 + } 99 + ``` 100 + 101 + The Source above will only scrobble to Clients that are **named** (`name` property in Client config) either `myMaloja` `koitoA` or `listenbrainzFoo`. 102 + 103 + If your Client is configured using [ENV](./?configType=env#configuration-types) then they are given an automatically generated name. Check the multi-scrobbler Dashboard to find their name in a subheader under the Client type. Example: 104 + 105 + ![Client Name Subheader](../client-subheader.png) 106 + 107 + ### Scrobble Thresholds 108 + 109 + <ScrobbleThreshold filename="spotify"/> 110 + 111 + These can also be configured **globally** for all Sources using ENVs: 112 + 113 + ``` 114 + SOURCE_SCROBBLE_DURATION=40 115 + SOURCE_SCROBBLE_PERCENT=20 116 + ``` 117 + 118 + ### Should Scrobble Behavior 119 + 120 + :::note 121 + 122 + This feature is currently available only for some Sources. Check each Source's documentation to see if it supported. 123 + 124 + ::: 125 + 126 + For _most_ Sources multi-scrobbler can determine if a user is listening and scrobble automatically. For Sources which multi-scrobbler cannot do this or require additional configuration, a user can indicate to MS that it should or should not scrobble. This action can be taken on the Web Dashboard by clicking the link next to **Should Scrobble** found in each Source's status card. 127 + 128 + Additionally, for these Sources, the default behavior for Scrobbling can be explicitly set by adding the following value to a Source's `options` in [file or aio config](./?configType=file#configuration-types): 129 + 130 + ```json5 title="azuracast.json" 131 + { 132 + "data": { 133 + // ... 134 + }, 135 + "options": { 136 + // set to true to always scrobble automatically 137 + // set to false to never scrobble automatically 138 + "systemScrobble": true 139 + } 140 + } 141 + ```