Listenbrainz
- To monitor and re-scrobble activity from a Listenbrainz account create a Listenbrainz (Source)
- To accept scrobbles from outside applications as if multi-scrobbler was a Listenbrainz server, create a Listenbrainz (Endpoint)
You will need to run your own Listenbrainz server or have an account on the official instance
On your profile page find your User Token to use in the configuration.
Configuration
Scrobbling Device Data
Many Sources report device identifiers with their listening data which can be included in the scrobble data for this client.
However, Multi-Scrobbler does not include this information in scrobble data because it can contain Personally Identifiable Information (PII).
You can opt-in to including this data by defining an explicit list of identifiers that are matched against real device idenitifiers that are then used instead of the real identifier, when scrobbling.
You define a list of matching strings with optional labels. The most-specific matched-string to a real device identifier gets picked and then it, or it's label, is used as the device identifier in the scrobble data.
Examples and Configuration
In each of the examples configurations below, the resulting behavior for device identifier reporting is...
- Any device with the string
iphonein it will be reported as onlyiphone - A device with the string
smithFamily-rokuwill be reported asfamilyRoku - Any other device with the string
rokuin it will be reported asroku
- ENV
- File
- Aio
Define a comma-delimited list of match:label entries to the env LZ_ALLOW_DEVICE_LIST
services:
multi-scrobbler:
# ...
environment:
# ...
- LZ_ALLOW_DEVICE_LIST=iphone,roku,smithFamily-roku:familyRoku
Define a dictionary of allowDeviceList entries. Entries without a label should use an empty string.
{
"id": "MyClient",
"data": { /* ... */},
"options": {
// ...
"allowDeviceList": {
"iphone": "",
"smithFamily-roku": "familyRoku",
"roku": ""
}
}
}
Define a dictionary of allowDeviceList entries. Entries without a label should use an empty string.
{
"clients": [{
"id": "MyClient",
"type": // ...,
"data": { /* ... */ },
"options": {
// ...
"allowDeviceList": {
"iphone": "",
"smithFamily-roku": "familyRoku",
"roku": ""
}
}
}]
}
- ENV
- File
- AIO
This is configuration for the ENV Config Type.
| Environmental Variable | Type | Default | Description |
|---|---|---|---|
LZ_ID | string | A globally unique ID EX myComponentId | |
LZ_NAME | string | Value of LZ_ID | A vanity name EX My Cool Component |
LZ_ENABLE | boolean | true | Should this component be used? |
LZ_URL | string | https://api.listenbrainz.org/ | URL for the ListenBrainz server, if not using the default |
LZ_TOKEN | string | User token for the user to scrobble for | |
LZ_USER | string | Username of the user to scrobble for | |
LZ_CONTACT | string | (If running a forked version of multi-scrobbler) A website or email Listenbrainz can contact you at in case of issues | |
LZ_ALLOW_DEVICE_LIST | string | A comma-delimited list of match:label entries to use as media_play in scrobble submit data, when none is present. |
Bold/Italic = Required
Config Structure
This displays the structure of the File Configuration for a listenbrainz type Client with all possible properties, their shape, and descriptions/types. Use this to understand how to write a valid config.
Config Example
This displays an example config file of a listenbrainz Client File Configuration that adheres to the shown Config Structure.
- text mode lets you edit the JSON directly.
- tree mode gives you a guided point-and-click editing experience that always keeps the JSON syntax valid.
Both modes validate that the configuration is correct. Any errors show up as squiggly lines.
Only client listenbrainz configs will validate correctly in the editor but both source and client listenbrainz configs are allowed in the real CONFIG/listenbrainz.json
After you finish editing, switch to text and then copy all text to get a completed config.
Config Example Mobile Experience
This displays an example config file of a listenbrainz Client File Configuration that adheres to the shown Config Structure.
The example config file editor is meant for a larger screen experience so only the read-only example is shown. Please use this site on a tablet/laptop/desktop to enable file editor features.
[
{
"name": "Foxx LZ Client",
"id": "brainzClient",
"enable": true,
"configureAs": "client",
"data": {
"token": "029b081ba-9156-4pe7-88e5-3be671f5ea2b",
"username": "FoxxMD",
"url": "https://api.listenbrainz.org"
}
}
]
Config Structure
This displays the structure of the all-in-one (config.json) configuration with all possible properties, their shape, and descriptions/types. Use this to understand how to write a valid config.
Select the listenbrainz type from the respective clients node below, then expand it.
Config Example
This displays an example config file of a all-in-one (config.json) configuration that includes a listenbrainz Client that adheres to the shown Config Structure.
- text mode lets you edit the JSON directly.
- tree mode gives you a guided point-and-click editing experience that always keeps the JSON syntax valid.
Both modes validate that the configuraion is correct. Any errors show up as squiggly lines.
After you finish editing, switch to text and then copy all text to get a completed config.
Config Example Mobile Experience
This displays an example config file of a all-in-one (config.json) configuration that includes a listenbrainz Client that adheres to the shown Config Structure.
The example config file editor is meant for a larger screen experience so only the read-only example is shown. Please use this site on a tablet/laptop/desktop to enable file editor features.
{
"clients": [
{
"name": "Foxx LZ Client",
"id": "brainzClient",
"enable": true,
"configureAs": "client",
"data": {
"token": "029b081ba-9156-4pe7-88e5-3be671f5ea2b",
"username": "FoxxMD",
"url": "https://api.listenbrainz.org"
},
"type": "listenbrainz"
}
]
}