From 1ede54acbb86a8eb39aa563346227d0964221ce4 Mon Sep 17 00:00:00 2001 From: FoxxMD Date: Fri, 27 Feb 2026 14:18:50 +0000 Subject: [PATCH] docs: Fix broken links and anchors --- docsite/docs/FAQ.md | 4 ++-- .../clients/discord/discord-app.mdx | 4 ++-- docsite/docs/configuration/clients/lastfm.mdx | 2 +- docsite/docs/configuration/configuration.mdx | 6 +++--- docsite/docs/configuration/kitchensink.mdx | 4 ++-- .../configuration/transforms/musicbrainz.mdx | 20 +++++++++---------- .../docs/configuration/transforms/native.mdx | 6 +++--- .../configuration/transforms/transforms.mdx | 4 ++-- .../docs/configuration/transforms/user.mdx | 8 ++++---- docsite/docs/help.mdx | 2 +- docsite/docs/quickstart.mdx | 4 ++-- 11 files changed, 32 insertions(+), 32 deletions(-) diff --git a/docsite/docs/FAQ.md b/docsite/docs/FAQ.md index 022592bd..defcb49a 100644 --- a/docsite/docs/FAQ.md +++ b/docsite/docs/FAQ.md @@ -85,7 +85,7 @@ Error: Could not send the specified request to browse. Status code: 401 then YTM has invalidated your authentication. -First, ensure you are NOT using [YoutubeTV authentication.](/configuration/sources/youtube-music?ytmAuth=ytt#authentication) If you completed authentication by entering a "User Code" you are using YoutubeTV which has stopped working. You should reauthenticate using **Cookies** or **Custom OAuth.** +First, ensure you are NOT using [YoutubeTV authentication.](/configuration/sources/youtube-music?ytmAuth=ytt#ytm-auth) If you completed authentication by entering a "User Code" you are using YoutubeTV which has stopped working. You should reauthenticate using **Cookies** or **Custom OAuth.** #### When using OAuth Client Authentication @@ -95,7 +95,7 @@ Refresh your authentication by using the **(Re)authenticate** link from MS's web The library MS uses relies on scraping the YTM site by using cookies from your actual browser to pretend it is a browser. It does its best to keep these up to date but since this is not an official way to access the service YTM may invalidate your access _to the authenticated session_ at any time. How this is triggered is unknown and not something multi-scrobbler can control. You can help limit the chance of your session being invalidated by [getting the cookie from an Incognito/Private Session](https://github.com/LuanRT/YouTube.js/issues/803#issuecomment-2504032666) and then immediately closing the browser afterwards. -To re-authenticate MS [follow the YTM instructions to retrieve a new set of cookies for multi-scrobbler](/configuration/sources/youtube-music?ytmAuth=cookie#authentication) and then restart MS to potentially resolve the problem. +To re-authenticate MS [follow the YTM instructions to retrieve a new set of cookies for multi-scrobbler](/configuration/sources/youtube-music?ytmAuth=cookie#ytm-auth) and then restart MS to potentially resolve the problem. ## Configuration Issues diff --git a/docsite/docs/configuration/clients/discord/discord-app.mdx b/docsite/docs/configuration/clients/discord/discord-app.mdx index ff7acebf..24c48d95 100644 --- a/docsite/docs/configuration/clients/discord/discord-app.mdx +++ b/docsite/docs/configuration/clients/discord/discord-app.mdx @@ -47,7 +47,7 @@ This integration uses an existing, running Discord application to communicate wi -This containerized approach can be used instead of configuring MS to use a [Native Discord](./?discordType=native#dicord-connection) application on a specific machine. +This containerized approach can be used instead of configuring MS to use a [Native Discord](./?discordType=native#discord-connection) application on a specific machine. **Advantages** @@ -434,7 +434,7 @@ After [finding your IPC connection path](#find-ipc-connection) you will need to :::note -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. +Due to the limitations of the Discord local API the other listening activity detection and online status customizations found in [Headless](/configuration/clients/discord/discord-headless#optional-setup) are not available for the Local integration. ::: diff --git a/docsite/docs/configuration/clients/lastfm.mdx b/docsite/docs/configuration/clients/lastfm.mdx index 29fef12c..07e961d9 100644 --- a/docsite/docs/configuration/clients/lastfm.mdx +++ b/docsite/docs/configuration/clients/lastfm.mdx @@ -20,7 +20,7 @@ You will need a [Last.fm](https://www.last.fm) account to use the Last.fm API. After creating your account, [register for an API account here.](https://www.last.fm/api/account/create) -The callback URL in the API account form is not used, but to keep it consistent use the same value you set using the [Callback/Redirect URL](#callback-redirect-url) section. +The callback URL in the API account form is not used, but to keep it consistent use the same value you set using the [Callback/Redirect URL](#callbackredirect-url) section. **Take note of your API Key and Secret after account creation.** diff --git a/docsite/docs/configuration/configuration.mdx b/docsite/docs/configuration/configuration.mdx index d681dfcc..4d363482 100644 --- a/docsite/docs/configuration/configuration.mdx +++ b/docsite/docs/configuration/configuration.mdx @@ -168,7 +168,7 @@ Each entry for a Source/Client includes a **Configuration** section that describ ## Secrets Interpolation -When using [File](./?configType=file#configuration-types) or [AIO](./?configType=aio#configuration-types) Configuration, Multi-Scrobbler can interpolate Environmental Variables into your json files. This can be used, for example, to keep sensitive data (like [Last.fm Client/Secret](/configurations/clients/lastfm#configuration)) out of your configuration files so that they can be committed to git. +When using [File](./?configType=file#configuration-types) or [AIO](./?configType=aio#configuration-types) Configuration, Multi-Scrobbler can interpolate Environmental Variables into your json files. This can be used, for example, to keep sensitive data (like [Last.fm Client/Secret](/configuration/clients/lastfm#configuration)) out of your configuration files so that they can be committed to git. Multi-scrobbler will look for patterns in text fields within _all_ of your json files: @@ -179,7 +179,7 @@ Multi-scrobbler will look for patterns in text fields within _all_ of your json Example -Given this [Last.fm](/configurations/clients/lastfm#configuration) [File](./?configType=file#configuration-types) config: +Given this [Last.fm](/configuration/clients/lastfm#configuration) [File](./?configType=file#configuration-types) config: ```json title="lastfm.json" [ @@ -555,7 +555,7 @@ If you do not need the dashboard and/or ingress sources, or have security concer :::warning -Any **[ingress-based sources](/configuration/sources#ingress) will be unusable** (Webscrobbler, etc...) if this is disabled. +Any **[ingress-based sources](/configuration/sources?sourceComm=ingress#by-communication-method) will be unusable** (Webscrobbler, etc...) if this is disabled. ::: diff --git a/docsite/docs/configuration/kitchensink.mdx b/docsite/docs/configuration/kitchensink.mdx index 49be2591..cc9e9c4b 100644 --- a/docsite/docs/configuration/kitchensink.mdx +++ b/docsite/docs/configuration/kitchensink.mdx @@ -11,13 +11,13 @@ Scenario: * Each person has their own [Maloja](/configuration/clients/maloja) server * Each person has their own Spotify account * You have your own Airsonic ([subsonic](/configuration/sources/subsonic)) server you to scrobble from -* You have your own [Youtube Music](/configuration/soures/youtube-mysic) account you want to scrobble from +* You have your own [Youtube Music](/configuration/sources/youtube-music) account you want to scrobble from * Mary has her own [Last.fm](/configuration/clients/lastfm) account she also wants to scrobble to * Fred has his own [Spotify](/configuration/sources/spotify) application and provides you with just his access and refresh token because he doesn't trust you (wtf Fred) * Fred has a Plex server and wants to scrobble everything he plays * Mary uses Fred's Plex server but only wants to scrobble her plays from the `podcast` library * The three of you have a shared library on [Plex](/configuration/sources/plex) called `party` that you only play when you are hanging out. You want plays from that library to be scrobbled to everyone's servers. -* Fred also has his own [Jellyfin server](/configurion/sources/jellyfin) and wants to scrobble everything he plays +* Fred also has his own [Jellyfin server](/configuration/sources/jellyfin) and wants to scrobble everything he plays * You have an android music app that can scrobble to a [custom listenbrainz server](/configuration/sources/listenbrainz-endpoint) ### All-in-one Config diff --git a/docsite/docs/configuration/transforms/musicbrainz.mdx b/docsite/docs/configuration/transforms/musicbrainz.mdx index 879e8f97..7c33213d 100644 --- a/docsite/docs/configuration/transforms/musicbrainz.mdx +++ b/docsite/docs/configuration/transforms/musicbrainz.mdx @@ -50,7 +50,7 @@ Set up [Valkey Caching](/configuration?cachedThings=metadata#caching) to cache M ### API Setup -To avoid rate limiting, MusicBrainz requires API users to identify themself using a [User-Agent that contains an email or URL.](https://wiki.musicbrainz.org/MusicBrainz_API/Rate_Limiting#How_can_I_be_a_good_citizen_and_be_smart_about_using_the_Web_Service?) You must set this in the `data` for your [stage configuration](http://localhost:3000/docs/configuration/transforms/#configuring-stages) in your [AIO Config](/configuration?configType=aio#configuration-types): +To avoid rate limiting, MusicBrainz requires API users to identify themself using a [User-Agent that contains an email or URL.](https://wiki.musicbrainz.org/MusicBrainz_API/Rate_Limiting#How_can_I_be_a_good_citizen_and_be_smart_about_using_the_Web_Service?) You must set this in the `data` for your [stage configuration](/configuration/transforms/#configuring-stages) in your [AIO Config](/configuration?configType=aio#configuration-types): ```json5 title="config.json" { @@ -160,7 +160,7 @@ Example: ] ``` -Each [**Stage Rule**](/configuration/transforms#stage-rules) should be either a boolean, specifying if the transformed data should be used for this field, or a [`when` condition](/configuration/transforms#conditional-moditication): +Each [**Stage Rule**](/configuration/transforms#stage-rules) should be either a boolean, specifying if the transformed data should be used for this field, or a [`when` condition](/configuration/transforms#conditional-modification):
@@ -247,11 +247,11 @@ To configure [stage defaults](#stage-configuration) use `MB_PRESETS` with a comm * `fields` - Applies [Field Scoring](#field-scoring) to match sorting so match text is baised towards similarity to original scrobble * `sensible` - Applies the [Sensible Default](#sensible-default) configuration for [sorting releases](#sorting-releases) -Finally, use ENV `*_TRANSFORMS=musicbrainz` on each Source/Client you wish to apply this stage to. This applies the stage in the [`preTransform` Hook](/configuration/transforms#lifecycle-hooks) with all [Rules](#rules) enabled. +Finally, use ENV `*_TRANSFORMS=musicbrainz` on each Source/Client you wish to apply this stage to. This applies the stage in the [`preTransform` Hook](/configuration/transforms#lifecycle-hooks) with all [Rules](#rules-and-hooks) enabled. The `*` stands for the prefix used for each Source/Client's ENV keys. Refer to the individual Source/Client Configuration sections to find this. Example: -* All [Subsonic Source](http://localhost:3000/docs/configuration/sources/subsonic/) ENVs look like `SUBSONIC_USER=myuser` etc... +* All [Subsonic Source](/configuration/sources/subsonic) ENVs look like `SUBSONIC_USER=myuser` etc... * Use `SUBSONIC_TRANSFORMS=musicbrainz`
@@ -706,7 +706,7 @@ Sorting can be used instead of filters, or in conjunction with filters, it's you #### Release Attributes {#sorting-releases} -Each [Release Attribute](#release-attribute) has one additional property that can be used to **rank** releases based on the order of the values you give it. This is the `priority` property. +Each [Release Attribute](#release-attributes) has one additional property that can be used to **rank** releases based on the order of the values you give it. This is the `priority` property. In configuration: @@ -818,7 +818,7 @@ Consider adding [Artist Extraction (`artist`)](#search-methods) in **Native Mode How complete, and accurate, your scrobble data is from a certain Source should dictate what [Search Methods](#search-methods) you should use for matching. -Musicbrainz agressively normalizes **artist, album, and title** fields in its database which means that if your Scrobble data contains major innaccuracies or phrases fields in a non-normal way, it's possible Musicbrainz won't find any matches. This is a more common occurrence when trying to match Scrobble data from Sources that don't support multiple artist data, like [Subsonic](/configuration/sources/subsonic) and [Last.fm](/configuration/sources/lastfm). +Musicbrainz agressively normalizes **artist, album, and title** fields in its database which means that if your Scrobble data contains major innaccuracies or phrases fields in a non-normal way, it's possible Musicbrainz won't find any matches. This is a more common occurrence when trying to match Scrobble data from Sources that don't support multiple artist data, like [Subsonic](/configuration/sources/subsonic) and [Last.fm](/configuration/sources/lastfm-source).
@@ -869,7 +869,7 @@ When using your own filters consider: ### Using Partial Match -Use [Rules](#rules) to apply MusicBrainz match data selectively. +Use [Rules](#rules-and-hooks) to apply MusicBrainz match data selectively. If you know that your music collection is well organized and you do not want to change the artists/title/album etc... sent to a [Client](/configuration/clients), you can still benefit from matches by only applying MBIDs using `meta` so that any Client that supports Musicbrainz data ([Koito](/configuration/clients/koito), [Tealfm](/configuration/clients/tealfm), [Listenbrainz](/configuration/clients/listenbrainz), [Rocksky](/configuration/clients/rocksky)) can still get that data. @@ -1086,7 +1086,7 @@ Your [AIO Config](/configuration?configType=aio#configuration-types): } ``` -In a [Jellyfin](/configuration/clients/jellyfin) [File Config](/configuration?configType=file#configuration-types): +In a [Jellyfin](/configuration/sources/jellyfin) [File Config](/configuration?configType=file#configuration-types): ```json5 title="jellyfin.json" [ @@ -1119,7 +1119,7 @@ In a [Jellyfin](/configuration/clients/jellyfin) [File Config](/configuration?co * [Sensible Defaults](#sensible-default) * Fallback search with [Artist Extraction](#search-methods) * [Default Native Stage](/configuration/transforms/native/#default-stage) -* Uses [Flow Control](/configurations/transforms#flow-control) to run Native only if there are no Musicbrainz matches +* Uses [Flow Control](/configuration/transforms#flow-control) to run Native only if there are no Musicbrainz matches
@@ -1153,7 +1153,7 @@ Your [AIO Config](/configuration?configType=aio#configuration-types): } ``` -In a [Jellyfin](/configuration/clients/jellyfin) [File Config](/configuration?configType=file#configuration-types): +In a [Jellyfin](/configuration/sources/jellyfin) [File Config](/configuration?configType=file#configuration-types): ```json5 title="jellyfin.json" [ diff --git a/docsite/docs/configuration/transforms/native.mdx b/docsite/docs/configuration/transforms/native.mdx index cffce3e1..9c5828fb 100644 --- a/docsite/docs/configuration/transforms/native.mdx +++ b/docsite/docs/configuration/transforms/native.mdx @@ -75,7 +75,7 @@ Config => extracted artists ### Rules -Each [Rule](/configuration/transforms#stage-rules) should be either a boolean, specifying if the transformed data should be used for this field, or a [`when` condition.](/configuration/transforms#conditional-moditication): +Each [Rule](/configuration/transforms#stage-rules) should be either a boolean, specifying if the transformed data should be used for this field, or a [`when` condition.](/configuration/transforms#conditional-modification): ```json5 { @@ -96,7 +96,7 @@ If a rule is not present then multi-scrobbler defaults it to `true`. For your convenience, if you do not define any Native [Stage Configurations](/configuration/transforms#configuring-stages) then multi-scrobbler automatically builds one using the defaults shown in [configuration](#configuration). -This can be used by omitting the `name` in your [modification Stage](/configuration/transforms#modification-stage). +This can be used by omitting the `name` in your [modification Stage](/configuration/transforms#stage).
@@ -132,7 +132,7 @@ Use ENV `*_TRANSFORMS=native` on each Source/Client you wish to apply this stage The `*` stands for the prefix used for each Source/Client's ENV keys. Refer to the individual Source/Client Configuration sections to find this. Example -* All [Subsonic Source](http://localhost:3000/docs/configuration/sources/subsonic/) ENVs look like `SUBSONIC_USER=myuser` etc... +* All [Subsonic Source](/configuration/sources/subsonic/) ENVs look like `SUBSONIC_USER=myuser` etc... * Use `SUBSONIC_TRANSFORMS=native`
diff --git a/docsite/docs/configuration/transforms/transforms.mdx b/docsite/docs/configuration/transforms/transforms.mdx index c7203b5c..3a860012 100644 --- a/docsite/docs/configuration/transforms/transforms.mdx +++ b/docsite/docs/configuration/transforms/transforms.mdx @@ -36,7 +36,7 @@ Scrobble **Clients** listen for discovered Plays from Sources, then... * The Client **compares** this Play to all the other scrobbles it has already seen, if the Play is unique (title/artist/album/listened datetime) then... * The Client **scrobbles** the Play downstream to the scrobble service and adds it as a Scrobble it has seen already -## Lifecyle Hooks +## Lifecycle Hooks You'll notice there is a pattern above that looks like this: @@ -376,7 +376,7 @@ Specifying these Rules is **not** the same as [configuring the Stage](#configuri Stages may be optionally configured to **continue** to the next Stage or **stop** (end early) all subsequent Stages, based on the outcome of the currently running Stage. -These three properties can be added to the [Modification Stage](#modification-stage) data, alongside [Rules](#rules-for-play-data): +These three properties can be added to the [Modification Stage](#stage) data, alongside [Rules](#stage-rules): * `onSuccess` (default `continue`) - If the Stage successfully finishes processing * `onFailure` (default `stop`) - If the Stage encounters an error while processing, or otherwise fails to achieve the transformation result diff --git a/docsite/docs/configuration/transforms/user.mdx b/docsite/docs/configuration/transforms/user.mdx index 5b87f2fe..639bd1f3 100644 --- a/docsite/docs/configuration/transforms/user.mdx +++ b/docsite/docs/configuration/transforms/user.mdx @@ -16,7 +16,7 @@ The user [Stage `type`](/configuration/transforms#stage) is `user`. ## Configuration -All [Stage Configuration](/configuration/transforms#configuring-stage) is done using [**search-and-replace** expressions](#search-and-replace-expression) inside individual [rules](#rules). Default configuration for all Rules can still be done using Stage `defaults`. +All [Stage Configuration](/configuration/transforms#configuring-stages) is done using [**search-and-replace** expressions](#search-and-replace-expression) inside individual [rules](#rules). Default configuration for all Rules can still be done using Stage `defaults`.
@@ -46,9 +46,9 @@ All [Stage Configuration](/configuration/transforms#configuring-stage) is done u #### Default Stage -For your convenience, if you do not define any User [Stage Configurations](/configuration/transforms#configuration) then multi-scrobbler automatically builds an empty one for you. +For your convenience, if you do not define any User [Stage Configurations](/configuration/transforms#configuring-stages) then multi-scrobbler automatically builds an empty one for you. -This can be used by omitting the `name` in your [modification Stage](/configuration/transforms#modification-stage). +This can be used by omitting the `name` in your [modification Stage](/configuration/transforms#stage).
@@ -126,7 +126,7 @@ The `replace` property uses javascript's [`replace()` function and so can use an ### Rules -Each [Rule](/configuration/transforms#stage-rules) must be an array of [search-and-replace expressions](#search-and-replace-expressions): +Each [Rule](/configuration/transforms#stage-rules) must be an array of [search-and-replace expressions](#search-and-replace-expression): ```json5 title="lastfm.json" [ diff --git a/docsite/docs/help.mdx b/docsite/docs/help.mdx index 00183407..1f6c13d7 100644 --- a/docsite/docs/help.mdx +++ b/docsite/docs/help.mdx @@ -54,7 +54,7 @@ Thank you for your time. ### FAQ -Check the [FAQ](/faq) to see if your issue is a known issue or a commonly-experienced issue with Multi-Scrobbler. The FAQ also includes fixes or ways to help troubleshoot these common issues. +Check the [FAQ](/FAQ) to see if your issue is a known issue or a commonly-experienced issue with Multi-Scrobbler. The FAQ also includes fixes or ways to help troubleshoot these common issues. ### Existing Issues diff --git a/docsite/docs/quickstart.mdx b/docsite/docs/quickstart.mdx index 4d2938a5..d745789d 100644 --- a/docsite/docs/quickstart.mdx +++ b/docsite/docs/quickstart.mdx @@ -10,7 +10,7 @@ This guide will get you up and running with multi-scrobbler using [Docker](https * the dashboard served on port `9078` of a host machine which has an IP of `192.168.0.100` * data saved to the same directory as the `docker-compose.yml` file -* multi-scrobbler monitoring [Spotify](/configuration/sources/spotify), [Jellyfin](/configuration/sources/jellyfin), Navidrome, [Plex](/configuration/sources/plex), and/or [Last.fm](/configurations/sources/lastfm) for listening activity +* multi-scrobbler monitoring [Spotify](/configuration/sources/spotify), [Jellyfin](/configuration/sources/jellyfin), Navidrome, [Plex](/configuration/sources/plex), and/or [Last.fm](/configuration/sources/lastfm-source) for listening activity * multi-scrobbler scrobbling to [Lastfm](/configuration/clients/lastfm), [Maloja](/configuration/clients/maloja), and/or [Koito](/configuration/clients/koito) :::note @@ -166,7 +166,7 @@ Add these value to the `environment` section in the [`docker-compose.yml` you cr - MB_PRESETS=default,sensible,native ``` -**Presets** are found [here](http://localhost:3000/docs/configuration/transforms/musicbrainz/#env-configuration). +**Presets** are found [here](/configuration/transforms/musicbrainz/#env-configuration).

Enable Musicbrainz For A Source

-- 2.51.2