github cenodude/CrossWatch v0.5.8
Update 0.5.8

8 hours ago

CrossWatch - v0.5.8

This release add ratings for Plex webhook/watcher and fixes a long-standing Plex annoyance: PIN-protected Plex Home users.
CrossWatch can now switch into the correct Plex user context (even when that user has a PIN).
NOTE: This is ONLY needed for the default enabled Marked Watched plex option (manual “Mark as Watched” actions in the Plex UI).

Ratings are now supported for Plex Webhooks and Plex Watcher. CrossWatch will forward your ratings to Trakt and/or SIMKL.

updated WIKI pages:
PLEX Module
Webhook
Watcher

✨ Highlights

  • Ratings for Plex Webhook and Plex Watcher are now supported
    • You can now include ratings; enable it in Webhook options or Watcher options.
    • For Watcher, you need to add a webhook helper, so Plex Pass is required for this option to work.
  • Plex Marked Watched enhancements
    • This option fetches items you manually marked as watched in Plex. Default: enabled.
    • Previously it only worked reliably for the Plex Owner; Home users (with or without PINs) were not handled correctly.

🔧 Fixes & Improvements

  • Correct Plex user context
    • CrossWatch now attempts to switch to the configured Plex user before syncing user-specific data.
    • If the user is PIN-protected, the PIN is used during the switch.
    • If switching isn’t possible (wrong/missing PIN, not a Home user, etc.), CrossWatch falls back to the token user and logs why.
    • If CrossWatch cannot switch to the intended user, it disables marked watched to avoid syncing the wrong profile.
  • Trakt ratings
    • Added retries and backoff, including Retry-After support.
    • Canonical keys for seasons/episodes: cache merge/remove now includes show_ids + season/episode identifiers.
    • Improved debug logging: status codes and short response bodies on failures.

I’d love to add ratings for Emby and Jellyfin, just like Plex. The problem is: I can’t find any UI option to set user-specific ratings in Emby/Jellyfin.
Maybe I’m just blind. I do see rating-related fields in their APIs, but I’m not seeing the equivalent in the UI. Since I’m not an Emby or Jellyfin user, I might be missing something.
If you know where user ratings live in the UI (or if I’m wrong about how it works), please drop a note in the discussion so I can take another look.


CrossWatch - v0.5.7

BEST WISHES FOR 2026
This release adds Scrobble Library Whitelisting for Plex, Emby, and Jellyfin.
You can now choose exactly which libraries are allowed to generate scrobbles (Simkl/Trakt, etc.).
Configure it under settings - authentication - Plex/Emby/Jellyfin - settings.. Look for the Kermit-the-Frog green dots, that’s Scrobble.
If the scrobble whitelist is empty, CrossWatch will scrobble everything (current behavior).

This applies to both Scrobble input paths (watchers and webhooks):

  • Watchers (local polling/stream watchers)
  • Webhooks (server push events)

READ the WIKI regarding whitelisting

✨ Highlights

  • Scrobble Library Whitelisting (Plex / Emby / Jellyfin)
    • Empty whitelist = allow all (no filtering)
    • New S (Scrobble) column next to H (History) and R (Ratings) in provider settings
    • Emby/Jellyfin use “virtual” views, so CrossWatch resolves the correct View before applying the whitelist
    • Prevents scrobbles leaking from non-whitelisted libraries

CrossWatch - v0.5.6

This release adds a new provider: Tautulli.
Tautulli is a Plex monitoring and analytics tool and NOT a tracker or media server, so CrossWatch uses it only to import your existing Plex watch history

DO NOT pair Tautulli as a destination (or “sync into” anything). It’s not a tracker/media server and will generate garbage matches: wrong IDs, tons of false items, and a bad time. Use it as a source-only helper and NEVER as a direct sync target to Plex, Jellyfin, Trakt, SIMKL, or anything else. The only correct use case: Either import the Tautulli dataset directly into the Editor, or create a one-way sync pair from Tautulli to CrossWatch Tracker.

If this all doesn’t ring a bell, you probably don’t need Tautulli imports, it’s only for a specific group of long-time Plex users with lots of existing history in Tautulli.

READ the WIKI

✨ Highlights

  • New provider: Tautulli (History Import only)
    • Import your historical watches from Tautulli into CrossWatch
    • Tautulli is source-only: it can’t be selected as a destination
    • When using Tautulli, sync is one-way only

CrossWatch - v0.5.5

This update focuses on making Plex to Trakt scrobbling (webhook mode) behave a litte bit better.
Plex fixed some webhook autoplay bugs where a new scrobble start was never sent.
The CW Plex webhook logic now matches Plex’s updated behavior, and the old quarantine/autoplay workaround has been removed.

🔧 Fixes & Improvements

  • Plex Webhook (Plex to Trakt scrobble)
    • Removed the autoplay quarantine logic that was meant to detect autoplay episodes. Obsolute due to Plex bug fixes.
    • Scrobble state is now tied more strongly to the correct user and playback session, reducing mix-ups in multi-user setups.
    • Better handling of Plex progress weirdness (including the classic “pause at 100%”).
    • Smarter decisions on whether an event should be treated as pause or stop, keeping Trakt history cleaner.
    • Stronger fallback logic for resolving episode/show IDs when Plex metadata is incomplete, improving Trakt matching for TV episodes.

CrossWatch - v0.5.4

Another small but important update, and the last one of the year. Wishing you all a great time.

This one is again editor-focused. If you don’t see the changes, do a hard refresh / clear your browser cache (yes, again).
You can now populate state.json without setting up a sync pair first, a huge improvement.

Read all about the new import datasets function here

🔧 Fixes & Improvements

  • Editor upgrades – Import datasets
    • Import your datasets from Plex, Trakt, etc. (Watchlist / History / Ratings) so you can edit/block items before running any sync.
  • Changed: MetaAPI now uses an absolute path, improving compatibility with some reverse proxies.

CrossWatch - v0.5.3

A small update for improved editing. Please refresh/clean your browser cache if you dont see the changes in editor.

🔧 Fixes & Improvements

  • Editor upgrades
    • Bulk selection (select page / multi-select) with bulk delete/restore.
    • Type filters (Movie / Show / Season / Episode) and a Blocked-only view (Current State).

CrossWatch - v0.5.2

Some small fixes.

🔧 Fixes & Changes

  • Fallback GUID: works again (Plex only option). In 0.5.0 the index was cleaned before the fallback GUIDs were merged. Now fixed again. Note: use this as a one-time sync, then disable it.
  • Plex changes: fallback has been removed so usernames and user IDs are honored again.

CrossWatch - v0.5.1

Some small updates and quality-of-life improvements. And one big update.
One long-standing irritation by me was that there was no simple way to say: “do not sync this movie, show, or episode”.
If a provider kept reporting it, CrossWatch would keep planning it. That ends now: you can block items per provider so they won’t be pushed out to targets.
Blocking happens at the highest level: the CW Orchestrator. This function is still experimental...

And like with all my updates: hit Save in Settings at least once, so any new/changed config variables get written into your config.json.

✨ Highlights

  • Metadata localization (TMDB): descriptions can now show in your own language (when available)
    , Default is en-US
    , Change it in Settings -> Metadata providers -> TMDB -> Advanced

I've updated the WIKI Metadata with all possible localizatin codes here.

  • Improved Editor: the editor now supports two different data sources
    • CW Tracker (the existing CW tracker editing and snapshots)
      -Current State (/config/state.json) with a Provider and Feature selector
      -In Current State, you can block items per provider so they won’t sync out to targets.
    • The trashbin button will block them, and if you want to unblock them just push the same trashbin button again.
    • Your Current State changes are saved separately (/config/state.manual.json) and will NOT be deleted automatically.

I've updated the WIKI Editor page here

🔧 Fixes & Changes

  • Changed: absolute path is used for watchlist, to be compatible with some reverse proxies
  • Changed: watcher sink adjustments apply immediately, no container restart needed
  • Fixed: deleting an item in watchlist for CW TRacker, now actually deletes it
  • Fixed: watchlist posters more often include titles on the cover

CrossWatch - v0.5.0

Welcome at version 0.5.0 as stated before this release is all about Refactors, file moves, and code restructuring.
Not glamorous, but it stops the codebase from evolving into a dumpster fire.
There are so many things improved, fixed, and changed that I honestly lost track.

⚠️ Important

Because of the larger code changes, I strongly recommend doing a full cleanup:

  • Go to Settings → Maintenance
  • Run Delete Everything / Clean Everything
  • Then re-open CrossWatch so it rebuilds fresh state/caches
  • Remove any pairs with Jellyfin that included ratings! and Create them again.
  • Optional: remove you config.json to start clean.

This avoids stale tracker data, cached metadata, and old snapshots getting in the way of the refactor.

🔧 Fixes & Changes

  • Jellyfin ratings sync is disabled.
    • I tried, but Jellyfin (and Emby) ratings behavior is… special.
    • It wasn’t working reliably anyway, so it’s off until it’s properly understood and implemented.
  • UI improvement added: M: Movies S: Shows in insight
  • Overal UI improvements smaller probes, css changes etc etc...
  • Watchlist changes:
    • Removed the movie/show overlay when in list view.
    • Added background for the overlay (same principle as the Playing card)
  • Provider changes:
    • SIMKL Improved shadowing (more reliable diffing + fewer “phantom repeats”).
    • TRAKT changes:
      • Improved ID resolving (fewer mismatches, fewer “unresolved” surprises).
      • CW now better supports Free accounts with better handling when Trakt limits are reached.
        • Console now shows: “Trakt account limit reached”
        • Trakt probe now reports:
          • free-tier and VIP limits (watchlist + collections)
          • last limit-related error (so you can actually see what happened)
          • Analyzer will tell you when limits has reached.
    • MDBList Ratings handling improved (fewer retries/loops).
    • Jellyfin and Emby Watchlist pagination fixed.
  • Added three more provider shell tools in /scripts for MDBList / Trakt / SIMKL.
  • Analyzer changes:
    • Improved detection logic.
    • Finds more issues and is better at pointing out why something didn’t sync.
  • Help function: in pair configuration i've added some help icons with mouse-over information.

From 0.5.x onward I’ll continue with some refactoring for javascript and CSS

Don't miss a new CrossWatch release

NewReleases is sending notifications on new releases.