[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(discord): Improved discord app docs

FoxxMD (Feb 25, 2026, 4:31 PM UTC) d13fb338 253e9125

+416 -244
+10
docsite/src/components/snippets/_discord-port-warn.mdx
··· 1 + <DetailsAdmo type="warning" summary="Insecure Communication"> 2 + 3 + This method of exposing Discord IPC is **not secure**. There is no authentication used for the traffic relayed to/from the opened TCP port. 4 + 5 + You should only use this method if you trust the network your machine is on. Additionally: 6 + 7 + * **Do** use a firewall to limit source (IP) of incoming traffic to this TCP port 8 + * **Do not** expose this port to the public internet 9 + 10 + </DetailsAdmo>
+396
docsite/docs/configuration/clients/discord/discord-app.mdx
··· 1 + --- 2 + title: Discord (App) 3 + toc_min_heading_level: 2 4 + toc_max_heading_level: 5 5 + --- 6 + 7 + import Tabs from '@theme/Tabs'; 8 + import TabItem from '@theme/TabItem'; 9 + import TcpWarning from "@site/src/components/snippets/_discord-port-warn.mdx"; 10 + import JsonConfig from '!!raw-loader!@site/../config/discord-local.json.example'; 11 + 12 + This scrobbler uses **[Now Playing](/configuration/clients#now-playing)** functionality to set your Discord [Rich Presence](https://docs.discord.com/developers/rich-presence/overview) to the music you are currently monitoring with multi-scrobbler. 13 + 14 + <img src={require('/img/discord_presence_art.png').default} height="127"/> 15 + 16 + This integration uses an **existing Discord application** to set your Rich Presence. 17 + 18 + ## Required Setup 19 + 20 + ### Discord Application 21 + 22 + You must create a [Discord App](https://docs.discord.com/developers/quick-start/overview-of-apps) in order to use this integration. Creating an App is free and simple. 23 + 24 + Go to the [Discord Developer Portal](https://discord.com/developers/applications) 25 + 26 + * Click on "New Application" and give it a name 27 + * Copy the **Application Id** (Client Id) shown after creation 28 + * Add this Id to your Multi-Scrobbler config 29 + * Env Config => `DISCORD_APPLICATION_ID=12345678` 30 + * File Config => `"applicationId": "12345678"` 31 + 32 + ### Discord Connection 33 + 34 + This integration uses an existing, running Discord application to communicate with Discord and set Rich Presence. Multi-scrobbler must be able to communicate with the Discord application, either by being on the same machine or over a network. 35 + 36 + :::note 37 + 38 + If MS was [installed locally](/installation#local-installation) (not Docker) on the same machine as the Discord App then MS should [automatically detect the correct method](#find-ipc-connection) and [use it](#pass-ipc-to-multi-scrobbler) **without** any configuration from you. This will work for **any OS**. 39 + 40 + If MS cannot determine this automatically, follow the steps for your OS below. 41 + 42 + ::: 43 + 44 + Follow the sections below to configure MS for your specific environment. 45 + 46 + #### Find IPC Connection 47 + 48 + Discord uses OS-specific methods to communicate with other applications on the same host, called [IPC](https://en.wikipedia.org/wiki/Inter-process_communication). You may need to determine some details about the IPC method in order for MS to communicate with it correctly. 49 + 50 + 51 + <Tabs groupId="osType" queryString> 52 + 53 + <TabItem value="linux" label="Discord on Linux"> 54 + 55 + On Linux, Discord uses a [Unix Socket](https://en.wikipedia.org/wiki/Unix_domain_socket) for IPC. 56 + 57 + With Discord running, run this command: 58 + 59 + ``` 60 + $ sudo netstat -apeen | grep discord 61 + 62 + unix 2 [ ACC ] STREAM LISTENING 11026149 1641787/Discord /home/foxx/.var/app/com.discordapp.Discord/cache/scoped_dirnnxNIn/SingletonSocket 63 + unix 2 [ ACC ] STREAM LISTENING 11036791 1642030/exe /run/user/1000/discord-ipc-0 64 + ``` 65 + 66 + We see that the path we need is: 67 + 68 + ``` 69 + /run/user/1000/discord-ipc-0 70 + ``` 71 + 72 + </TabItem> 73 + 74 + <TabItem value="macos" label="Discord on MacOS"> 75 + 76 + On MacOS, Discord uses a [Unix Socket](https://en.wikipedia.org/wiki/Unix_domain_socket) for IPC. 77 + 78 + With Discord running, run this command: 79 + 80 + ``` 81 + $ sudo netstat -apeen | grep discord 82 + 83 + unix 2 [ ACC ] STREAM LISTENING 11026149 1641787/Discord /home/foxx/.var/app/com.discordapp.Discord/cache/scoped_dirnnxNIn/SingletonSocket 84 + unix 2 [ ACC ] STREAM LISTENING 11036791 1642030/exe /run/user/1000/discord-ipc-0 85 + ``` 86 + 87 + We see that the path we need is: 88 + 89 + ``` 90 + /run/user/1000/discord-ipc-0 91 + ``` 92 + 93 + </TabItem> 94 + 95 + <TabItem value="windows" label="Discord on Windows"> 96 + 97 + Windows uses [**Named Pipes**](https://learn.microsoft.com/en-us/windows/win32/ipc/named-pipes) for IPC. These aren't easily iteratable without external software, like [Pipetap](https://github.com/sensepost/pipetap). 98 + 99 + The syntax for a named pipe is like this: 100 + 101 + ``` 102 + \\.\pipe\app_named_pipe_foo 103 + ``` 104 + 105 + and Discord's names follow this pattern: 106 + 107 + ``` 108 + \\.\pipe\discord-ipc-0 109 + ``` 110 + 111 + Where `0` increments for each different instance of Discord (official, canary, nightly, etc...). 112 + 113 + The default Discord pipe name is: `discord-ipc-0` 114 + 115 + </TabItem> 116 + 117 + </Tabs> 118 + 119 + #### Pass IPC to Multi-Scrobbler 120 + 121 + After [finding your IPC connection path](#find-ipc-connection) you will need to make it accessible to Multi-Scrobbler. 122 + 123 + <Tabs groupId="osType" queryString> 124 + 125 + <TabItem value="linux" label="Discord on Linux"> 126 + 127 + <Tabs groupId="msConnection"> 128 + 129 + <TabItem value="remote" label="MS on Different Host"> 130 + 131 + <TcpWarning/> 132 + 133 + Use [`socat`](https://linux.die.net/man/1/socat) to bidirectionally relay communication from Discord's [unix socket](#find-ipc-connection) to a listening TCP port on the same host. Likely, you will want to setup a service to start this command on login. 134 + 135 + ```shell 136 + $ socat -v TCP-LISTEN:6655,reuseaddr,fork UNIX-CONNECT:/run/user/1000/discord-ipc-0 137 + ``` 138 + 139 + In your MS docker compose file add the `host:port` of the host running Discord/`socat` to `DISCORD_IPC_LOCATIONS` `environment:` 140 + 141 + ```yaml title="docker-compose.yaml" 142 + 143 + environment: 144 + # ... 145 + DISCORD_IPC_LOCATIONS=192.168.DISCORD_HOST.IP:6655 146 + ``` 147 + </TabItem> 148 + <TabItem value="local-docker" label="MS on Same Host (Docker)"> 149 + 150 + In your MS docker compose file, pass the path of Discord's [unix socket](#find-ipc-connection) as a volume and add this path to `DISCORD_IPC_LOCATIONS` in `environment:` 151 + 152 + ```yaml title="docker-compose.yaml" 153 + 154 + environment: 155 + # ... 156 + DISCORD_IPC_LOCATIONS=/run/discord-ipc-0 157 + volumes: 158 + - /run/user/1000/discord-ipc-0:/run/discord-ipc-0 159 + ``` 160 + 161 + </TabItem> 162 + <TabItem value="local" label="MS on Same Host (Non-Docker)"> 163 + 164 + No configuration is required. If MS does not automatically work for you then try the **MS on Same Host (Docker)** method using the `DISCORD_IPC_LOCATIONS` environment variable. 165 + 166 + </TabItem> 167 + 168 + </Tabs> 169 + 170 + </TabItem> 171 + 172 + <TabItem value="macos" label="Discord on MacOS"> 173 + 174 + <Tabs groupId="msConnection"> 175 + 176 + <TabItem value="remote" label="MS on Different Host"> 177 + 178 + <TcpWarning/> 179 + 180 + Use one of the methods below to setup `socat` on your macOS machine. 181 + 182 + <details> 183 + 184 + <summary>`socat` installed natively</summary> 185 + 186 + Install [`socat`](https://formulae.brew.sh/formula/socat) using homebrew to use it as a native command on your host. 187 + 188 + Then, use [`socat`](https://linux.die.net/man/1/socat) to bidirectionally relay communication from Discord's [unix socket](#find-ipc-connection) to a listening TCP port on the same host. Likely, you will want to setup a service to start this command on login. 189 + 190 + ```shell 191 + $ socat -v TCP-LISTEN:6655,reuseaddr,fork UNIX-CONNECT:/run/user/1000/discord-ipc-0 192 + ``` 193 + 194 + </details> 195 + 196 + <details> 197 + 198 + <summary>`socat` in Docker</summary> 199 + 200 + Use the [`socat` container](https://hub.docker.com/r/alpine/socat) in combination with the Discord [unix socket](#find-ipc-connection) found earlier: 201 + 202 + ```yaml title="docker-compose.yaml" 203 + services: 204 + socat: 205 + image: alpine/socat 206 + ports: 207 + - "6655:6655" 208 + volumes: 209 + - /run/user/1000/discord-ipc-0:/run/discord-ipc-0 210 + command: 211 + - '-v' 212 + - 'TCP-LISTEN:6655,reuseaddr,fork' 213 + - 'UNIX-CONNECT:/run/discord-ipc-0' 214 + ``` 215 + </details> 216 + 217 + In your MS docker compose file add the `host:port` of the host running Discord/`socat` to `DISCORD_IPC_LOCATIONS` `environment:` 218 + 219 + ```yaml title="docker-compose.yaml" 220 + 221 + environment: 222 + # ... 223 + DISCORD_IPC_LOCATIONS=192.168.DISCORD_HOST.IP:6655 224 + ``` 225 + </TabItem> 226 + <TabItem value="local-docker" label="MS on Same Host (Docker)"> 227 + 228 + In your MS docker compose file, pass the path of Discord's [unix socket](#find-ipc-connection) as a volume and add this path to `DISCORD_IPC_LOCATIONS` in `environment:` 229 + 230 + ```yaml title="docker-compose.yaml" 231 + 232 + environment: 233 + # ... 234 + DISCORD_IPC_LOCATIONS=/discord-ipc-0 235 + volumes: 236 + - /run/user/1000/discord-ipc-0:/run/discord-ipc-0 237 + ``` 238 + 239 + </TabItem> 240 + <TabItem value="local" label="MS on Same Host (Non-Docker)"> 241 + 242 + No configuration is required. If MS does not automatically work for you then try the **MS on Same Host (Docker)** method using the `DISCORD_IPC_LOCATIONS` environment variable. 243 + 244 + </TabItem> 245 + 246 + </Tabs> 247 + 248 + </TabItem> 249 + 250 + <TabItem value="windows" label="Discord on Windows"> 251 + 252 + <Tabs groupId="msConnection"> 253 + 254 + <TabItem value="remote" label="MS in Docker"> 255 + 256 + :::note 257 + 258 + While it is possible to use [named pipes directly in Docker](https://forums.docker.com/t/volume-mount-path-error/143626/3) this has not been tested and [may only work for windows containers](https://github.com/docker/for-win/issues/6813#issuecomment-632859857). If you are adventurous, try this out and if you can get it working please [report your findings in an issue.](https://github.com/FoxxMD/multi-scrobbler/issues) 259 + 260 + ::: 261 + 262 + :::warning 263 + 264 + This method is **experimental** and may be buggy and prone to crashes. If you are a Windows or Rust developer please consider helping improve the [pipe proxy implementation](https://github.com/FoxxMD/named-pipe-to-tcp-proxy). 265 + 266 + ::: 267 + 268 + <TcpWarning/> 269 + 270 + Use [**pipeProxy**](https://github.com/FoxxMD/named-pipe-to-tcp-proxy) to connect to the Discord named pipe and expose it on a TCP port. 271 + 272 + Download the latest [`pipeProxy.exe`](https://github.com/FoxxMD/named-pipe-to-tcp-proxy/releases) from the releases page. 273 + 274 + The host/ip should be the IP of the machine running discord. 275 + 276 + Run pipeProxy from the windows command line: 277 + 278 + ``` 279 + pipeProxy.exe --pipe "\\.\pipe\discord-ipc-0" --tcp "192.168.0.100:6655" 280 + ``` 281 + 282 + In your MS docker compose file add the `host:port` of the host running `pipeProxy` to `DISCORD_IPC_LOCATIONS` `environment:` 283 + 284 + ```yaml title="docker-compose.yaml" 285 + 286 + environment: 287 + # ... 288 + DISCORD_IPC_LOCATIONS=192.168.0.100:6655 289 + ``` 290 + 291 + </TabItem> 292 + <TabItem value="local" label="MS on Same Host (Non-Docker)"> 293 + 294 + No configuration is required. If MS does not automatically work for you then try the **MS in Docker** method using the `DISCORD_IPC_LOCATIONS` environment variable. 295 + 296 + </TabItem> 297 + 298 + </Tabs> 299 + 300 + </TabItem> 301 + </Tabs> 302 + 303 + ## Optional Setup 304 + 305 + :::note 306 + 307 + Due to the limitations of the Discord local API the other listening activity detection and online status customizations found in [Headless](/configuration/discord/discord-headless#optional-setup) are not available for the Local integration. 308 + 309 + ::: 310 + 311 + ### Artwork 312 + 313 + Multi-scrobbler can display Album Art in your Discord status. The image that is used differs based on if the image URL is publically accessible. 314 + 315 + The order in which multi-scrobbler determines what image to use is the same as the order of the tabs shown below. 316 + 317 + #### Artwork URL Types 318 + 319 + <Tabs groupId="artworkUrl" queryString> 320 + <TabItem label="External URLs" value="external"> 321 + MS can use external URLs for artwork. 322 + 323 + <img src={require('/img/discord_presence_art.png').default} height="127"/> 324 + 325 + External URLs that are not from known music services are **disabled by default.** This is to preserve *your* privacy because Discord does not host images, it only links to them and the URL is visible to other users. 326 + 327 + <details> 328 + 329 + <summary>Why Should I Care?</summary> 330 + 331 + There are some scenarios where you may not want your artwork URLs to be visible, for example: 332 + 333 + * A Source may be accessible only on your LAN (Jellyfin at `http://192.168.0.101`) 334 + * A Source may be internet-facing but you do not want to expose this information to discord/other users 335 + * A Source may be internet-facing but requires authentication to view the image 336 + </details> 337 + 338 + MS will use your artwork URLs only if: 339 + 340 + * artwork url is from a known music service/[Cover Art Archive](./?artworkUrl=caa#artwork-url-types) or 341 + * artwork url starts with `https` and 342 + * `artwork` (`DISCORD_ARTWORK`) is 343 + * `true` => always uses the url 344 + * a list of custom domains keywords an external artwork url should contain EX 345 + * ENV => `DISCORD_ARTWORK=mycdn,jellyfin` 346 + * File Config => `"artwork": ["mycdn","jellyfin"]` 347 + 348 + </TabItem> 349 + <TabItem label="Musicbrainz/Cover Art Achive" value="caa"> 350 + MS can try to use [Cover Art Archive](http://coverartarchive.org/) to get album art. The URL it retrieves is public which means it acts like an External URL that is always available for you. 351 + 352 + <img src={require('/img/discord_presence_art.png').default} height="127"/> 353 + 354 + MS will try to use Cover Art Archive if: 355 + 356 + * The scrobble data does not contain an album art url (no art in dashboard) or the existing url has failed an [External URL](./?artworkUrl=external#artwork-url-types) condition 357 + * and **the scrobble data contains a [Musicbrainz](/configuration/transforms/musicbrainz) Release (Album) MBID** 358 + 359 + Basically, if MS would normally use the [MS Default](./?artworkUrl=ms-default#artwork-url-types) art, it will first try to use Cover Art Archive if the scrobble has a Release MBID. 360 + 361 + Some Source, like [Jellyfin](/configuration/sources/jellyfin) and [Plex](/configuration/sources/plex), can automatically provide this ID if the music is "matched" in your library. 362 + 363 + For all others, you can [**configure MS to use the Musicbrainz Stage**](/configuration/transforms/musicbrainz#use-metadata-for-discord-album-art) for Discord to try to get this MBID. 364 + </TabItem> 365 + <TabItem label="MS Default" value="ms-default"> 366 + When these conditions are true: 367 + 368 + * Cannot use an [External URL](./?artworkUrl=external#artwork-url-types) and 369 + * Cannot get album art from [Cover Art Archive](./?artworkUrl=caa#artwork-url-types) and 370 + * Play does not contain artwork information (no artwork shown in dashboard) 371 + 372 + The status artwork will use a default URL instead of your artwork URL. 373 + 374 + Without any other configuration, the default URL is an icon from the [multi-scrobbler repository](https://github.com/FoxxMD/multi-scrobbler/blob/master/assets/default-artwork.png): 375 + 376 + <img src={require('/img/discord_presence_ms_default.png').default} height="127"/> 377 + 378 + This default image can be customized: 379 + 380 + * ENV Config => `DISCORD_ARTWORK_DEFAULT_URL=https://cooldomain.com/art.png` 381 + * File Config => `"artworkDefaultUrl": "https://cooldomain.com/art.png"` 382 + 383 + Remember, this URL need to be accessible on the public internet. 384 + </TabItem> 385 + </Tabs> 386 + 387 + ## Configuration 388 + 389 + <Config config="DiscordClientConfig" fileContent={JsonConfig} client name="discord"> 390 + | Environmental Variable | Required? | Default | Description | 391 + | :---------------------------- | --------- | ------- | :--------------------------------------------------------------------------------------------------------------- | 392 + | `DISCORD_APPLICATION_ID` | Yes | | Application ID | 393 + | `DISCORD_IPC_LOCATIONS` | No | | A commera-separated list of `host:port` network locations or file paths to unix socket for Discord | 394 + | `DISCORD_ARTWORK` | No | | A boolean indicating if external artwork URLs should be used. Or a comma-separated list of allowed domains | 395 + | `DISCORD_ARTWORK_DEFAULT_URL` | No | | A URL of an image to use as a fallback if the album art URL cannot be used. Or `false` to use discord's default. | 396 + </Config>
+4 -4
docsite/docs/configuration/clients/discord/discord-headless.mdx
··· 52 52 53 53 You must provide a User Token for this scrobbler to work. 54 54 55 - No instructions will be provided for obtaining a User Token because it is against Discord's policies to use it. Instead, you can search online for "how to obtain discord user token". 56 - 57 - :::warning 55 + <DetailsAdmo type="warning" summary="User Token is a Sensitive Credential"> 58 56 59 57 Treat your User Token like a login credential. Anyone who has your token can access Discord as you. 60 58 61 59 When finding instructions for obtaining this token only run commands, or follow steps, that you can understand and trust. Do not run commands you do not understand. Never give your token to someone else. 62 60 63 - ::: 61 + </DetailsAdmo> 62 + 63 + No instructions will be provided for obtaining a User Token because it is against Discord's policies to use it. Instead, you can search online for "how to obtain discord user token". 64 64 65 65 ## Optional Setup 66 66
-234
docsite/docs/configuration/clients/discord/discord-local.mdx
··· 1 - --- 2 - title: Discord (Local) 3 - toc_min_heading_level: 2 4 - toc_max_heading_level: 5 5 - --- 6 - 7 - import Tabs from '@theme/Tabs'; 8 - import TabItem from '@theme/TabItem'; 9 - import JsonConfig from '!!raw-loader!@site/../config/discord-local.json.example'; 10 - 11 - This scrobbler uses **[Now Playing](/configuration/clients#now-playing)** functionality to set your Discord [Rich Presence](https://docs.discord.com/developers/rich-presence/overview) to the music you are currently monitoring with multi-scrobbler. 12 - 13 - <img src={require('/img/discord_presence_art.png').default} height="127"/> 14 - 15 - This integration uses an **existing Discord application** to set your Rich Presence. 16 - 17 - ## Required Setup 18 - 19 - ### Discord Application 20 - 21 - You must create a [Discord App](https://docs.discord.com/developers/quick-start/overview-of-apps) in order to use this integration. Creating an App is free and simple. 22 - 23 - Go to the [Discord Developer Portal](https://discord.com/developers/applications) 24 - 25 - * Click on "New Application" and give it a name 26 - * Copy the **Application Id** (Client Id) shown after creation 27 - * Add this Id to your Multi-Scrobbler config 28 - * Env Config => `DISCORD_APPLICATION_ID=12345678` 29 - * File Config => `"applicationId": "12345678"` 30 - 31 - ### Discord Connection 32 - 33 - This integration uses an existing, running Discord application to communicate with Discord and set Rich Presence. Multi-scrobbler must be able to communicate with the Discord application, either on the same machine or over a network. 34 - 35 - <Tabs groupId="hostType" queryString> 36 - 37 - <TabItem value="local" label="Local"> 38 - 39 - In this scenario you have Multi-Scrobbler running on the same machine as Discord. 40 - 41 - <details> 42 - 43 - <summary>Local (Non-Docker) Installation</summary> 44 - 45 - If MS was [installed locally](/installation#local-installation) (not Docker) then MS should automatically detect Discord. This will work for **any OS**. 46 - 47 - </details> 48 - 49 - 50 - <details> 51 - 52 - <summary>Docker Installation</summary> 53 - 54 - :::note 55 - 56 - This works for **Linux/MacOS only.** 57 - 58 - ::: 59 - 60 - If MS is in a docker container you need to find the location of **unix socket** for discord. This is normally named `discord-ipc-0`. 61 - 62 - With Discord running, run this command: 63 - 64 - ``` 65 - $ sudo netstat -apeen | grep discord 66 - 67 - unix 2 [ ACC ] STREAM LISTENING 11026149 1641787/Discord /home/foxx/.var/app/com.discordapp.Discord/cache/scoped_dirnnxNIn/SingletonSocket 68 - unix 2 [ ACC ] STREAM LISTENING 11036791 1642030/exe /run/user/1000/discord-ipc-0 69 - ``` 70 - 71 - We see that the path we need is 72 - 73 - ``` 74 - /run/user/1000/discord-ipc-0 75 - ``` 76 - 77 - Pass this file into your docker container as a volume and add this path to `DISCORD_IPC_LOCATIONS` `environment:` 78 - 79 - ```yaml title="docker-compose.yaml" 80 - 81 - environment: 82 - # ... 83 - DISCORD_IPC_LOCATIONS=/run/user/1000/discord-ipc-0 84 - volumes: 85 - - /run/user/1000/discord-ipc-0:/run/user/1000/discord-ipc-0 86 - ``` 87 - 88 - </details> 89 - 90 - </TabItem> 91 - <TabItem value="remove" label="Remote"> 92 - 93 - :::note 94 - 95 - This works for **Linux/MacOS only.** 96 - 97 - ::: 98 - 99 - 100 - :::warning 101 - 102 - This method is **insecure.** You should not expose this TCP port over a network unless access to the port is restricted and the network is trusted. 103 - 104 - ::: 105 - 106 - On the machine Discord is running on you need to find the location of **unix socket** for discord. This is normally named `discord-ipc-0`. 107 - 108 - With Discord running, run this command: 109 - 110 - ``` 111 - $ sudo netstat -apeen | grep discord 112 - 113 - unix 2 [ ACC ] STREAM LISTENING 11026149 1641787/Discord /home/foxx/.var/app/com.discordapp.Discord/cache/scoped_dirnnxNIn/SingletonSocket 114 - unix 2 [ ACC ] STREAM LISTENING 11036791 1642030/exe /run/user/1000/discord-ipc-0 115 - ``` 116 - 117 - We see that the path we need is 118 - 119 - ``` 120 - /run/user/1000/discord-ipc-0 121 - ``` 122 - 123 - Use [`socat`](https://linux.die.net/man/1/socat) to bidirectionally relay communication from Discord's unix socket to a listening TCP port. Likely, you will want to setup a service to start this command on login. 124 - 125 - ```shell 126 - $ socat -v TCP-LISTEN:6655,reuseaddr,fork UNIX-CONNECT:/run/user/1000/discord-ipc-0 127 - ``` 128 - 129 - Finally, in your MS docker compose file add the `host:port` of the host running Discord to `DISCORD_IPC_LOCATIONS` `environment:` 130 - 131 - ```yaml title="docker-compose.yaml" 132 - 133 - environment: 134 - # ... 135 - DISCORD_IPC_LOCATIONS=192.168.DISCORD_HOST.IP:6655 136 - ``` 137 - 138 - </TabItem> 139 - </Tabs> 140 - 141 - ## Optional Setup 142 - 143 - :::note 144 - 145 - Due to the limitations of the Discord local API the other listening activity detection and online status customizations found in [Headless](/configuration/discord/discord-headless#optional-setup) are not available for the Local integration. 146 - 147 - ::: 148 - 149 - ### Artwork 150 - 151 - Multi-scrobbler can display Album Art in your Discord status. The image that is used differs based on if the image URL is publically accessible. 152 - 153 - The order in which multi-scrobbler determines what image to use is the same as the order of the tabs shown below. 154 - 155 - #### Artwork URL Types 156 - 157 - <Tabs groupId="artworkUrl" queryString> 158 - <TabItem label="External URLs" value="external"> 159 - MS can use external URLs for artwork. 160 - 161 - <img src={require('/img/discord_presence_art.png').default} height="127"/> 162 - 163 - External URLs that are not from known music services are **disabled by default.** This is to preserve *your* privacy because Discord does not host images, it only links to them and the URL is visible to other users. 164 - 165 - <details> 166 - 167 - <summary>Why Should I Care?</summary> 168 - 169 - There are some scenarios where you may not want your artwork URLs to be visible, for example: 170 - 171 - * A Source may be accessible only on your LAN (Jellyfin at `http://192.168.0.101`) 172 - * A Source may be internet-facing but you do not want to expose this information to discord/other users 173 - * A Source may be internet-facing but requires authentication to view the image 174 - </details> 175 - 176 - MS will use your artwork URLs only if: 177 - 178 - * artwork url is from a known music service/[Cover Art Archive](./?artworkUrl=caa#artwork-url-types) or 179 - * artwork url starts with `https` and 180 - * `artwork` (`DISCORD_ARTWORK`) is 181 - * `true` => always uses the url 182 - * a list of custom domains keywords an external artwork url should contain EX 183 - * ENV => `DISCORD_ARTWORK=mycdn,jellyfin` 184 - * File Config => `"artwork": ["mycdn","jellyfin"]` 185 - 186 - </TabItem> 187 - <TabItem label="Musicbrainz/Cover Art Achive" value="caa"> 188 - MS can try to use [Cover Art Archive](http://coverartarchive.org/) to get album art. The URL it retrieves is public which means it acts like an External URL that is always available for you. 189 - 190 - <img src={require('/img/discord_presence_art.png').default} height="127"/> 191 - 192 - MS will try to use Cover Art Archive if: 193 - 194 - * The scrobble data does not contain an album art url (no art in dashboard) or the existing url has failed an [External URL](./?artworkUrl=external#artwork-url-types) condition 195 - * and **the scrobble data contains a [Musicbrainz](/configuration/transforms/musicbrainz) Release (Album) MBID** 196 - 197 - Basically, if MS would normally use the [MS Default](./?artworkUrl=ms-default#artwork-url-types) art, it will first try to use Cover Art Archive if the scrobble has a Release MBID. 198 - 199 - Some Source, like [Jellyfin](/configuration/sources/jellyfin) and [Plex](/configuration/sources/plex), can automatically provide this ID if the music is "matched" in your library. 200 - 201 - For all others, you can [**configure MS to use the Musicbrainz Stage**](/configuration/transforms/musicbrainz#use-metadata-for-discord-album-art) for Discord to try to get this MBID. 202 - </TabItem> 203 - <TabItem label="MS Default" value="ms-default"> 204 - When these conditions are true: 205 - 206 - * Cannot use an [External URL](./?artworkUrl=external#artwork-url-types) and 207 - * Cannot get album art from [Cover Art Archive](./?artworkUrl=caa#artwork-url-types) and 208 - * Play does not contain artwork information (no artwork shown in dashboard) 209 - 210 - The status artwork will use a default URL instead of your artwork URL. 211 - 212 - Without any other configuration, the default URL is an icon from the [multi-scrobbler repository](https://github.com/FoxxMD/multi-scrobbler/blob/master/assets/default-artwork.png): 213 - 214 - <img src={require('/img/discord_presence_ms_default.png').default} height="127"/> 215 - 216 - This default image can be customized: 217 - 218 - * ENV Config => `DISCORD_ARTWORK_DEFAULT_URL=https://cooldomain.com/art.png` 219 - * File Config => `"artworkDefaultUrl": "https://cooldomain.com/art.png"` 220 - 221 - Remember, this URL need to be accessible on the public internet. 222 - </TabItem> 223 - </Tabs> 224 - 225 - ## Configuration 226 - 227 - <Config config="DiscordClientConfig" fileContent={JsonConfig} client name="discord"> 228 - | Environmental Variable | Required? | Default | Description | 229 - | :---------------------------- | --------- | ------- | :--------------------------------------------------------------------------------------------------------------- | 230 - | `DISCORD_APPLICATION_ID` | Yes | | Application ID | 231 - | `DISCORD_IPC_LOCATIONS` | No | | A commera-separated list of `host:port` network locations or file paths to unix socket for Discord | 232 - | `DISCORD_ARTWORK` | No | | A boolean indicating if external artwork URLs should be used. Or a comma-separated list of allowed domains | 233 - | `DISCORD_ARTWORK_DEFAULT_URL` | No | | A URL of an image to use as a fallback if the album art URL cannot be used. Or `false` to use discord's default. | 234 - </Config>
+6 -6
docsite/docs/configuration/clients/discord/discord.mdx
··· 10 10 11 11 There are two types of Discord integrations to choose from: 12 12 13 - ## Local 13 + ## App 14 14 15 - The **Local** integration uses an **existing** Discord application on Linux/MacOS to set Rich Presence. 15 + The **App** integration uses an **existing** Discord application on a desktop computer to set Rich Presence. 16 16 17 17 * Uses "permitted" access to Discord, no TOS issues 18 18 * More restricted customization compared to Headless 19 19 * Only active when your existing Discord application is open 20 - * For scenarios where Multi-Scrobbler is not on the same machine as Discord 21 - * Requires an additional program to relay the Discord connection 20 + * For more scenarios it requires additional, OS-specific steps to setup correctly 21 + * May require an additional program on your machine to relay the Discord connection 22 22 * This is potentially insecure, or less secure, then Headless 23 23 24 - [**Local Docs**](/configuration/clients/discord/discord-local) 24 + [**App Docs**](/configuration/clients/discord/discord-app) 25 25 26 26 ## Headless 27 27 ··· 29 29 30 30 * Does not require an existing Discord application (uses Discord cloud API) 31 31 * Using this **Violates Discord TOS** because it requires a user token 32 - * More customization than Local 32 + * More customization than App integration 33 33 * Active if **any** Discord application is online 34 34 35 35 [**Headless Docs**](/configuration/clients/discord/discord-headless)