Skip to content

Support Jellyfin 12 - #301

Open
achevalet wants to merge 2 commits into
Kevinjil:masterfrom
achevalet:jellyfin-12
Open

achevalet wants to merge 2 commits into
Kevinjil:masterfrom
achevalet:jellyfin-12

Conversation

@achevalet

Copy link
Copy Markdown

Summary

Builds the plugin for Jellyfin 12 (#298), and fixes VOD, series and catch-up playback, which cannot work on 12 with the current release.

Changes

  • Target net10.0 and the Jellyfin 12.0.0 packages, with ABI 12.0.0.0, so the plugin loads on 12.0 and 12.1. The CI workflows move to the .NET 10 SDK. The new .NET 10 analyzer CA1873 is lowered to a suggestion, as in Jellyfin itself.
  • Fix VOD, series and catch-up playback. Since 12.0, when a user requests playback, Jellyfin drops a media source whose id is a GUID unless it is the id of the item or of another item the user can see (MediaSourceManager.GetStaticMediaSources), so these items were left without a source and PlaybackInfo failed. Their sources now have no id, which Jellyfin fills in with the id of the item. Live TV keeps its id, which identifies the restream to share. Channel media items also report a modification date, so Jellyfin rewrites the sources it saved for existing items.

Testing

Both commits come from my fork, which I run on a Jellyfin 12.1 server (Debian package). This branch, applied on top of the current master, builds against 12.0.0.

Note that this drops support for 10.11.

Written with Claude Code (Claude Opus 5.5).

🤖 Generated with Claude Code

achevalet and others added 2 commits October 2, 2026 21:50
Jellyfin 12 runs on .NET 10, so build against the 12.0.0 packages and
net10.0, and require ABI 12.0.0.0. Building against 12.0.0 rather than 12.1.0
keeps the plugin loadable on both releases. The CI workflows move to the .NET
10 SDK with it.

The .NET 10 analyzers add CA1873, flagging log arguments computed when the
level may be disabled. Lower it to a suggestion as upstream Jellyfin does,
next to CA1848 which the ruleset already disables.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Jellyfin 12 drops a static media source whose id is a GUID unless it is
the id of the item or of another item the user can see. Every VOD, episode
and catch-up source carried a GUID of its own, so each was dropped, and
PlaybackInfo failed indexing the empty list with an ArgumentOutOfRangeException.

Leave the id unset instead, which Jellyfin fills in with the id of the item.
Live TV keeps its GUID, as it identifies the restream to share and Live TV
sources do not pass through that filter.

Jellyfin saves the sources of a channel item and only rewrites them when
the item changes, so existing items would keep the old ids. Stamp channel
media items with a fixed modification date: items created before carry
none, so each is updated once, and never again after.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@aaronfc

aaronfc commented Oct 4, 2026

Copy link
Copy Markdown

This looks good overall. One concern: Jellyfin 12.1 fills in missing source IDs, but 12.0 does not. This could break audio or subtitle selection on 12.0.

Could we require 12.1, or test and fix this on 12.0? It would also help to check that items saved before the upgrade still play.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants