mirror of
https://github.com/FoxxMD/multi-scrobbler.git
synced 2026-05-02 13:41:21 +00:00
docs: Improve sources documentation
Some checks are pending
Publish Docker image to Dockerhub / test (push) Waiting to run
Publish Docker image to Dockerhub / Build OCI Images (push) Blocked by required conditions
Publish Docker image to Dockerhub / Build OCI Images-1 (push) Blocked by required conditions
Publish Docker image to Dockerhub / Merge OCI Images and Push (push) Blocked by required conditions
Some checks are pending
Publish Docker image to Dockerhub / test (push) Waiting to run
Publish Docker image to Dockerhub / Build OCI Images (push) Blocked by required conditions
Publish Docker image to Dockerhub / Build OCI Images-1 (push) Blocked by required conditions
Publish Docker image to Dockerhub / Merge OCI Images and Push (push) Blocked by required conditions
This commit is contained in:
parent
ff74fd7e4c
commit
63c079f08e
1 changed files with 63 additions and 51 deletions
|
|
@ -5,36 +5,38 @@ toc_max_heading_level: 4
|
|||
---
|
||||
|
||||
import ScrobbleThreshold from "@site/src/components/snippets/_scrobble-threshold.mdx"
|
||||
import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
|
||||
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...
|
||||
|
||||
## Sources
|
||||
|
||||
| Name | Networking | Scrobble SOT | [Multi Device/User](#multi-deviceuser) | [Scrobble Destination](#limiting-scrobble-destination) | [Thresholds](#scrobble-thresholds) | [Should Scrobble](#should-scrobble-behavior) |
|
||||
| :---------------------------------------------------------------------- | :------------------ | :-------------------- | :-------------------------------------- | :----------------------------------------------------- | :--------------------------------- | :------------------------------------------- |
|
||||
| [Azuracast](/configuration/sources/azuracast) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ✅ |
|
||||
| [Deezer](/configuration/sources/deezer) | [Active](#active) | [History](#history) | ✅ | ✅ | ❌ | ❌ |
|
||||
| [Google Cast (Chromecast)](/configuration/sources/google-cast) | [Active](#active) | [Activity](#activity) | ✅ | ✅ | ✅ | ❌ |
|
||||
| [Icecast](/configuration/sources/icecast) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ✅ |
|
||||
| [Jellyfin](/configuration/sources/jellyfin) | [Active](#active) | [Activity](#activity) | ✅ | ✅ | ✅ | ❌ |
|
||||
| [JRiver](/configuration/sources/jriver) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ❌ |
|
||||
| [Kodi](/configuration/sources/kodi) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ❌ |
|
||||
| [Koito](/configuration/sources/koito-source) | [Active](#active) | [History](#history) | ❌ | ✅ | ❌ | ❌ |
|
||||
| [Last.fm](/configuration/sources/lastfm-source) | [Active](#active) | [History](#history) | ❌ | ✅ | ❌ | ❌ |
|
||||
| [Last.fm (Endpoint)](/configuration/sources/lastfm-endpoint) | [Ingress](#ingress) | [History](#history) | ❌ | ✅ | ❌ | ❌ |
|
||||
| [ListenBrainz](/configuration/sources/listenbrainz-source) | [Active](#active) | [History](#history) | ❌ | ✅ | ❌ | ❌ |
|
||||
| [ListenBrainz (Endpoint)](/configuration/sources/listenbrainz-endpoint) | [Ingress](#ingress) | [History](#history) | ❌ | ✅ | ❌ | ❌ |
|
||||
| [Maloja](/configuration/sources/maloja) | [Active](#active) | [History](#history) | ❌ | ✅ | ❌ | ❌ |
|
||||
| [Mopidy](/configuration/sources/mopidy) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ❌ |
|
||||
| [MPD (Music Player Daemon)](/configuration/sources/mpd) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ❌ |
|
||||
| [Musikcube](/configuration/sources/musikcube) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ❌ |
|
||||
| [Plex](/configuration/sources/plex) | [Active](#active) | [Activity](#activity) | ✅ | ✅ | ✅ | ❌ |
|
||||
| [Spotify](/configuration/sources/spotify) | [Active](#active) | [Activity](#activity) | ✅ | ✅ | ✅ | ❌ |
|
||||
| [Subsonic-compatible APIs](/configuration/sources/subsonic) | [Active](#active) | [Activity](#activity) | ✅ | ✅ | ✅ | ❌ |
|
||||
| [WebScrobbler](/configuration/sources/webscrobbler) | [Ingress](#active) | [History](#history) | ❌ | ✅ | ❌ | ❌ |
|
||||
| [VLC](/configuration/sources/vlc) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ❌ |
|
||||
| [Yamaha MusicCast](/configuration/sources/yamaha-musiccast) | [Active](#active) | [Activity](#activity) | ❌ | ✅ | ✅ | ❌ |
|
||||
| [Youtube Music](/configuration/sources/youtube-music) | [Active](#active) | [History](#history) | ❌ | ✅ | ❌ | ❌ |
|
||||
| Name | Networking | Scrobble SOT | [Multi Device/User](#multi-deviceuser) | [Scrobble Destination](#limiting-scrobble-destination) | [Thresholds](#scrobble-thresholds) | [Should Scrobble](#should-scrobble-behavior) |
|
||||
| :---------------------------------------------------------------------- | :------------------------------------------------------- | :-------------------------------------------------- | :------------------------------------- | :----------------------------------------------------- | :--------------------------------- | :------------------------------------------- |
|
||||
| [Azuracast](/configuration/sources/azuracast) | [Active](./?sourceComm=active#by-communication-method) | [Activity](./?sot=activity#by-data-source-of-truth) | ❌ | ✅ | ✅ | ✅ |
|
||||
| [Deezer](/configuration/sources/deezer) | [Active](./?sourceComm=active#by-communication-method) | [History](./?sot=history#by-data-source-of-truth) | ✅ | ✅ | ❌ | ❌ |
|
||||
| [Google Cast (Chromecast)](/configuration/sources/google-cast) | [Active](./?sourceComm=active#by-communication-method) | [Activity](./?sot=activity#by-data-source-of-truth) | ✅ | ✅ | ✅ | ❌ |
|
||||
| [Icecast](/configuration/sources/icecast) | [Active](./?sourceComm=active#by-communication-method) | [Activity](./?sot=activity#by-data-source-of-truth) | ❌ | ✅ | ✅ | ✅ |
|
||||
| [Jellyfin](/configuration/sources/jellyfin) | [Active](./?sourceComm=active#by-communication-method) | [Activity](./?sot=activity#by-data-source-of-truth) | ✅ | ✅ | ✅ | ❌ |
|
||||
| [JRiver](/configuration/sources/jriver) | [Active](./?sourceComm=active#by-communication-method) | [Activity](./?sot=activity#by-data-source-of-truth) | ❌ | ✅ | ✅ | ❌ |
|
||||
| [Kodi](/configuration/sources/kodi) | [Active](./?sourceComm=active#by-communication-method) | [Activity](./?sot=activity#by-data-source-of-truth) | ❌ | ✅ | ✅ | ❌ |
|
||||
| [Koito](/configuration/sources/koito-source) | [Active](./?sourceComm=active#by-communication-method) | [History](./?sot=history#by-data-source-of-truth) | ❌ | ✅ | ❌ | ❌ |
|
||||
| [Last.fm](/configuration/sources/lastfm-source) | [Active](./?sourceComm=active#by-communication-method) | [History](./?sot=history#by-data-source-of-truth) | ❌ | ✅ | ❌ | ❌ |
|
||||
| [Last.fm (Endpoint)](/configuration/sources/lastfm-endpoint) | [Ingress](./?sourceComm=ingress#by-communication-method) | [History](./?sot=history#by-data-source-of-truth) | ❌ | ✅ | ❌ | ❌ |
|
||||
| [ListenBrainz](/configuration/sources/listenbrainz-source) | [Active](./?sourceComm=active#by-communication-method) | [History](./?sot=history#by-data-source-of-truth) | ❌ | ✅ | ❌ | ❌ |
|
||||
| [ListenBrainz (Endpoint)](/configuration/sources/listenbrainz-endpoint) | [Ingress](./?sourceComm=ingress#by-communication-method) | [History](./?sot=history#by-data-source-of-truth) | ❌ | ✅ | ❌ | ❌ |
|
||||
| [Maloja](/configuration/sources/maloja) | [Active](./?sourceComm=active#by-communication-method) | [History](./?sot=history#by-data-source-of-truth) | ❌ | ✅ | ❌ | ❌ |
|
||||
| [Mopidy](/configuration/sources/mopidy) | [Active](./?sourceComm=active#by-communication-method) | [Activity](./?sot=activity#by-data-source-of-truth) | ❌ | ✅ | ✅ | ❌ |
|
||||
| [MPD (Music Player Daemon)](/configuration/sources/mpd) | [Active](./?sourceComm=active#by-communication-method) | [Activity](./?sot=activity#by-data-source-of-truth) | ❌ | ✅ | ✅ | ❌ |
|
||||
| [Musikcube](/configuration/sources/musikcube) | [Active](./?sourceComm=active#by-communication-method) | [Activity](./?sot=activity#by-data-source-of-truth) | ❌ | ✅ | ✅ | ❌ |
|
||||
| [Plex](/configuration/sources/plex) | [Active](./?sourceComm=active#by-communication-method) | [Activity](./?sot=activity#by-data-source-of-truth) | ✅ | ✅ | ✅ | ❌ |
|
||||
| [Spotify](/configuration/sources/spotify) | [Active](./?sourceComm=active#by-communication-method) | [Activity](./?sot=activity#by-data-source-of-truth) | ✅ | ✅ | ✅ | ❌ |
|
||||
| [Subsonic-compatible APIs](/configuration/sources/subsonic) | [Active](./?sourceComm=active#by-communication-method) | [Activity](./?sot=activity#by-data-source-of-truth) | ✅ | ✅ | ✅ | ❌ |
|
||||
| [WebScrobbler](/configuration/sources/webscrobbler) | [Ingress](./?sourceComm=active#by-communication-method) | [History](./?sot=history#by-data-source-of-truth) | ❌ | ✅ | ❌ | ❌ |
|
||||
| [VLC](/configuration/sources/vlc) | [Active](./?sourceComm=active#by-communication-method) | [Activity](./?sot=activity#by-data-source-of-truth) | ❌ | ✅ | ✅ | ❌ |
|
||||
| [Yamaha MusicCast](/configuration/sources/yamaha-musiccast) | [Active](./?sourceComm=active#by-communication-method) | [Activity](./?sot=activity#by-data-source-of-truth) | ❌ | ✅ | ✅ | ❌ |
|
||||
| [Youtube Music](/configuration/sources/youtube-music) | [Active](./?sourceComm=active#by-communication-method) | [History](./?sot=history#by-data-source-of-truth) | ❌ | ✅ | ❌ | ❌ |
|
||||
|
||||
## Features
|
||||
|
||||
|
|
@ -46,37 +48,39 @@ The Sources implemented in multi-scrobbler can be broken down into two categorie
|
|||
|
||||
How does this Source get data from the service/application?
|
||||
|
||||
##### Active
|
||||
<Tabs groupId="sourceComm" queryString>
|
||||
<TabItem value="active" label="Active">
|
||||
The MS Source makes network requests to the service which returns a response with data MS can use to monitor listening activity or scrobbles.
|
||||
</TabItem>
|
||||
<TabItem value="ingress" label="Ingress">
|
||||
The MS Source waits for the service/application to send data to multi-scrobbler.
|
||||
|
||||
The MS Source makes network requests to the service which returns a response with data MS can use to monitor listening activity or scrobbles.
|
||||
|
||||
##### Ingress
|
||||
|
||||
The MS Source waits for the service/application to send data to multi-scrobbler.
|
||||
|
||||
These types of Sources require that multi-scrobbler is accessible to the service, generally through an open port or reverse proxy.
|
||||
These types of Sources require that multi-scrobbler is accessible to the service, generally through an open port or reverse proxy.
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
#### By Data Source of Truth
|
||||
|
||||
How does MS determine if/when a song has been played and is scrobbable?
|
||||
|
||||
##### Listening Activity {#activity}
|
||||
<Tabs groupId="sot" queryString>
|
||||
<TabItem value="activity" label="Listening Activity">
|
||||
These Sources expose some kind of real-time listening data for users, like:
|
||||
|
||||
These Sources expose some kind of real-time listening data for users, like:
|
||||
* player state (paused, stopped, playing)
|
||||
* player position (1:50/2:40)
|
||||
* current listened duration (Track A playing for 1m:20s)
|
||||
|
||||
* player state (paused, stopped, playing)
|
||||
* player position (1:50/2:40)
|
||||
* current listened duration (Track A playing for 1m:20s)
|
||||
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).
|
||||
</TabItem>
|
||||
<TabItem value="history" label="Listening History">
|
||||
Some Sources expose their own version of "this track has been scrobbled."
|
||||
|
||||
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).
|
||||
* Listenbrainz, Koito, and Last.fm are all scrobble services that have "definitive" histories of scrobbled tracks.
|
||||
|
||||
##### Listening History/Scrobbles {#history}
|
||||
|
||||
Some Sources expose their own version of "this track has been scrobbled."
|
||||
|
||||
* Listenbrainz, Koito, and Last.fm are all scrobble services that have "definitive" histories of scrobbled tracks.
|
||||
|
||||
For these Sources multi-scrobbler monitors the listening history data and scrobbles when it sees a new entry in the list.
|
||||
For these Sources multi-scrobbler monitors the listening history data and scrobbles when it sees a new entry in the list.
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
### Multi-Device/User
|
||||
|
||||
|
|
@ -84,9 +88,7 @@ Some Sources report which User is playing a track and/or on what device the trac
|
|||
|
||||
### Limiting Scrobble Destination
|
||||
|
||||
By default a Source will scrobble to **all** configured Clients.
|
||||
|
||||
To limit which Clients a Source will scrobble to use the `clients` property in a Source's [File/AIO configuration](/configuration?configType=file#configuration-types) to specify the **names** of the Clients that it should scrobble to:
|
||||
To limit which Clients a Source will scrobble to use the `clients` property in a Source's [File/AIO configuration](/configuration?configType=file#configuration-types) to specify the **name** property of the Clients that it should scrobble to:
|
||||
|
||||
```json5 title="jellyfin.json"
|
||||
{
|
||||
|
|
@ -98,12 +100,22 @@ To limit which Clients a Source will scrobble to use the `clients` property in a
|
|||
}
|
||||
```
|
||||
|
||||
The Source above will only scrobble to Clients that are **named** (`name` property in Client config) either `myMaloja` `koitoA` or `listenbrainzFoo`.
|
||||
:::note
|
||||
|
||||
If your Client is configured using [ENV](/configuration?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:
|
||||
If `clients` is empty (`"clients": []`) or is omitted then the default is for the Source to scrobble to **all** configured Clients.
|
||||
|
||||
:::
|
||||
|
||||
:::note
|
||||
|
||||
If a Client is configured using [ENV](/configuration?configType=env#configuration-types) then it is given a generated name. Check the multi-scrobbler Dashboard to find their name in a subheader under the Client type. Example:
|
||||
|
||||

|
||||
|
||||
Otherwise, use the `name` property you gave the client in it's File/AIO config.
|
||||
|
||||
:::
|
||||
|
||||
### Scrobble Thresholds
|
||||
|
||||
<ScrobbleThreshold filename="spotify"/>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue