Adapter: Jellyfin
Jellyfin adapter lets CrossWatch sync with your Jellyfin server. It supports watchlist, ratings, and history. It prefers external IDs for matching.
What it supports
Direction: source or target in a pair (one-way or two-way)
Features:
Watchlist (favorites, playlist, or collection mode)
Ratings (0–10 scale; accepts 0–5 stars input)
History (played movies and episodes)
Playlists (not supported yet)
Indexing: present-state snapshot (reads “what exists now”)
Connect Jellyfin first. Use: Jellyfin (Authentication provider).
How matching works
CrossWatch normalizes items into a common shape:
type,title,year,idsEpisodes can include
show_ids,season,episode
IDs are pulled from Jellyfin ProviderIds when available (IMDb/TMDb/TVDb). For episodes, the adapter tries to include show context in show_ids.
If external IDs are missing, matching can fall back to title/year. This is less reliable, especially for episodes.
Watchlist behavior
Pick one watchlist mode:
Favorites (default) Uses the user
IsFavoriteflag for Movies and Series.Playlist Uses a playlist (default name:
Watchlist) as the watchlist container.Collection Uses a named collection as the watchlist container.
Reads enumerate the chosen container. Writes toggle favorites or add/remove from the playlist/collection.
Recommended: Favorites or Collection.
Jellyfin playlists can’t hold Series. Playlist mode will only cover Movies and Episodes.
Ratings behavior
Ratings are stored on a 0–10 scale.
If you provide 0–5 stars, CrossWatch up-scales it (×2) during writes.
“Unrate” is supported by clearing the rating (
null).
History behavior
Reads played Movies and Episodes, sorted by
DateLastPlayed.Each entry becomes a normalized event with
watched_atin UTC (...Z).
Jellyfin does not expose unique play-event IDs. CrossWatch approximates event identity using item key + timestamp.
Settings (advanced)
The UI mirrors these under Settings → Synchronization Providers → Pairs (with Jellyfin).
Important config keys
Watchlist:
mode:favorites|playlist|collectionplaylist_namewatchlist_query_limit,watchlist_write_delay_mswatchlist_guid_priority
History:
history_query_limit,history_write_delay_mshistory_guid_priorityhistory_libraries(optional include-list of library IDs)
Ratings:
ratings_query_limit
Diagnostics
Health checks
Ping:
GET /System/PingSystem info:
GET /System/InfoUser probe:
GET /Users/{userId}
Logs are prefixed with [JELLYFIN:feature] (example: [JELLYFIN:ratings] ...).
State and unresolved files
Ratings unresolved:
/config/.cw_state/jellyfin_ratings.unresolved.jsonHistory shadow (merge-only): managed by the module/orchestrator
These prevent infinite retries and make failures visible.
Notes and limitations
Missing external IDs reduces match quality.
If writes are flaky, add a small write delay.
Jellyfin actions are user-scoped. Use separate pairs per Jellyfin user.
Last updated