CrossWatch – v0.2.3
Sorry—another update. The coming weeks I’ll push more frequent fixes to squash those small annoying bugs that have been bugging me for way too long 🙂
🔧 Fixes & Changes
Main
- Sync output honors debug: Beautifier is disabled when
runtime.debug
orruntime.debug_mods
is true. - Live log reliability: Added SSE watchdog + auto-reconnect when the stream goes quiet; flushes the remaining buffer on error and preserves slider/stick-to-bottom.
Analyzer
- Counts match reality: Issues are filtered by enabled pairs from
/api/pairs
and by enabled features (history/watchlist/ratings). - Clear footer totals: Footer now shows
Issues: N • H:x • W:y • R:z
so feature backlogs can’t hide real deltas. - Pair map: Analyzer understands the new pairs schema (
source/target
, per-featureenable
)
CrossWatch – v0.2.2
🧪 Analyzer added (early-access / best effort ... whatever)
- Helps spot items that are stuck across providers (PLEX, JELLYFIN, TRAKT, SIMKL).
- Shows Issues: N based on your sync pairs (e.g. missing peers), plus per-item suggestions and where to fix (typically Plex/Jellyfin).
- Practical UI: search, toggle IDs, resizable columns, and a footer with provider counts.
- It won’t edit SIMKL/TRAKT for you; it guides you to fix metadata at the source and then re-sync.
- If it works great—awesome. If not… at least you tried 🙂. (It’s early; feedback welcome)
- Tip: Add TMDb/Trakt keys to get smarter suggestions.
Docs: Analyzer Wiki
CrossWatch – v0.2.1
✨ Focus
- Numbers that match reality in statistics and insight
- Multi-arch images (AMD64 + ARM64)
🔧 Fixes & Changes
- No more double counting: We stop stacking the same totals; we keep the highest number instead of adding.
- Watchlist is fair: Title tweaks/renames are shown as updated (~), not fake added (+).
- Ratings with meaning: Badges now show **+ / − / ~** (add, remove, update).
- Don’t miss events: Ratings/History no longer require a title, so silent providers don’t cause undercounts.
- Smarter matching: “Dune Part 2” ≈ “Dune: Part Two” (fewer bogus add+remove combos).
- Improved stability: various fixes
CrossWatch v0.2.0 — Big, refactored, and yes… probably many new bugs 🙂
Faster syncs, safer writes, cleaner UI. Two-way flows are steadier, SIMKL + Jellyfin behave better, Trakt refreshes itself, progress bar is sane, scheduler is actually useful. Breakage risk is low but back up /config
anyway.
Highlights
- Big refactor: FastAPI split into lean routers; providers + orchestrator modules cleaned up for speed and reliability.
- Safer syncs: Mass-delete guard rails, health status and “suspect shrink” protection; additions/updates chunked; smarter delta reuse.
- Two-way sync that sticks: Less flip-flop from weak IDs; better source-of-truth handling across mixed pairs.
- Scheduling 2.0: Hourly / every-N-hours / daily time, per-timezone, optional jitter, manual “run now”, resilient loop.
- Debug levels:
Off
·On
·On + MOD debug
·On (full HTTP)
best isOn + MOD debug
- Auth mod Plex improvement: in authentication providers there is now a new settings menu for Plex (server settings, user settings and whitelisting of libraries)
- Sync mod Jellyfin improvement: many fixes, should work better now. Also watchlist can now sync to favorites, Playlist and Collections
- Watchlist: new GUID normalizations will provide better results
What’s new (user-visible)
UI/UX
- Progress bar partly fixed: No early jump to 90%. “Apply” phase is shown only after all snapshots complete.
- Run safety: Start/stop visuals are guarded (no more
startRunVisuals is not defined
). - Troubleshoot panel: One-click Clear cache, Reset stats, Reset state.
- Auth flows: Plex PIN and SIMKL OAuth are smoother; clearer status + error toasts.
- Wiki surfaced: Help links right in the app (Getting Started, Config, FAQ).
Providers
- Plex
- Server URL is sticky: Suggestions won’t override a value already saved in config.
- Better library scoping and discovery hints.
- SIMKL
- Fresh “present” snapshots when activity changes (bypasses stale ETag/304). Fewer “why didn’t my add propagate?” moments.
- Trakt
- Auto token refresh before/after calls; 401/403 retries wired in.
- Jellyfin
- Capability reporting cleaned up; fewer re-add loops via smarter ID/shadow handling.
Orchestrator
- Faster snapshots; smarter enrichment ordering; fewer duplicate passes.
- Safer writes with chunking + tiny pauses to avoid API spikes.
- Telemetry (opt-in) trimmed and less noisy.
Scheduling
- Modes:
disabled | hourly | every_n_hours | daily_time
. - Timezone-aware start; optional
jitter_seconds
to avoid herd starts. - Visible “next run at” + last result in the UI.
Config (still JSON, still simple)
- New debug trio:
runtime.debug
,runtime.debug_mods
,runtime.debug_http
. - Stability knobs:
snapshot_ttl_sec
,apply_chunk_size
,apply_chunk_pause_ms
,
and mass-shrink guards (suspect_min_prev
,suspect_shrink_ratio
).
Fixed (the greatest hits)
- Watchlist delete (SIMKL/Trakt): actually removes items and stays removed.
- Endless re-adds from weak/agent IDs reduced (IMDb/TMDb/TVDb priority).
- Insight/List noise reduced (hide disconnected providers).
- UI errors from timing/race conditions hardened.
Breaking/behavior changes
- Internal API/routers were refactored; external endpoints remain the same for normal use.
- If you see odd counts after upgrade: use Maintenance → Clear cache and hard-refresh the UI.
Upgrade notes
- Stop container; back up your
/config
. - Remove your complete /config
- Pull latest:
ghcr.io/cenodude/crosswatch:latest
. - Start; visit Settings → verify tokens + library scopes.
- Test one pair first; then enable Scheduling if desired.
Known rough edges (being honest)
- Stats can be off in edge cases (work in progress).
- Some UI sections don’t auto-refresh perfectly (do manual refresh).
- SIMKL & Jellyfin are still maturing; report weirdness with logs.
- see WIKI for more issues: https://github.com/cenodude/CrossWatch/wiki