Rocksky
To monitor and re-scrobble activity from Rocksky create a Rocksky (Source)
Rocksky is music tracking and discovery platform built on the AT Protocol and your your Atmosphere Account.
How does that work?
Your Atmosphere Account consists of social data (it's just JSON) stored in a personal repository on a PDS (Personal Data Server), all of which is standardized under the AT Protocol.
The AT Protocol defines how your data is stored, how you authenticate to write to it, and how indpendent apps share and consume it. Critically, each layer (data storage, app, communication) of the AT Protocol can be operated by indpendent entities so your data and experience not locked behind a walled garden.
Although each layer can be implemented separately (you can self-host everything!), it is normally a simple process for an end-user to create and start using an Atmosphere Account as many apps can do everything for you. The most common example being a Bluesky, but there are other public account providers.
When Multi-Scrobbler uses the AT Protocol...
- multi-scrobbler "scrobbles" (writes) your plays to your repository
- in a JSON data structure which includes Rocksky's data type and structure
- at a known location for Rocksky's data (
app.rocksky), in a list that is appended to as you continue to scrobble
- when accessing Rocksky, or another application that knows how to read it, your data is pulled from the repository to render their app
Your Data Is Public
Atproto PDS access is public, meaning your scrobbles are also public (read-only). This isn't any different than using Last.fm or Listenbrainz, in terms of privacy.
Scrobble Data Standards
Rocksky's design goal is to store scrobbles with metdata-complete, 3rd party verifiable track information so that it can be a metadata-rich discovery platform.
It is not intended to be an exhaustive source-of-truth or backup for all your data.
If you need a client that will accept your data, regardless of its completeness, consistency, or quality, you should consider scrobbling to an additional Scrobble Client like Koito, Maloja, or Listenbrainz.
Setup
You will need an Atmosphere Account (like Bluesky) to use Rocksky.
Navigate to rocksky.app and sign up/logn using your Atmosphere Account.
Then, use one of the following approaches to configure communication with Rocksky and determine how scrobbling will occur.
- PDS (Recommended)
- Server (Deprecated)
The PDS approach enables Multi-Scrobbler to directly scrobble to your account's repository.
This is the recommended approach because MS can verify the scrobble data quality before it is scrobbled, giving you the ability to get feedback on missing data and the chance to correct or retry the scrobble manually.
Setup
Navigate to the Account settings for your Atmosphere account on your respective PDS and create a new App Password.
If you don't know what a PDS is or how to find this just use Bluesky:
- Sign in to Bluesky with your Atmosphere account
- Navigate to https://bsky.app/settings/app-passwords
- Settings -> Privacy and Security -> App passwords
- Create a new App Password and save it somewhere, it will not be shown again
Use this App Password with ENV as ROCKSKY_APP_PW or as appPassword in File/AIO configuration.
Scrobble Data Validation and Automatically Fixing It
When using the PDS approach Multi-scrobbler will validate that your scrobble data meets Rocksky's scrobble data quality before it is sent:
- if your data is missing
track,artist, oralbumthe scrobble will always fail - if your data does not have at least one of:
ISRC,Recording MBID, orSpotify Idthen it will fail on automatic scrobble- You can force the scrobble if you are sure the data is correct by retrying the scrobble from MS's web UI
There are some scenarios where you might not need to worry about this at all:
- Your Sources already have high quality data: like Spotify, Listenbrainz, Plex/Jellyfin with metadata agents, Navidrome with Picard-matched files, etc...
- You have a Musicbrainz Stage enriching Play data before it gets to the Rocksky Client.
Otherwise, you should consider configuring the Rocksky Transformer Stage to fix/enrich your scrobble data automatically. This stage uses Rocksky's own metadata API to match your data and correct it so that it is high enough quality to submit to Rocksky.
The default configuration for Rocksky Transformer Stage only makes calls to Rocksky when essential data is missing and only modifies your data when it has high confidence. You can safely apply this Stage without worrying about it majorly affecting what is actually scrobbled.
Working Examples
- ENV
- File
- AIO
services:
multi-scrobbler:
image: foxxmd/multi-scrobbler
environment:
# searches with the searchOrder
# isrc => basic
- RS_PRESETS=default
# ... your source ENVs go here
#
- ROCKSKY_ID=Rocky
- ROCKSKY_HANDLE=alice.bsky.social
- ROCKSKY_APP_PW=1234567
# applies Rocksky Stage to preTransform of Rocksky Client
- ROCKSKY_TRANSFORMS=rocksky
volumes:
- "./config:/config"
ports:
- "9078:9078"
restart: unless-stopped
[
{
"name": "Rocky",
"configureAs": "client",
"data": { /* ... */},
"options": {
"playTransform": {
"preCompare": [
{
"type": "rocksky",
"name": "MSDefault"
}
]
}
}
}
]
{
"sources": [/* ... */],
"clients": [
{
"name": "Rocky",
"type": "rocksky"
"configureAs": "client",
"data": { /* ... */},
"options": {
"playTransform": {
"preCompare": [
{
"type": "rocksky",
"name": "MSDefault"
}
]
}
}
}
]
}
The Server approach has Multi-Scrobbler scrobble to Rocksky's server at api.rocksky.app. This is an asynchronous process and validation of your data occurs after scrobbling has occurred.
This means that MS recieves an "OK" response from Rocksky, but if Rocksky can't validate the quality of your scrobble data it will delete the scrobble attempt and never add it your account's repository.
This approach is deprecated and will be removed in a future version of Multi-Scrobbler. You should switch to the PDS approach as soon as possible.
Setup
Navigate to the Access Tokens in the Rocksky settings dropdown, and create a new token.
Use this token for the env ROCKSKY_TOKEN or token field in File/AIO configuration.
Configuration
Determining Your Atmosphere Handle/Identifier
Your Atmosphere identifier/handle should be either:
- A valid DID, starting with
did:plc:...ordid:web:... - Your full Atmosphere Account ATProto handle, including TLD
If using a handle:
- For regular Bluesky account this will be like:
alice.bsky.social - For Bluesky accounts that use their domain as their account this is your domain:
mydomain.com - For non-Bluesky-PDS users, you probably already know your handle
If your identifier does not look like a DID and does not include a TLD then multi-scrobbler will automatically append .bsky.social to your handle value.
- ENV
- File
- AIO
This is configuration for the ENV Config Type.
| Environmental Variable | Type | Default | Description |
|---|---|---|---|
ROCKSKY_ID | string | A globally unique ID EX myComponentId | |
ROCKSKY_NAME | string | Value of ROCKSKY_ID | A vanity name EX My Cool Component |
ROCKSKY_ENABLE | boolean | true | Should this component be used? |
ROCKSKY_HANDLE | string | The fully-qualified handle, or identifier, for your Atmosphere account | |
ROCKSKY_APP_PW | string | The App Password you created for your Atmosphere account | |
ROCKSKY_TOKEN | string | (DEPRECATED) Access Token generated from https://rocksky.app/access-tokens in Rocksky for your account |
Bold/Italic = Required
Config Structure
This displays the structure of the File Configuration for a rocksky 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 rocksky 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 rocksky configs will validate correctly in the editor but both source and client rocksky configs are allowed in the real CONFIG/rocksky.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 rocksky 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.
[
{
"id": "myRockskyClient",
"name": "FoxxMD Rocksky Client",
"configureAs": "client",
"data": {
"appPassword": "l95n-0ndl-2jj7-b1p4",
"handle": "alice.bsky.social"
}
}
]
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 rocksky 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 rocksky 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 rocksky 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": [
{
"id": "myRockskyClient",
"name": "FoxxMD Rocksky Client",
"configureAs": "client",
"data": {
"appPassword": "l95n-0ndl-2jj7-b1p4",
"handle": "alice.bsky.social"
},
"type": "rocksky"
}
]
}