[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.

docs: chromecast docs and schema

FoxxMD (Jan 11, 2024, 3:25 PM EST) 8929a630 077f5d75

+574
+1
README.md
··· 23 23 * [Mopidy](/docsite/docs/configuration/configuration.md#mopidy) 24 24 * [JRiver](/docsite/docs/configuration/configuration.md#jriver) 25 25 * [Kodi](/docsite/docs/configuration/configuration.md#kodi) 26 + * [Google Cast (Chromecast)](/docsite/docs/configuration/configuration.md#google-cast--chromecast-) 26 27 * Supports scrobbling to many **Clients** 27 28 * [Maloja](/docsite/docs/configuration/configuration.md#maloja) 28 29 * [Last.fm](/docsite/docs/configuration/configuration.md#lastfm)
+11
config/chromecast.json.example
··· 1 + [ 2 + { 3 + "name": "MyCast", 4 + "data": { 5 + "blacklistedDevices": [], 6 + "whitelistedDevices": [], 7 + "blacklistedApps": [], 8 + "whitelistedApps": [] 9 + } 10 + } 11 + ]
+23
docsite/docs/configuration/configuration.md
··· 25 25 * [JRiver](#jriver) 26 26 * [Kodi](#kodi) 27 27 * [WebScrobbler](#webscrobbler) 28 + * [Google Cast (Chromecast)](#google-cast--chromecast-) 28 29 * [Client Configurations](#client-configurations) 29 30 * [Maloja](#maloja) 30 31 * [Last.fm](#lastfm) ··· 693 694 ### File-Based 694 695 695 696 See [`webscrobbler.json.example`](https://github.com/FoxxMD/multi-scrobbler/blob/master/config/webscrobbler.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FWebScrobblerSourceConfig/%23%2Fdefinitions%2FWebScrobblerData?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fmaster%2Fsrc%2Fbackend%2Fcommon%2Fschema%2Fsource.json) 697 + 698 + ## [Google Cast (Chromecast)](https://www.google.com/chromecast/built-in/) 699 + 700 + If your media device can be **Cast** to using this button ![Chromecast Icon](https://upload.wikimedia.org/wikipedia/commons/2/26/Chromecast_cast_button_icon.svg) on your phone/computer then multi-scrobbler can monitor it in order to scrobble music you play. 701 + 702 + **Note:** This source relies on common, **basic** music data provided by the cast device which will always be less exhaustive than data parsed from full source integrations. If there is an existing [Source](#source-configurations) it is recommended to configure for it and blacklist the app on Google Cast, rather than relying solely on Google Cast for scrobbling. 703 + 704 + The machine and/or container running multi-scrobbler must be configured to allow [mDNS traffic on port 5353/UDP](https://book.hacktricks.xyz/network-services-pentesting/5353-udp-multicast-dns-mdns). 705 + 706 + ### ENV-Based 707 + 708 + | Environmental Variable | Required? | Default | Description | 709 + |------------------------|-----------|---------|--------------------------------------------------------------------------------------| 710 + | CC_ENABLE | No | | Set to 'true' to enable Cast monitoring without needing to define other ENVs | 711 + | CC_WHITELIST_DEVICES | No | | Only scrobble from these Cast devices. Comma-delimited list. EX mini-home, family-tv | 712 + | CC_BLACKLIST_DEVICES | No | | Do not scrobble from these Cast devices. Comma-delimited list | 713 + | CC_WHITELIST_APPS | No | | Only scrobble from these casted Apps. Comma-delimited list. EX spotify, pandora | 714 + | CC_BLACKLIST_APPS | No | | Do not scrobble from these casted Apps. Comma-delimited list | 715 + 716 + ### File-Based 717 + 718 + See [`chromecast.json.example`](https://github.com/FoxxMD/multi-scrobbler/blob/master/config/webscrobbler.json.example) or [explore the schema with an example and live editor/validator](https://json-schema.app/view/%23%2Fdefinitions%2FChromecastSourceConfig/%23%2Fdefinitions%2FChromecastData?url=https%3A%2F%2Fraw.githubusercontent.com%2FFoxxMD%2Fmulti-scrobbler%2Fmaster%2Fsrc%2Fbackend%2Fcommon%2Fschema%2Fsource.json) 696 719 697 720 # Client Configurations 698 721
+1
docsite/src/pages/index.mdx
··· 26 26 * [Mopidy](docs/configuration#mopidy) 27 27 * [JRiver](docs/configuration#jriver) 28 28 * [Kodi](docs/configuration#kodi) 29 + * [Google Cast (Chromecast)](/docs/configuration#google-cast--chromecast-) 29 30 * Supports scrobbling to many **Clients** 30 31 * [Maloja](docs/configuration#maloja) 31 32 * [Last.fm](docs/configuration#lastfm)
+182
src/backend/common/schema/aio-source.json
··· 1 1 { 2 2 "$schema": "http://json-schema.org/draft-07/schema#", 3 3 "definitions": { 4 + "ChromecastData": { 5 + "properties": { 6 + "blacklistApps": { 7 + "anyOf": [ 8 + { 9 + "items": { 10 + "type": "string" 11 + }, 12 + "type": "array" 13 + }, 14 + { 15 + "type": "string" 16 + } 17 + ], 18 + "description": "DO NOT scrobble from any application that START WITH these values, case-insensitive", 19 + "examples": [ 20 + [ 21 + "spotify", 22 + "pandora" 23 + ] 24 + ], 25 + "title": "blacklistApps" 26 + }, 27 + "blacklistDevices": { 28 + "anyOf": [ 29 + { 30 + "items": { 31 + "type": "string" 32 + }, 33 + "type": "array" 34 + }, 35 + { 36 + "type": "string" 37 + } 38 + ], 39 + "description": "DO NOT scrobble from any cast devices that START WITH these values, case-insensitive", 40 + "examples": [ 41 + [ 42 + "home-mini", 43 + "family-tv" 44 + ] 45 + ], 46 + "title": "blacklistDevices" 47 + }, 48 + "maxPollRetries": { 49 + "default": 5, 50 + "description": "default # of automatic polling restarts on error", 51 + "examples": [ 52 + 5 53 + ], 54 + "title": "maxPollRetries", 55 + "type": "number" 56 + }, 57 + "maxRequestRetries": { 58 + "default": 1, 59 + "description": "default # of http request retries a source can make before error is thrown", 60 + "examples": [ 61 + 1 62 + ], 63 + "title": "maxRequestRetries", 64 + "type": "number" 65 + }, 66 + "options": { 67 + "$ref": "#/definitions/Record<string,any>", 68 + "title": "options" 69 + }, 70 + "retryMultiplier": { 71 + "default": 1.5, 72 + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", 73 + "examples": [ 74 + 1.5 75 + ], 76 + "title": "retryMultiplier", 77 + "type": "number" 78 + }, 79 + "scrobbleThresholds": { 80 + "$ref": "#/definitions/ScrobbleThresholds", 81 + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", 82 + "title": "scrobbleThresholds" 83 + }, 84 + "whitelistApps": { 85 + "anyOf": [ 86 + { 87 + "items": { 88 + "type": "string" 89 + }, 90 + "type": "array" 91 + }, 92 + { 93 + "type": "string" 94 + } 95 + ], 96 + "description": "ONLY scrobble from any application that START WITH these values, case-insensitive\n\nIf whitelist is present then blacklist is ignored", 97 + "examples": [ 98 + [ 99 + "spotify", 100 + "pandora" 101 + ] 102 + ], 103 + "title": "whitelistApps" 104 + }, 105 + "whitelistDevices": { 106 + "anyOf": [ 107 + { 108 + "items": { 109 + "type": "string" 110 + }, 111 + "type": "array" 112 + }, 113 + { 114 + "type": "string" 115 + } 116 + ], 117 + "description": "ONLY scrobble from any cast device that START WITH these values, case-insensitive\n\nIf whitelist is present then blacklist is ignored", 118 + "examples": [ 119 + [ 120 + "home-mini", 121 + "family-tv" 122 + ] 123 + ], 124 + "title": "whitelistDevices" 125 + } 126 + }, 127 + "title": "ChromecastData", 128 + "type": "object" 129 + }, 130 + "ChromecastSourceAIOConfig": { 131 + "properties": { 132 + "clients": { 133 + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", 134 + "examples": [ 135 + [ 136 + "MyMalojaConfigName", 137 + "MyLastFMConfigName" 138 + ] 139 + ], 140 + "items": { 141 + "type": "string" 142 + }, 143 + "title": "clients", 144 + "type": "array" 145 + }, 146 + "data": { 147 + "$ref": "#/definitions/ChromecastData", 148 + "title": "data" 149 + }, 150 + "enable": { 151 + "default": true, 152 + "description": "Should MS use this client/source? Defaults to true", 153 + "examples": [ 154 + true 155 + ], 156 + "title": "enable", 157 + "type": "boolean" 158 + }, 159 + "name": { 160 + "description": "Unique identifier for this source.", 161 + "title": "name", 162 + "type": "string" 163 + }, 164 + "options": { 165 + "$ref": "#/definitions/CommonSourceOptions", 166 + "title": "options" 167 + }, 168 + "type": { 169 + "enum": [ 170 + "chromecast" 171 + ], 172 + "title": "type", 173 + "type": "string" 174 + } 175 + }, 176 + "required": [ 177 + "data", 178 + "type" 179 + ], 180 + "title": "ChromecastSourceAIOConfig", 181 + "type": "object" 182 + }, 4 183 "CommonSourceOptions": { 5 184 "properties": { 6 185 "logFilterFailure": { ··· 1461 1640 }, 1462 1641 { 1463 1642 "$ref": "#/definitions/WebScrobblerSourceAIOConfig" 1643 + }, 1644 + { 1645 + "$ref": "#/definitions/ChromecastSourceAIOConfig" 1464 1646 } 1465 1647 ], 1466 1648 "title": "SourceAIOConfig"
+182
src/backend/common/schema/aio.json
··· 1 1 { 2 2 "$schema": "http://json-schema.org/draft-07/schema#", 3 3 "definitions": { 4 + "ChromecastData": { 5 + "properties": { 6 + "blacklistApps": { 7 + "anyOf": [ 8 + { 9 + "items": { 10 + "type": "string" 11 + }, 12 + "type": "array" 13 + }, 14 + { 15 + "type": "string" 16 + } 17 + ], 18 + "description": "DO NOT scrobble from any application that START WITH these values, case-insensitive", 19 + "examples": [ 20 + [ 21 + "spotify", 22 + "pandora" 23 + ] 24 + ], 25 + "title": "blacklistApps" 26 + }, 27 + "blacklistDevices": { 28 + "anyOf": [ 29 + { 30 + "items": { 31 + "type": "string" 32 + }, 33 + "type": "array" 34 + }, 35 + { 36 + "type": "string" 37 + } 38 + ], 39 + "description": "DO NOT scrobble from any cast devices that START WITH these values, case-insensitive", 40 + "examples": [ 41 + [ 42 + "home-mini", 43 + "family-tv" 44 + ] 45 + ], 46 + "title": "blacklistDevices" 47 + }, 48 + "maxPollRetries": { 49 + "default": 5, 50 + "description": "default # of automatic polling restarts on error", 51 + "examples": [ 52 + 5 53 + ], 54 + "title": "maxPollRetries", 55 + "type": "number" 56 + }, 57 + "maxRequestRetries": { 58 + "default": 1, 59 + "description": "default # of http request retries a source can make before error is thrown", 60 + "examples": [ 61 + 1 62 + ], 63 + "title": "maxRequestRetries", 64 + "type": "number" 65 + }, 66 + "options": { 67 + "$ref": "#/definitions/Record<string,any>", 68 + "title": "options" 69 + }, 70 + "retryMultiplier": { 71 + "default": 1.5, 72 + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", 73 + "examples": [ 74 + 1.5 75 + ], 76 + "title": "retryMultiplier", 77 + "type": "number" 78 + }, 79 + "scrobbleThresholds": { 80 + "$ref": "#/definitions/ScrobbleThresholds", 81 + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", 82 + "title": "scrobbleThresholds" 83 + }, 84 + "whitelistApps": { 85 + "anyOf": [ 86 + { 87 + "items": { 88 + "type": "string" 89 + }, 90 + "type": "array" 91 + }, 92 + { 93 + "type": "string" 94 + } 95 + ], 96 + "description": "ONLY scrobble from any application that START WITH these values, case-insensitive\n\nIf whitelist is present then blacklist is ignored", 97 + "examples": [ 98 + [ 99 + "spotify", 100 + "pandora" 101 + ] 102 + ], 103 + "title": "whitelistApps" 104 + }, 105 + "whitelistDevices": { 106 + "anyOf": [ 107 + { 108 + "items": { 109 + "type": "string" 110 + }, 111 + "type": "array" 112 + }, 113 + { 114 + "type": "string" 115 + } 116 + ], 117 + "description": "ONLY scrobble from any cast device that START WITH these values, case-insensitive\n\nIf whitelist is present then blacklist is ignored", 118 + "examples": [ 119 + [ 120 + "home-mini", 121 + "family-tv" 122 + ] 123 + ], 124 + "title": "whitelistDevices" 125 + } 126 + }, 127 + "title": "ChromecastData", 128 + "type": "object" 129 + }, 130 + "ChromecastSourceAIOConfig": { 131 + "properties": { 132 + "clients": { 133 + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", 134 + "examples": [ 135 + [ 136 + "MyMalojaConfigName", 137 + "MyLastFMConfigName" 138 + ] 139 + ], 140 + "items": { 141 + "type": "string" 142 + }, 143 + "title": "clients", 144 + "type": "array" 145 + }, 146 + "data": { 147 + "$ref": "#/definitions/ChromecastData", 148 + "title": "data" 149 + }, 150 + "enable": { 151 + "default": true, 152 + "description": "Should MS use this client/source? Defaults to true", 153 + "examples": [ 154 + true 155 + ], 156 + "title": "enable", 157 + "type": "boolean" 158 + }, 159 + "name": { 160 + "description": "Unique identifier for this source.", 161 + "title": "name", 162 + "type": "string" 163 + }, 164 + "options": { 165 + "$ref": "#/definitions/CommonSourceOptions", 166 + "title": "options" 167 + }, 168 + "type": { 169 + "enum": [ 170 + "chromecast" 171 + ], 172 + "title": "type", 173 + "type": "string" 174 + } 175 + }, 176 + "required": [ 177 + "data", 178 + "type" 179 + ], 180 + "title": "ChromecastSourceAIOConfig", 181 + "type": "object" 182 + }, 4 183 "ClientAIOConfig": { 5 184 "anyOf": [ 6 185 { ··· 2183 2362 }, 2184 2363 { 2185 2364 "$ref": "#/definitions/WebScrobblerSourceAIOConfig" 2365 + }, 2366 + { 2367 + "$ref": "#/definitions/ChromecastSourceAIOConfig" 2186 2368 } 2187 2369 ], 2188 2370 "title": "SourceAIOConfig"
+174
src/backend/common/schema/source.json
··· 42 42 }, 43 43 { 44 44 "$ref": "#/definitions/WebScrobblerSourceConfig" 45 + }, 46 + { 47 + "$ref": "#/definitions/ChromecastSourceConfig" 45 48 } 46 49 ], 47 50 "definitions": { 51 + "ChromecastData": { 52 + "properties": { 53 + "blacklistApps": { 54 + "anyOf": [ 55 + { 56 + "items": { 57 + "type": "string" 58 + }, 59 + "type": "array" 60 + }, 61 + { 62 + "type": "string" 63 + } 64 + ], 65 + "description": "DO NOT scrobble from any application that START WITH these values, case-insensitive", 66 + "examples": [ 67 + [ 68 + "spotify", 69 + "pandora" 70 + ] 71 + ], 72 + "title": "blacklistApps" 73 + }, 74 + "blacklistDevices": { 75 + "anyOf": [ 76 + { 77 + "items": { 78 + "type": "string" 79 + }, 80 + "type": "array" 81 + }, 82 + { 83 + "type": "string" 84 + } 85 + ], 86 + "description": "DO NOT scrobble from any cast devices that START WITH these values, case-insensitive", 87 + "examples": [ 88 + [ 89 + "home-mini", 90 + "family-tv" 91 + ] 92 + ], 93 + "title": "blacklistDevices" 94 + }, 95 + "maxPollRetries": { 96 + "default": 5, 97 + "description": "default # of automatic polling restarts on error", 98 + "examples": [ 99 + 5 100 + ], 101 + "title": "maxPollRetries", 102 + "type": "number" 103 + }, 104 + "maxRequestRetries": { 105 + "default": 1, 106 + "description": "default # of http request retries a source can make before error is thrown", 107 + "examples": [ 108 + 1 109 + ], 110 + "title": "maxRequestRetries", 111 + "type": "number" 112 + }, 113 + "options": { 114 + "$ref": "#/definitions/Record<string,any>", 115 + "title": "options" 116 + }, 117 + "retryMultiplier": { 118 + "default": 1.5, 119 + "description": "default retry delay multiplier (retry attempt * multiplier = # of seconds to wait before retrying)", 120 + "examples": [ 121 + 1.5 122 + ], 123 + "title": "retryMultiplier", 124 + "type": "number" 125 + }, 126 + "scrobbleThresholds": { 127 + "$ref": "#/definitions/ScrobbleThresholds", 128 + "description": "Set thresholds for when multi-scrobbler should consider a tracked play to be \"scrobbable\". If both duration and percent are defined then if either condition is met the track is scrobbled.", 129 + "title": "scrobbleThresholds" 130 + }, 131 + "whitelistApps": { 132 + "anyOf": [ 133 + { 134 + "items": { 135 + "type": "string" 136 + }, 137 + "type": "array" 138 + }, 139 + { 140 + "type": "string" 141 + } 142 + ], 143 + "description": "ONLY scrobble from any application that START WITH these values, case-insensitive\n\nIf whitelist is present then blacklist is ignored", 144 + "examples": [ 145 + [ 146 + "spotify", 147 + "pandora" 148 + ] 149 + ], 150 + "title": "whitelistApps" 151 + }, 152 + "whitelistDevices": { 153 + "anyOf": [ 154 + { 155 + "items": { 156 + "type": "string" 157 + }, 158 + "type": "array" 159 + }, 160 + { 161 + "type": "string" 162 + } 163 + ], 164 + "description": "ONLY scrobble from any cast device that START WITH these values, case-insensitive\n\nIf whitelist is present then blacklist is ignored", 165 + "examples": [ 166 + [ 167 + "home-mini", 168 + "family-tv" 169 + ] 170 + ], 171 + "title": "whitelistDevices" 172 + } 173 + }, 174 + "title": "ChromecastData", 175 + "type": "object" 176 + }, 177 + "ChromecastSourceConfig": { 178 + "properties": { 179 + "clients": { 180 + "description": "Restrict scrobbling tracks played from this source to Clients with names from this list. If list is empty is not present Source scrobbles to all configured Clients.", 181 + "examples": [ 182 + [ 183 + "MyMalojaConfigName", 184 + "MyLastFMConfigName" 185 + ] 186 + ], 187 + "items": { 188 + "type": "string" 189 + }, 190 + "title": "clients", 191 + "type": "array" 192 + }, 193 + "data": { 194 + "$ref": "#/definitions/ChromecastData", 195 + "title": "data" 196 + }, 197 + "enable": { 198 + "default": true, 199 + "description": "Should MS use this client/source? Defaults to true", 200 + "examples": [ 201 + true 202 + ], 203 + "title": "enable", 204 + "type": "boolean" 205 + }, 206 + "name": { 207 + "description": "Unique identifier for this source.", 208 + "title": "name", 209 + "type": "string" 210 + }, 211 + "options": { 212 + "$ref": "#/definitions/CommonSourceOptions", 213 + "title": "options" 214 + } 215 + }, 216 + "required": [ 217 + "data" 218 + ], 219 + "title": "ChromecastSourceConfig", 220 + "type": "object" 221 + }, 48 222 "CommonSourceOptions": { 49 223 "properties": { 50 224 "logFilterFailure": {