Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Added music support through Lidarr #1238

Open
wants to merge 4 commits into
base: develop
Choose a base branch
from

Conversation

0-Pierre
Copy link

@0-Pierre 0-Pierre commented Jan 8, 2025

Description

Jellyseerr fully support music trough Lidarr 🚀 🎵

Metadata
We’re using the Lidarr API (api.lidarr.audio) to improve speed, as MusicBrainz (MB) often suffers from high latency and server overload issues.
Trade-off: The results are slightly less precise compared to the MB Search API.

Overview
The overview section pulls data from Wikipedia, ensuring multilingual support for more flexible and accurate descriptions.

Image Handling
Images are initially loaded from the provided links and cached locally.
The Lidarr API offers additional artist images that aren’t available in the Cover Art Archive (CAA).
If an image is missing, the system automatically falls back to CAA.

Caching
By default, images from CAA and Fanart are cached locally, as these sources tend to load slowly.
Cached images are stored in the /cache folder and can be cleared via the settings page using a dedicated job.
Other images are only cached if specific options are enabled.

Similar Artists / Trending
We use the ListenBrainz API to provide recommendations for similar artists and trending music. Missing images are completed through the Lidarr API, with a fallback to CAA.

Artist Groups
The /group endpoint is dedicated to artist groups (bands). For individual artists (persons), we merge data with the /person endpoint from TMDb to avoid duplicate entries.

Informations Points
There are cases where images aren’t available on either the CAA or the Lidarr API. In such instances, we need to upload them to the MusicBrainz database to ensure they are displayed. This aligns with the core purpose of MusicBrainz, a community-driven platform for sharing metadata.
For this reason, I’ve removed Deezer as a fallback. Encouraging community contributions is more in line with MusicBrainz’s philosophy. Additionally, using Deezer’s fallback wasn’t always reliable, as the matching wasn’t based on precise IDs, though it worked correctly about 95% of the time.

Screenshot (if UI-related)

localhost_5055_ (1)
localhost_5055_ (2)
localhost_5055_ (4)
localhost_5055_ (3)

To-Dos

  • Successful build pnpm build
  • Translation keys pnpm i18n:extract
  • Database migration (if required)

Issues Fixed or Closed

server/api/musicbrainz/index.ts Fixed Show fixed Hide fixed
server/api/musicbrainz/index.ts Fixed Show fixed Hide fixed
server/api/musicbrainz/index.ts Fixed Show fixed Hide fixed
server/api/musicbrainz/index.ts Fixed Show fixed Hide fixed
server/api/musicbrainz/index.ts Fixed Show fixed Hide fixed
server/api/musicbrainz/index.ts Fixed Show fixed Hide fixed
@github-actions github-actions bot added the merge conflict Cannot merge due to merge conflicts label Jan 9, 2025
Copy link

github-actions bot commented Jan 9, 2025

This pull request has merge conflicts. Please resolve the conflicts so the PR can be successfully reviewed and merged.

@github-actions github-actions bot removed the merge conflict Cannot merge due to merge conflicts label Jan 10, 2025
@@ -26,7 +27,7 @@
return null;
}

if (!data && !error) {
if (data === undefined && !error) {

Check warning

Code scanning / CodeQL

Useless conditional Warning

This negation always evaluates to true.
src/components/Setup/index.tsx Fixed Show fixed Hide fixed
src/components/Setup/index.tsx Fixed Show fixed Hide fixed
@gauthier-th
Copy link
Collaborator

@0-Pierre do not merge develop into this PR. Rebase on develop instead.
Merging develop is a very bad practice, it makes things harder for us to review and later to track changes.
It is written as well in our contribution guide.

Could you please rebase and remove all theses merge commits?

@0-Pierre
Copy link
Author

@0-Pierre do not merge develop into this PR. Rebase on develop instead. Merging develop is a very bad practice, it makes things harder for us to review and later to track changes. It is written as well in our contribution guide.

Could you please rebase and remove all theses merge commits?

Apologies, I'm not very familiar with the GitHub processes and features. I'll do my best, but the first commit was automatically created during a rebase when I used the "Rebase current branch..." option.

@0-Pierre 0-Pierre reopened this Jan 10, 2025
@Fallenbagel
Copy link
Owner

A preview for this feature is available as preview-music-support tag.

(In about 15-20 mins)

@Fallenbagel Fallenbagel added the preview PRs deployed for testing with tag `:preview-prxx` label Jan 14, 2025
@AlessandroTischer
Copy link

Hi! I briefly tested the PR. Great work!
Some feedbacks (Warning! I'm quite a noob, so they might be wrong or due to inexperience):

  1. If Jellyseerr is already configured and you try to request any kind of music related content, you get a generic error. The fact that Lidarr was not configured should have been highlighted in the popup error, in my opinion.
  2. If an album doesn't have a cover, it is shown as it is hovered with the mouse, I think it's a bit odd.
  3. When an album is displayed, it contains a certain number of tracks (I suppose disk 1). When it is then selected in Lidarr, it might contain a whole lot of other tracks. You can test with Green Day - American Idiot: in Jellyseerr 13 tracks are listed, in Lidarr they are 57.
  4. There is no filter in the music panel. Is this just because it wasn't implemented yet or are there problems?
  5. If an artist is not monitored in Lidarr and I request an album from said artist, the artist gets added, and it takes a lot (>1 min, nothing unbearable, but I noticed it) before the album is monitored and then searched. Is this wanted for any reason?

Thank you again for the work!

@0-Pierre
Copy link
Author

Hi! I briefly tested the PR. Great work! Some feedbacks (Warning! I'm quite a noob, so they might be wrong or due to inexperience):

  1. If Jellyseerr is already configured and you try to request any kind of music related content, you get a generic error. The fact that Lidarr was not configured should have been highlighted in the popup error, in my opinion.
  2. If an album doesn't have a cover, it is shown as it is hovered with the mouse, I think it's a bit odd.
  3. When an album is displayed, it contains a certain number of tracks (I suppose disk 1). When it is then selected in Lidarr, it might contain a whole lot of other tracks. You can test with Green Day - American Idiot: in Jellyseerr 13 tracks are listed, in Lidarr they are 57.
  4. There is no filter in the music panel. Is this just because it wasn't implemented yet or are there problems?
  5. If an artist is not monitored in Lidarr and I request an album from said artist, the artist gets added, and it takes a lot (>1 min, nothing unbearable, but I noticed it) before the album is monitored and then searched. Is this wanted for any reason?

Thank you again for the work!

@AlessandroTischer Hey! Thanks for your notes, here's some points :
1- I'm fairly certain that the exact same behavior applies to Movies and Shows with Sonarr and Radarr
2 - The behavior is consistent across Movies and Show cards without covers, but missing covers are more frequent for Music, making it more noticeable. I can implement a fix to prevent the 'hovered' style from being applied to any card (Movies, TV, or Music) when a cover is missing.
3 - This occurs because I haven't configured the same release selection method used by Lidarr, such as choosing the best metadata or the most recent release. The current implementation is still very basic.
4 - Exactly, I’ve only configured the sorting options and nothing beyond that.
5 - Here's how the system currently works: if the artist doesn't already exist, it's first created in Lidarr without monitoring any of their albums. We then give Lidarr time to fetch all the metadata for the artist's discography. After about 40 seconds, the requested album is set to monitored. If multiple requests come in quickly, the system waits 30 seconds between each new request and checks at the end if all the requested albums are now monitored. It’s a very basic and somewhat crude solution, but it works. Without this process, I was encountering errors and unmonitored albums when users spammed requests. It can definitely be improved in the future, but for now, I prioritized getting a stable and reliable solution in place quickly.

On my end, I’m using it in production with all my users, and so far, I haven’t encountered any major bugs or errors causing server crashes. I’ll continue monitoring the logs. 👀 🔥

@gssariev
Copy link

Hey, @0-Pierre just popping by to say awesome work! It's fun to finally be able to play around with music requests, even though it's just a preview. Sharing some additional feedback as a Plex/Jellyseerr user:

  • No music library(s) syncing - in the initial setup process, only the movie and series type libraries are visible making it impossible to sync what music is currently available with Jellyseerr
  • Requesting an album by a monitored artist throws an error in Lidarr:

LidarrErrorPipeline Invalid request Validation failed: -- ForeignAlbumId: This album has already been added. LidarrErrorPipeline FluentValidation.ValidationException: Validation failed: -- ForeignAlbumId: This album has already been added.: Validation failed: -- ForeignAlbumId: This album has already been added.

Unmonitoring either the artist/album and making the request again results with the same error. The only work around that I've found so far is to remove the artist altogether from Lidarr and request it again. That way, it get added to Lidarr the way you described above; however, the following is observed:

  • Artist is unmonitored
  • Album is monitored
  • Download starts
  • Download is stuck at importing and after roughly 2-3 min requires manual import

Additionally, the artist gets added to Lidarr without a metadata profile; unsure if that is expected behavior. For context, I am running everything on Windows 11 and have tried using both the official Lidarr service as well as with ghcr.io/hotio/lidarr:pr-plugins, both experiencing the same.

Once again, thanks for putting in the work and time to make this!

@0-Pierre
Copy link
Author

Hey, @0-Pierre just popping by to say awesome work! It's fun to finally be able to play around with music requests, even though it's just a preview. Sharing some additional feedback as a Plex/Jellyseerr user:

  • No music library(s) syncing - in the initial setup process, only the movie and series type libraries are visible making it impossible to sync what music is currently available with Jellyseerr
  • Requesting an album by a monitored artist throws an error in Lidarr:

LidarrErrorPipeline Invalid request Validation failed: -- ForeignAlbumId: This album has already been added. LidarrErrorPipeline FluentValidation.ValidationException: Validation failed: -- ForeignAlbumId: This album has already been added.: Validation failed: -- ForeignAlbumId: This album has already been added.

Unmonitoring either the artist/album and making the request again results with the same error. The only work around that I've found so far is to remove the artist altogether from Lidarr and request it again. That way, it get added to Lidarr the way you described above; however, the following is observed:

  • Artist is unmonitored
  • Album is monitored
  • Download starts
  • Download is stuck at importing and after roughly 2-3 min requires manual import

Additionally, the artist gets added to Lidarr without a metadata profile; unsure if that is expected behavior. For context, I am running everything on Windows 11 and have tried using both the official Lidarr service as well as with ghcr.io/hotio/lidarr:pr-plugins, both experiencing the same.

Once again, thanks for putting in the work and time to make this!

@gssariev Thank you for your tests! I actually haven't tested it in a Plex setup situation yet. I'll review all the issues you reported and will get back with a commit to fix them. 😉

@mr2toyou
Copy link

mr2toyou commented Jan 14, 2025

@0-Pierre great work so far, I was hoping one day we would get this added. Some items I am seeing so far;

Running in docker with emby
Settings -> Emby -> Emby libraries, music library missing
Manage music /Manage Album showing [object Object] instead of Artist
clearing data from lidarr only available after going to requests.
2025-01-14T23:01:34.912Z [error][Media]: [Lidarr] Failed to remove album: 404 Not Found

"play on" not showing for available media player

@github-actions github-actions bot added the merge conflict Cannot merge due to merge conflicts label Jan 15, 2025
Copy link

This pull request has merge conflicts. Please resolve the conflicts so the PR can be successfully reviewed and merged.

Copy link
Owner

@Fallenbagel Fallenbagel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should only have the en.json using the pnpm i18n:extract for the i18n locales. The rest of the translation strings should be updated through weblate.

Could you remove those translation files and rebase?

@0-Pierre
Copy link
Author

You should only have the en.json using the pnpm i18n:extract for the i18n locales. The rest of the translation strings should be updated through weblate.

Could you remove those translation files and rebase?

Sure, i'm fixing all the requested issues and I'll take care of that 👍

@0-Pierre
Copy link
Author

@gssariev Hello! I'll be pushing a new commit that resolves all the Plex-related issues. However, I'm having trouble reproducing your other issues, as everything seems to be working perfectly on my end — requests are sent and downloaded properly. I even set up a Plex test server, and everything is running smoothly with the same Docker version you're using.

I've also implemented proper mapping for the Plex music library since Plex doesn't handle it like other libraries. They rely solely on release IDs, so we’re now mapping those to release-group IDs to ensure the database gets the correct entries. Gotta love Jellyfin for handling things more consistently in this area, lol.

Let me know if you encounter any additional issues!

image
image
image

@gssariev
Copy link

@gssariev Hello! I'll be pushing a new commit that resolves all the Plex-related issues. However, I'm having trouble reproducing your other issues, as everything seems to be working perfectly on my end — requests are sent and downloaded properly. I even set up a Plex test server, and everything is running smoothly with the same Docker version you're using.

I've also implemented proper mapping for the Plex music library since Plex doesn't handle it like other libraries. They rely solely on release IDs, so we’re now mapping those to release-group IDs to ensure the database gets the correct entries. Gotta love Jellyfin for handling things more consistently in this area, lol.

Let me know if you encounter any additional issues!

image image image

Excited to test it out and will report any finding once available! The Lidarr issue could also be something on my end...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
merge conflict Cannot merge due to merge conflicts preview PRs deployed for testing with tag `:preview-prxx`
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants