Release history

What's new.

Every release of LetterboxdSync, newest first. Each entry covers the user-facing changes. Backwards through the project history, all the way to v1.0.0.

20 releases
1.11.3 latest
May 14, 2026 shipped
v1.11.3 Latest

Plain-English error and docs when Cloudflare 403s with cookies already set

Improvements
  • The TMDb-lookup 403 exception now names the three real causes (cf_clearance expired, often around 30 minutes; pinned to a different IP than the Jellyfin server; or rejected by Cloudflare's TLS fingerprinting) and points at the README, instead of suggesting raw cookies that the user has already pasted.
  • README has a new 'Still 403ing after pasting Raw Cookies and a matching User-Agent' subsection under 'Cloudflare issues' with a concrete fix per cause. Addresses the dead-end case reported in #34.

Stop phantom rewatches on diary-imported films

Improvements
  • Install instructions now call out the File Transformation plugin as a prerequisite for the in-sidebar Letterboxd link.
Fixes
  • With diary-import enabled, the daily sync was posting phantom rewatch entries to Letterboxd for films you'd only marked played via diary import (never actually watched on Jellyfin). The runner now waits for a real Jellyfin playback before logging the rewatch.

Don't request the wrong movie when watchlisting a TV show

Fixes
  • Watchlisting a TV show on Letterboxd no longer auto-requests an unrelated movie in Jellyseerr. TMDb has independent ID namespaces for movies and TV (e.g. tv/198102 = Hijack, movie/198102 = Cutie Honey Flash); the link extractor was treating every tmdb link as a movie ID. Now skips /tv/ links, with regression coverage.

Bidirectional rating sync and in-dashboard logs

New
  • Bidirectional rating sync. Dashboard reviews mirror their star rating into Jellyfin (always overwrites), and the daily diary import seeds Jellyfin ratings from Letterboxd for films that don't yet have a Jellyfin rating (anti-clobber).
  • In-dashboard Logs tab with per-user and free-text filters, copy-to-clipboard, and download-as-.log for support requests.
Improvements
  • Diary import switched from /log-entries to /films?memberRelationship=Watched so films you rated on Letterboxd without logging a watch now sync too.
  • Privacy hardening: review text is no longer logged.

Maintenance: bump GitHub Actions runtime

Improvements
  • Bumped GitHub Actions versions (checkout v6, setup-dotnet v5, action-gh-release v3) to remain on a supported Node version. No plugin behaviour changes.

Watchlist mirroring into Jellyseerr

New
  • Mirror Letterboxd watchlist into Jellyseerr's user watchlist. Per-account toggle, two-way sync, movies-only so manually-added Jellyseerr TV is safe.
  • On-demand 'Sync Watchlist Now' button on the plugin dashboard so you don't have to wait for the daily run.
Improvements
  • Pre-flight check against Jellyseerr's media status eliminates duplicate requests for already-pending/processing/available titles.
  • Per-user watchlist sync runner extracted with a shared SyncGate so diary and watchlist syncs serialise.

Local-history backstop against Cloudflare-induced duplicates

Addresses #21.

Improvements
  • Paginated dashboard history table (100 per page) now that the 500-entry cap is gone.
Fixes
  • Refuse to MarkAsWatched when sync history shows a recent successful sync that does not pass the rewatch threshold. Fixes the Cloudflare-failed-validator path that was creating real Letterboxd diary duplicates.

Skip already-synced films and let non-admins Run Sync Now

Fixes #20.

New
  • Non-admin users can now Run Sync Now (triggers their own account only).
  • Per-account stop-on-failure toggle to halt the moment Letterboxd anti-flooding triggers.
Improvements
  • Skip already-synced films using local sync history so we don't burn Cloudflare quota on duplicate checks.
  • Prioritise previously-failed and skipped films first.
  • Explicit info-level logging for every skip with a reason.

Jellyseerr auto-request for unmatched watchlist films

New
  • Jellyseerr auto-request for unmatched watchlist films, with per-user attribution via Jellyfin User ID.
Fixes
  • Dedup fix: the watchlist playlist no longer accumulates duplicate entries on each run.

Per-account User-Agent override

New
  • Per-account User-Agent override so Cloudflare cookies copied from any browser (Chrome, Safari, etc.) work without UA mismatch.

Official Letterboxd API integration with scraping fallback

New
  • Official Letterboxd API is now the primary path, with web scraping as a fallback. Eliminates the Cloudflare 403 errors that were blocking syncs.

User self-service account setup and standalone user page

New
  • User self-service account setup — users link their own Letterboxd account without admin help.
  • Sidebar link for all users.
  • Test connection button on the account form.
  • Standalone user page via File Transformation injection.

Architecture refactor, TMDb cache, progress dashboard

New
  • Progress dashboard showing sync state at a glance.
  • TMDb cache for repeated lookups.
Improvements
  • Architecture refactor for clearer separation of HTTP, auth, scraping, and diary writes.
  • Cloudflare resilience improvements.
  • Watchlist cleanup pass.
Fixes
  • Diary import fix.

Real-time playback sync

New
  • Real-time playback sync via PlaybackHandler — diary entries land within seconds of credits rolling.
Improvements
  • Automatic session re-auth on 401.

Star ratings in reviews and rewatch date picker

New
  • Star ratings in reviews.
  • Rewatch date picker.
  • Better error display in the dashboard.
Improvements
  • Cloudflare retry on review posting.
Fixes
  • Sync history persistence fix.

Dashboard, watchlist sync, diary import, reviews

New
  • Dashboard with sync history.
  • Watchlist sync.
  • Diary import.
  • Reviews from the dashboard.
  • Rating sync.
  • Rewatch detection.
Improvements
  • Cloudflare backoff.