···11+---
22+sidebar_position: 2
33+title: Overview
44+toc_max_heading_level: 4
55+---
66+77+import ScrobbleThreshold from "@site/src/components/snippets/_scrobble-threshold.mdx"
88+99+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...
1010+1111+## Sources
1212+1313+| Name | Networking | Scrobble SOT | [Multi Device/User](#multi-device-user) | [Scrobble Destination](#limiting-scrobble-destination) | [Thresholds](#scrobble-thresholds) | [Should Scrobble](#should-scrobble-behavior) |
1414+| :-------------------------------------------------------------------------- | :------------------ | :-------------------- | :-------------------------------------- | :----------------------------------------------------- | :--------------------------------- | :------------------------------------------- |
1515+| [Azuracast](/configuration/sources/azuracast) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ✅ |
1616+| [Deezer](/configuration/sources/deezer) | [Active](#active) | [History](#history) | ✅ | ✅ | ❌ | ❌ |
1717+| [Google Cast (Chromecast)](/configuration/sources/google-cast-chromecast) | [Active](#active) | [Activity](#activity) | ✅ | ✅ | ✅ | ❌ |
1818+| [Icecast](/configuration/sources/icecast) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ✅ |
1919+| [Jellyfin](/configuration/sources/jellyfin) | [Active](#active) | [Activity](#activity) | ✅ | ✅ | ✅ | ❌ |
2020+| [JRiver](/configuration/sources/jriver) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ❌ |
2121+| [Kodi](/configuration/sources/kodi) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ❌ |
2222+| [Koito](/configuration/sources/koito-source) | [Active](#active) | [History](#history) | ❌ | ✅ | ❌ | ❌ |
2323+| [Last.fm](/configuration/sources/lastfm-source) | [Active](#active) | [History](#history) | ❌ | ✅ | ❌ | ❌ |
2424+| [Last.fm (Endpoint)](/configuration/sources/lastfm-endpoint) | [Ingress](#ingress) | [History](#history) | ❌ | ✅ | ❌ | ❌ |
2525+| [ListenBrainz](configuration#/sources/istenbrainz-source) | [Active](#active) | [History](#history) | ❌ | ✅ | ❌ | ❌ |
2626+| [ListenBrainz (Endpoint)](/configuration/sources/listenbrainz-endpoint) | [Ingress](#ingress) | [History](#history) | ❌ | ✅ | ❌ | ❌ |
2727+| [Maloja](/configuration/sources/maloja-source) | [Active](#active) | [History](#history) | ❌ | ✅ | ❌ | ❌ |
2828+| [Mopidy](/configuration/sources/mopidy) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ❌ |
2929+| [MPD (Music Player Daemon)](/configuration/sources/mpd-music-player-daemon) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ❌ |
3030+| [Musikcube](/configuration/sources/musikcube) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ❌ |
3131+| [Plex](/configuration/sources/plex) | [Active](#active) | [Activity](#activity) | ✅ | ✅ | ✅ | ❌ |
3232+| [Spotify](/configuration/sources/spotify) | [Active](#active) | [Activity](#activity) | ✅ | ✅ | ✅ | ❌ |
3333+| [Subsonic-compatible APIs](configuration/sources/subsonic) | [Active](#active) | [Activity](#activity) | ✅ | ✅ | ✅ | ❌ |
3434+| [WebScrobbler](docs/configuration#webscrobbler) | [Ingress](#active) | [History](#history) | ❌ | ✅ | ❌ | ❌ |
3535+| [VLC](/configuration/sources/vlc) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ❌ |
3636+| [Yamaha MusicCast](/configuration/sources/yamaha-musiccast) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ❌ |
3737+| [Youtube Music](/configuration/sources/youtube-music) | [Active](#active) | [History](#history) | ❌ | ✅ | ❌ | ❌ |
3838+3939+## Features
4040+4141+### Types of Sources
4242+4343+The Sources implemented in multi-scrobbler can be broken down into two categories.
4444+4545+#### By Communication Method
4646+4747+How does this Source get data from the service/application?
4848+4949+##### Active
5050+5151+The MS Source makes network requests to the service which returns a response with data MS can use to monitor listening activity or scrobbles.
5252+5353+##### Ingress
5454+5555+The MS Source waits for the service/application to send data to multi-scrobbler.
5656+5757+These types of Sources require that multi-scrobbler is accessible to the service, generally through an open port or reverse proxy.
5858+5959+#### By Data Source of Truth
6060+6161+How does MS determine if/when a song has been played and is scrobbable?
6262+6363+##### Listening Activity {#activity}
6464+6565+These Sources expose some kind of real-time listening data for users, like:
6666+6767+* player state (paused, stopped, playing)
6868+* player position (1:50/2:40)
6969+* current listened duration (Track A playing for 1m:20s)
7070+7171+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).
7272+7373+##### Listening History/Scrobbles {#history}
7474+7575+Some Sources expose their own version of "this track has been scrobbled."
7676+7777+* Listenbrainz, Koito, and Last.fm are all scrobble services that have "definitive" histories of scrobbled tracks.
7878+7979+For these Sources multi-scrobbler monitors the listening history data and scrobbles when it sees a new entry in the list.
8080+8181+### Multi-Device/User
8282+8383+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.
8484+8585+### Limiting Scrobble Destination
8686+8787+By default a Source will scrobble to **all** configured Clients.
8888+8989+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:
9090+9191+```json5 title="jellyfin.json"
9292+{
9393+ "name": "MyJellyfin",
9494+ "clients": ["myMaloja","koitoA","listenbrainzFoo"]
9595+ "data": {
9696+ // ...
9797+ },
9898+}
9999+```
100100+101101+The Source above will only scrobble to Clients that are **named** (`name` property in Client config) either `myMaloja` `koitoA` or `listenbrainzFoo`.
102102+103103+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:
104104+105105+
106106+107107+### Scrobble Thresholds
108108+109109+<ScrobbleThreshold filename="spotify"/>
110110+111111+These can also be configured **globally** for all Sources using ENVs:
112112+113113+```
114114+SOURCE_SCROBBLE_DURATION=40
115115+SOURCE_SCROBBLE_PERCENT=20
116116+```
117117+118118+### Should Scrobble Behavior
119119+120120+:::note
121121+122122+This feature is currently available only for some Sources. Check each Source's documentation to see if it supported.
123123+124124+:::
125125+126126+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.
127127+128128+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):
129129+130130+```json5 title="azuracast.json"
131131+{
132132+ "data": {
133133+ // ...
134134+ },
135135+ "options": {
136136+ // set to true to always scrobble automatically
137137+ // set to false to never scrobble automatically
138138+ "systemScrobble": true
139139+ }
140140+}
141141+```