The Jellyfin Sink integration has two critical issues with metadata provider resolution:
1. Global Provider Toggle Breaks Movies: Setting jellyfin_sink_metadata_provider to
tvdb forces movie scrobbles to require TVDB IDs. Since Jellyfin movie libraries typically use
TMDB/IMDb, all movie scrobbles error out with No TVDB ID associated with this media.
2. Episode ID overrides Series ID: When item_type == "Episode", Ryot checks payload. item.provider_ids before payload.series.provider_ids. For shows with episode-level provider
IDs, Ryot attempts to look up the show using the episode's ID (e.g. TMDB Episode 153637
instead of Series 2190), causing watches to attach to completely wrong shows (or fail on
TVDB).
Expected Behavior
- For
item_type == "Episode", Ryot should prioritize payload.series.provider_ids over
payload.item.provider_ids.
- Ryot should allow TVDB for TV Shows and TMDB for Movies (or fall back gracefully to TMDB
if TVDB ID is missing on movies).
Code Location
In crates/services/integration/src/sink/jellyfin.rs:
- When
payload.item.item_type == "Episode", it should extract the show ID from payload.series.as_ref().and_then(|s| s.provider_ids...) first.
- For movies (
item_type == "Movie"), it should fall back to TMDB if TVDB is unavailable.
The Jellyfin Sink integration has two critical issues with metadata provider resolution:
1. Global Provider Toggle Breaks Movies: Setting
jellyfin_sink_metadata_providertotvdbforces movie scrobbles to require TVDB IDs. Since Jellyfin movie libraries typically useTMDB/IMDb, all movie scrobbles error out with
No TVDB ID associated with this media.2. Episode ID overrides Series ID: When
item_type == "Episode", Ryot checkspayload. item.provider_idsbeforepayload.series.provider_ids. For shows with episode-level providerIDs, Ryot attempts to look up the show using the episode's ID (e.g. TMDB Episode
153637instead of Series
2190), causing watches to attach to completely wrong shows (or fail onTVDB).
Expected Behavior
item_type == "Episode", Ryot should prioritizepayload.series.provider_idsoverpayload.item.provider_ids.if TVDB ID is missing on movies).
Code Location
In
crates/services/integration/src/sink/jellyfin.rs:payload.item.item_type == "Episode", it should extract the show ID frompayload.series.as_ref().and_then(|s| s.provider_ids...)first.item_type == "Movie"), it should fall back to TMDB if TVDB is unavailable.