Fetches lyrics from Musixmatch, the official lyrics provider for Spotify. The plugin always tries Musixmatch's free desktop API first, which does not require a user-provided token. If that does not work, the plugin can optionally fall back to website scraping. This plugin supports both synced and plain lyrics.
- Download
navidrome-musixmatch-plugin.ndpfrom the latest release. - Copy it to your Navidrome plugins folder (default:
<navidrome-data-directory>/plugins/). - Add
navidrome-musixmatch-pluginto the lyrics priority list (e.g. using envs:ND_LYRICSPRIORITY=other-lyric-provider,navidrome-musixmatch-plugin) - In Navidrome, go to Settings > Plugins > Navidrome Plugin and toggle it on.
No Musixmatch settings are required for the desktop API path.
You can download this plugin from GitHub or from the Forgejo mirror.
Most development happens on GitHub, but both repositories are kept available so you can use whichever platform you prefer and report issues there. GitHub releases are built with GitHub Actions. Forgejo releases are built by my own self-hosted Forgejo runner.
If you are unsure which one to choose, I recommend the Forgejo releases, as they are built on my own runner and are therefore fully under my control.
If the desktop API cannot find lyrics or is blocked, website scraping is supported as a fallback. This fallback requires a Musixmatch website token. If no token is configured, the fallback is skipped.
To enable website fallback, log in to Musixmatch and extract your auth token using a Chromium-based browser:
- Log in to Musixmatch.
- Open your browser's developer tools (F12) and go to the "Application" tab.
- Click on Cookies >> https://www.musixmatch.com.
- Find the cookie named
musixmatchUserTokenand click on it. - In the bottom pane, copy the value of the cookie. Make sure "Show URL-decoded" is enabled.
- Paste that token into "Musixmatch User Token" in the plugin settings.
- If you encounter captchas, repeat the same steps for the
captcha_idcookie and paste that into "Musixmatch Captcha ID".
It's recommended to set this plugin's priority to the lowest position, as Musixmatch can block unofficial clients and scrapers.
Musixmatch is known to aggressively block scrapers, so this plugin may break often. Please always download the latest version to check if your issue is already fixed.
To detect failed lookups, this plugin shares some analytics. Those analytics are opt-out, anonymous, and cannot be traced back to you. I only collect this information to improve the plugin. Analytics are stored on my self-hosted OpenObserve instance. The server is full-disk encrypted and only accessible to me. Analytics are not shared with any third party and only stored for 30 days.
I'd kindly ask you to keep analytics enabled, as it helps both me, in improving the plugin, and ultimately you, to get more lyrics. If you want to disable analytics, you can do so in the plugin settings.
Before opening an issue, grep your Navidrome logs and attach the matching lines:
grep navidrome-musixmatch-plugin /path/to/navidrome.logI can highly recommend to install my other lyrics plugins as well to get the best lyrics coverage as possible: