Metadata is file based, not library based #760

Open
opened 2025-12-21 17:17:30 +01:00 by backuprepo · 10 comments
Owner

Originally created by @mikhail5555 on GitHub (Jun 21, 2019).

Describe the bug
If the same file is shared between multiple libraries, the metadata is also the shared.
This means that if you have 1 Library which requires English and another one which requires another language, the metadata will be EITHER English or the other language.

To Reproduce

  1. Create two movie libraries.
  2. Add the same folder to both libraries.
  3. Select different preferred download language/country.
  4. Go to Home/Metadata editor.
  5. The file has the same metadata in both libraries.
  6. Try to edit the metadata in one of the two libraries through Metadata editor.
  7. The data changes also changes in the other library.

Expected behavior
Metadata that is library based for each file, and not file-bound.

Logs
n/a

Screenshots
example

System (please complete the following information):

  • OS: Docker
  • Browser: Chrome
  • Jellyfin Version: 10.3.5
  • Reverse proxy: no

Additional context
n/a

Originally created by @mikhail5555 on GitHub (Jun 21, 2019). **Describe the bug** If the same file is shared between multiple libraries, the metadata is also the shared. This means that if you have 1 Library which requires English and another one which requires another language, the metadata will be EITHER English or the other language. **To Reproduce** 1. Create two movie libraries. 2. Add the same folder to both libraries. 3. Select different preferred download language/country. 4. Go to Home/Metadata editor. 5. The file has the same metadata in both libraries. 6. Try to edit the metadata in one of the two libraries through Metadata editor. 7. The data changes also changes in the other library. **Expected behavior** Metadata that is library based for each file, and not file-bound. **Logs** n/a **Screenshots** ![example](https://user-images.githubusercontent.com/7824786/59946879-14ed8500-946c-11e9-80c4-b292121154ea.gif) **System (please complete the following information):** - OS: Docker - Browser: Chrome - Jellyfin Version: 10.3.5 - Reverse proxy: no **Additional context** n/a
backuprepo added the
backend
bug
blocked
confirmed
labels 2025-12-21 17:17:30 +01:00
Author
Owner

@sparky8251 commented on GitHub (Jun 25, 2019):

You also see this with actor metadata.

Screenshot_20190625_065219

In this screenshot of actors in Sanctuary, you see 2 of them as they appear in Stargate: Atlantis. And I see the same image for Amanda Tapping on Stargate: SG-1, so yeah...

That said, this is a database limitation and is blocked by the database rewrite. Here's hoping we can get it done soon-ish so issues like this can get resolved :)

@sparky8251 commented on GitHub (Jun 25, 2019): You also see this with actor metadata. ![Screenshot_20190625_065219](https://user-images.githubusercontent.com/1992688/60092771-cbc05e00-9715-11e9-8e5b-0ebc2e5b35df.png) In this screenshot of actors in Sanctuary, you see 2 of them as they appear in Stargate: Atlantis. And I see the same image for Amanda Tapping on Stargate: SG-1, so yeah... That said, this is a database limitation and is blocked by the database rewrite. Here's hoping we can get it done soon-ish so issues like this can get resolved :)
Author
Owner

@stale[bot] commented on GitHub (Sep 23, 2019):

Issues go stale after 90d of inactivity. Mark the issue as fresh by adding a comment or commit. Stale issues close after an additional 14d of inactivity. If this issue is safe to close now please do so. If you have any questions you can reach us on Matrix or Social Media.

@stale[bot] commented on GitHub (Sep 23, 2019): Issues go stale after 90d of inactivity. Mark the issue as fresh by adding a comment or commit. Stale issues close after an additional 14d of inactivity. If this issue is safe to close now please do so. If you have any questions you can reach us on [Matrix or Social Media](https://jellyfin.readthedocs.io/en/latest/getting-help/).
Author
Owner

@stale[bot] commented on GitHub (Jan 21, 2020):

This issue has gone 120 days without comment. To avoid abandoned issues, it will be closed in 21 days if there are no new comments.
If you're the original submitter of this issue, please comment confirming if this issue still affects you in the latest release or nightlies, or close the issue if it has been fixed. If you're another user also affected by this bug, please comment confirming so. Either action will remove the stale label.
This bot exists to prevent issues from becoming stale and forgotten. Jellyfin is always moving forward, and bugs are often fixed as side effects of other changes. We therefore ask that bug report authors remain vigilant about their issues to ensure they are closed if fixed, or re-confirmed - perhaps with fresh logs or reproduction examples - regularly. If you have any questions you can reach us on Matrix or Social Media.

@stale[bot] commented on GitHub (Jan 21, 2020): This issue has gone 120 days without comment. To avoid abandoned issues, it will be closed in 21 days if there are no new comments. If you're the original submitter of this issue, please comment confirming if this issue still affects you in the latest release or nightlies, or close the issue if it has been fixed. If you're another user also affected by this bug, please comment confirming so. Either action will remove the stale label. This bot exists to prevent issues from becoming stale and forgotten. Jellyfin is always moving forward, and bugs are often fixed as side effects of other changes. We therefore ask that bug report authors remain vigilant about their issues to ensure they are closed if fixed, or re-confirmed - perhaps with fresh logs or reproduction examples - regularly. If you have any questions you can reach us on [Matrix or Social Media](https://docs.jellyfin.org/general/getting-help.html).
Author
Owner

@ghost commented on GitHub (Jan 21, 2020):

@sparky8251 Any news on the database rewrite?

@ghost commented on GitHub (Jan 21, 2020): @sparky8251 Any news on the database rewrite?
Author
Owner

@Artiume commented on GitHub (Apr 24, 2020):

I think one thing we should do is make sure there's a need for new metadata. If I have two libraries, where one is a subset of the other (such as Kids shows). I think it'd be efficient to share the same metadata.

@Artiume commented on GitHub (Apr 24, 2020): I think one thing we should do is make sure there's a need for new metadata. If I have two libraries, where one is a subset of the other (such as Kids shows). I think it'd be efficient to share the same metadata.
Author
Owner

@sparky8251 commented on GitHub (Apr 27, 2020):

Not really what the fix for this would be @Artiume. The fix would be letting you pair images and roles separately to actors, then pulling it dynamically based on the library you are viewing.

Its not efficient to share incorrect metadata. The part that can change can be the only part we "duplicate" but duplication is a must or we end up with dumb bugs like this.

@sparky8251 commented on GitHub (Apr 27, 2020): Not really what the fix for this would be @Artiume. The fix would be letting you pair images and roles separately to actors, then pulling it dynamically based on the library you are viewing. Its not efficient to share incorrect metadata. The part that can change can be the only part we "duplicate" but duplication is a must or we end up with dumb bugs like this.
Author
Owner

@ranhaveshush commented on GitHub (Nov 16, 2023):

Is there any update on this issue?

Issue:
Currently there isn't ability to have multiple libraries with the same directory path say ../../movies, with different metadata language say one library set to English, and another set to French.
The current behavior is the movie metadata set based on a file.

Workaround:
My current workaround it to have multiple Jellyfin instances one per localization / language.

The preferred behavior would be to have a single Jellyfin instance supporting multiple languages.

@ranhaveshush commented on GitHub (Nov 16, 2023): Is there any update on this issue? Issue: Currently there isn't ability to have multiple libraries with the same directory path say ../../movies, with different metadata language say one library set to English, and another set to French. The current behavior is the movie metadata set based on a file. Workaround: My current workaround it to have multiple Jellyfin instances one per localization / language. The preferred behavior would be to have a single Jellyfin instance supporting multiple languages.
Author
Owner

@rluetzner commented on GitHub (Nov 16, 2023):

I've been using symlinks as a workaround. I have a main folder where all my movies reside. Only some of them have a German audio track, so I created a separate directory and started symlinking, e.g.

mkdir movies-ger
cd movies-ger
ln -s ../movies/xyz xyz

The directory with symlinks is of course a new library. You can then get the metadata for this subset in any language you like.

To be fair, the metadata is heavily duplicated, but then again, I think it mainly affects pictures of actors. Movie posters, summaries and actor details are all localized anyway, so they'd need to be duplicated no matter what.

As a side note: you can limit what libraries a user can see. My wife only cares about movies with a German audio track, so I've hidden the main library. In the user settings (you must be logged in as that user), you can also define your preferred language. So even if German is the second audio track, you can make Jellyfin start with that as default.

All of this works pretty well for me. It requires a but of setup, but the symlinking can easily be scripted.

Hope this helps somebody.

@rluetzner commented on GitHub (Nov 16, 2023): I've been using symlinks as a workaround. I have a main folder where all my movies reside. Only some of them have a German audio track, so I created a separate directory and started symlinking, e.g. ```bash mkdir movies-ger cd movies-ger ln -s ../movies/xyz xyz ``` The directory with symlinks is of course a new library. You can then get the metadata for this subset in any language you like. To be fair, the metadata is heavily duplicated, **but** then again, I think it mainly affects pictures of actors. Movie posters, summaries and actor details are all localized anyway, so they'd need to be duplicated no matter what. As a side note: you can limit what libraries a user can see. My wife only cares about movies with a German audio track, so I've hidden the main library. In the **user settings** (you must be logged in as that user), you can also define your preferred language. So even if German is the second audio track, you can make Jellyfin start with that as default. All of this works pretty well for me. It requires a but of setup, but the symlinking can easily be scripted. Hope this helps somebody.
Author
Owner

@felix920506 commented on GitHub (Jun 8, 2025):

@JPVenson does the EFCore refactor unblock this

@felix920506 commented on GitHub (Jun 8, 2025): @JPVenson does the EFCore refactor unblock this
Author
Owner

@Shadowghost commented on GitHub (Jun 8, 2025):

This is not unblocked until our ItemIDs are not file based

@Shadowghost commented on GitHub (Jun 8, 2025): This is not unblocked until our ItemIDs are not file based
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: starred/jellyfin#760
No description provided.