Merge functionality broken #6839

Open
opened 2025-12-22 04:52:32 +01:00 by backuprepo · 5 comments
Owner

Originally created by @Leo1906 on GitHub (Mar 23, 2025).

Description of the bug

I tried to use the merge feature today for the first time. So I have to Series one 4K and one 1080p and I want to merge them to be displayed as single entry.
When I select both and click the merge feature nothing happens. If I inspect the website in the browser I see this error message attached below (400 (Bad Request)).

I tried to do the same Post with Postman and get the same error with these details:
"Please supply at least two videos to merge."

But I supplied the IDs to merge. Something is broken here.

Reproduction steps

Select two identical releases and use the merge button. Nothing happens

What is the current bug behavior?

The feature produces a 400 Bad request as it is not passing the provided IDs correctly

What is the expected correct behavior?

The feature would do its work merging both entries to one

Jellyfin Server version

10.10.0+

Specify commit id

No response

Specify unstable release number

No response

Specify version number

No response

Specify the build version

10.10.6

Environment

- OS: Official Jellyfin Docker Image hosted on Unraid 6.12.13
Completly unaltered

Jellyfin logs

Unfortunately this call does not show up in the logs at all.

[13:51:11] [INF] [39] Emby.Server.Implementations.Session.SessionManager: Creating new access token for user 4bc029c8-9659-4c20-b4a0-a19248202c7f
[14:15:09] [INF] [75] Emby.Server.Implementations.Session.SessionWebSocketListener: Sending ForceKeepAlive message to 1 inactive WebSockets.
[14:18:57] [INF] [62] Emby.Server.Implementations.Session.SessionWebSocketListener: Sending ForceKeepAlive message to 1 inactive WebSockets.

FFmpeg logs


Client / Browser logs

POST http://192.168.178.20:8096/Videos/MergeVersions?Ids=3c9e916307bc6d8cc84aef774efa9b7c%2C860465b9742b8bd9b3dd33fb45fd9ef2 400 (Bad Request)
k @ node_modules.jellyfin-apiclient.bundle.js?396e11c26ee7da0b4726:2
value @ node_modules.jellyfin-apiclient.bundle.js?396e11c26ee7da0b4726:2
value @ node_modules.jellyfin-apiclient.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ 35308.c2bc3f74c6fbc9578718.chunk.js:1
callback @ 35308.c2bc3f74c6fbc9578718.chunk.js:1
(anonymous) @ 19029.6abd0493253e4d49db27.chunk.js:1
f @ main.jellyfin.bundle.js?396e11c26ee7da0b4726:2
t @ main.jellyfin.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ main.jellyfin.bundle.js?396e11c26ee7da0b4726:2
trigger @ main.jellyfin.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ main.jellyfin.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
pe @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
ke @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
d @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
o @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
u @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
Ce @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
d @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
o @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
u @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
je @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
v @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
web/#/search.html?qu…y=stranger+things:1 Uncaught (in promise) Response {type: 'basic', url: 'http://192.168.178.20:8096/Videos/MergeVersions?Id…4aef774efa9b7c%2C860465b9742b8bd9b3dd33fb45fd9ef2', redirected: false, status: 400, ok: false, …}
Promise.then
(anonymous) @ 35308.c2bc3f74c6fbc9578718.chunk.js:1
callback @ 35308.c2bc3f74c6fbc9578718.chunk.js:1
(anonymous) @ 19029.6abd0493253e4d49db27.chunk.js:1
f @ main.jellyfin.bundle.js?396e11c26ee7da0b4726:2
t @ main.jellyfin.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ main.jellyfin.bundle.js?396e11c26ee7da0b4726:2
trigger @ main.jellyfin.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ main.jellyfin.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
pe @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
ke @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
d @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
o @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
u @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
Ce @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
d @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
o @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
u @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
je @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
(anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2
v @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2

Relevant screenshots or videos

No response

Additional information

No response

Originally created by @Leo1906 on GitHub (Mar 23, 2025). ### Description of the bug I tried to use the merge feature today for the first time. So I have to Series one 4K and one 1080p and I want to merge them to be displayed as single entry. When I select both and click the merge feature nothing happens. If I inspect the website in the browser I see this error message attached below (400 (Bad Request)). I tried to do the same Post with Postman and get the same error with these details: "Please supply at least two videos to merge." But I supplied the IDs to merge. Something is broken here. ### Reproduction steps Select two identical releases and use the merge button. Nothing happens ### What is the current _bug_ behavior? The feature produces a 400 Bad request as it is not passing the provided IDs correctly ### What is the expected _correct_ behavior? The feature would do its work merging both entries to one ### Jellyfin Server version 10.10.0+ ### Specify commit id _No response_ ### Specify unstable release number _No response_ ### Specify version number _No response_ ### Specify the build version 10.10.6 ### Environment ```markdown - OS: Official Jellyfin Docker Image hosted on Unraid 6.12.13 Completly unaltered ``` ### Jellyfin logs ```shell Unfortunately this call does not show up in the logs at all. [13:51:11] [INF] [39] Emby.Server.Implementations.Session.SessionManager: Creating new access token for user 4bc029c8-9659-4c20-b4a0-a19248202c7f [14:15:09] [INF] [75] Emby.Server.Implementations.Session.SessionWebSocketListener: Sending ForceKeepAlive message to 1 inactive WebSockets. [14:18:57] [INF] [62] Emby.Server.Implementations.Session.SessionWebSocketListener: Sending ForceKeepAlive message to 1 inactive WebSockets. ``` ### FFmpeg logs ```shell ``` ### Client / Browser logs POST http://192.168.178.20:8096/Videos/MergeVersions?Ids=3c9e916307bc6d8cc84aef774efa9b7c%2C860465b9742b8bd9b3dd33fb45fd9ef2 400 (Bad Request) k @ node_modules.jellyfin-apiclient.bundle.js?396e11c26ee7da0b4726:2 value @ node_modules.jellyfin-apiclient.bundle.js?396e11c26ee7da0b4726:2 value @ node_modules.jellyfin-apiclient.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ 35308.c2bc3f74c6fbc9578718.chunk.js:1 callback @ 35308.c2bc3f74c6fbc9578718.chunk.js:1 (anonymous) @ 19029.6abd0493253e4d49db27.chunk.js:1 f @ main.jellyfin.bundle.js?396e11c26ee7da0b4726:2 t @ main.jellyfin.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ main.jellyfin.bundle.js?396e11c26ee7da0b4726:2 trigger @ main.jellyfin.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ main.jellyfin.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 pe @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 ke @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 d @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 o @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 u @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 Ce @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 d @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 o @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 u @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 je @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 v @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 web/#/search.html?qu…y=stranger+things:1 Uncaught (in promise) Response {type: 'basic', url: 'http://192.168.178.20:8096/Videos/MergeVersions?Id…4aef774efa9b7c%2C860465b9742b8bd9b3dd33fb45fd9ef2', redirected: false, status: 400, ok: false, …} Promise.then (anonymous) @ 35308.c2bc3f74c6fbc9578718.chunk.js:1 callback @ 35308.c2bc3f74c6fbc9578718.chunk.js:1 (anonymous) @ 19029.6abd0493253e4d49db27.chunk.js:1 f @ main.jellyfin.bundle.js?396e11c26ee7da0b4726:2 t @ main.jellyfin.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ main.jellyfin.bundle.js?396e11c26ee7da0b4726:2 trigger @ main.jellyfin.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ main.jellyfin.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 pe @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 ke @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 d @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 o @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 u @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 Ce @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 d @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 o @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 u @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 je @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 (anonymous) @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 v @ node_modules.%40remix-run.router.bundle.js?396e11c26ee7da0b4726:2 ### Relevant screenshots or videos _No response_ ### Additional information _No response_
backuprepo added the
enhancement
stale
labels 2025-12-22 04:52:32 +01:00
Author
Owner

@cvium commented on GitHub (Mar 23, 2025):

Only movies can be merged currently

@cvium commented on GitHub (Mar 23, 2025): Only movies can be merged currently
Author
Owner

@Leo1906 commented on GitHub (Mar 27, 2025):

Ah ok that would explain it. I thought because the merge PlugIn that exists can also merge series that it would be a core functionality of Jellyfin.
But I still have a question regarding merged movies. After merging I would assume that the movie is only listed once and one can use the menu to select the type of media one wants to stream.
But after merging the movies still show up twice when I search for them. This feels like a bug to me because it makes absolute no sense to have the same movie listed twice if I have merged it. Otherwise it would be correct but after merging only one entry should remain.

@Leo1906 commented on GitHub (Mar 27, 2025): Ah ok that would explain it. I thought because the merge PlugIn that exists can also merge series that it would be a core functionality of Jellyfin. But I still have a question regarding merged movies. After merging I would assume that the movie is only listed once and one can use the menu to select the type of media one wants to stream. But after merging the movies still show up twice when I search for them. This feels like a bug to me because it makes absolute no sense to have the same movie listed twice if I have merged it. Otherwise it would be correct but after merging only one entry should remain.
Author
Owner

@ebkalderon commented on GitHub (Apr 4, 2025):

IIRC, there is an open PR adding support for merging multiple versions of shows and/or individual episodes (#8004), but it has been blocked for a few years now, unfortunately.

@ebkalderon commented on GitHub (Apr 4, 2025): IIRC, there is an open PR adding support for merging multiple versions of shows and/or individual episodes (#8004), but it has been blocked for a few years now, unfortunately.
Author
Owner

@jellyfin-bot commented on GitHub (Aug 3, 2025):

This issue has gone 120 days without an update and will be closed within 21 days if there is no new activity. To prevent this issue from being closed, please confirm the issue has not already been fixed by providing updated examples or logs.

If you have any questions you can use one of several ways to contact us.

@jellyfin-bot commented on GitHub (Aug 3, 2025): This issue has gone 120 days without an update and will be closed within 21 days if there is no new activity. To prevent this issue from being closed, please confirm the issue has not already been fixed by providing updated examples or logs. If you have any questions you can use one of several ways to [contact us](https://jellyfin.org/contact).
Author
Owner

@ebkalderon commented on GitHub (Aug 3, 2025):

Commenting to make bot go away.

@ebkalderon commented on GitHub (Aug 3, 2025): Commenting to make bot go away.
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#6839
No description provided.