[ { "guid": "c7a3e1b9-5d42-4f8a-9c06-2b7d8e4f1a35", "name": "LetterboxdSync", "overview": "Real-time Letterboxd diary sync with duplicate detection", "description": "Automatically syncs your Jellyfin watch history to your Letterboxd diary. Supports multiple users, real-time sync on playback completion, duplicate detection, retry with backoff, and TMDb-based film matching.", "owner": "builtbyproxy", "category": "General", "versions": [ { "version": "1.11.3.0", "changelog": "Docs: when a Cloudflare 403 happens after you've already pasted Raw Cookies and a matching User-Agent, the plugin error message and README now explain why (cf_clearance is short-lived, pinned to the IP that solved the challenge, and the connection itself is TLS-fingerprinted) and what to try. Addresses the dead-end case reported in #34. No plugin behaviour changes.", "targetAbi": "10.11.0.0", "sourceUrl": "https://github.com/builtbyproxy/jellyfin-plugin-letterboxd/releases/download/v1.11.3/jellyfin-plugin-letterboxd-v1.11.3.zip", "checksum": "84b6c81fbddc78da55ecf26c7621ee40", "timestamp": "2026-05-14T00:00:00Z" }, { "version": "1.11.2.0", "changelog": "Fix: with diary-import enabled, the daily sync was posting phantom rewatch entries to Letterboxd for films you had only marked played via diary import (never actually watched on Jellyfin). The runner now suppresses these films until a real Jellyfin playback sets a LastPlayedDate, at which point the rewatch lands on Letterboxd as expected. Docs: install instructions now call out the File Transformation plugin as a prerequisite for the in-sidebar Letterboxd link.", "targetAbi": "10.11.0.0", "sourceUrl": "https://github.com/builtbyproxy/jellyfin-plugin-letterboxd/releases/download/v1.11.2/jellyfin-plugin-letterboxd-v1.11.2.zip", "checksum": "9faf5fbbd66a7df1b83822b813f03358", "timestamp": "2026-05-13T00:00:00Z" }, { "version": "1.11.1.0", "changelog": "Fix: 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), and the link extractor was treating every tmdb link as a movie ID. Now skips links whose URL points at /tv/. Adds regression coverage for the mismatch.", "targetAbi": "10.11.0.0", "sourceUrl": "https://github.com/builtbyproxy/jellyfin-plugin-letterboxd/releases/download/v1.11.1/jellyfin-plugin-letterboxd-v1.11.1.zip", "checksum": "62b29e2a46aff18866c2c7630b94c448", "timestamp": "2026-05-05T00:00:00Z" }, { "version": "1.11.0.0", "changelog": "Bidirectional rating sync: dashboard reviews mirror their star rating into Jellyfin's UserItemData.Rating (always overwrites), and the daily diary import seeds Jellyfin ratings from Letterboxd for films that don't yet have a Jellyfin rating (anti-clobber). Switched the diary import API path from /log-entries to /films?memberRelationship=Watched so films you rated on Letterboxd without logging a watch now sync too. New in-dashboard Logs tab with per-user and free-text filters, copy-to-clipboard, and download-as-.log for support requests. Privacy hardening: review text is no longer logged.", "targetAbi": "10.11.0.0", "sourceUrl": "https://github.com/builtbyproxy/jellyfin-plugin-letterboxd/releases/download/v1.11.0/jellyfin-plugin-letterboxd-v1.11.0.zip", "checksum": "04830cb6788d3cef4bdfe6468f3bcf98", "timestamp": "2026-05-05T00:00:00Z" }, { "version": "1.10.1.0", "changelog": "Maintenance: bump GitHub Actions runtime versions (checkout v6, setup-dotnet v5, action-gh-release v3) to remain on a supported Node version. No plugin behaviour changes.", "targetAbi": "10.11.0.0", "sourceUrl": "https://github.com/builtbyproxy/jellyfin-plugin-letterboxd/releases/download/v1.10.1/jellyfin-plugin-letterboxd-v1.10.1.zip", "checksum": "c1b34b823027c8416cc52acd49baf77f", "timestamp": "2026-05-04T00:00:00Z" }, { "version": "1.10.0.0", "changelog": "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. Pre-flight check against Jellyseerr's media status eliminates duplicate requests on every run (was creating fresh requests for already-pending/processing/available titles). Per-user watchlist sync runner extracted with a shared SyncGate so diary and watchlist syncs serialise.", "targetAbi": "10.11.0.0", "sourceUrl": "https://github.com/builtbyproxy/jellyfin-plugin-letterboxd/releases/download/v1.10.0/jellyfin-plugin-letterboxd-v1.10.0.zip", "checksum": "d54df8743cd86995b1bee1249e415b18", "timestamp": "2026-04-30T00:00:00Z" }, { "version": "1.9.1.0", "changelog": "Local-history duplicate backstop: 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. Paginated dashboard history table (100 per page) now that the 500-entry cap is gone. Addresses #21.", "targetAbi": "10.11.0.0", "sourceUrl": "https://github.com/builtbyproxy/jellyfin-plugin-letterboxd/releases/download/v1.9.1/jellyfin-plugin-letterboxd-v1.9.1.zip", "checksum": "aa95027481de6930d7f901dd7b79fa53", "timestamp": "2026-04-30T00:00:00Z" }, { "version": "1.9.0.0", "changelog": "Skip already-synced films using local sync history so we don't burn Cloudflare quota on duplicate checks; prioritise previously-failed/skipped films first; per-account stop-on-failure toggle to halt the moment Letterboxd anti-flooding triggers; explicit info-level logging for every skip with reason; non-admin users can now Run Sync Now (triggers their account only). Fixes #20.", "targetAbi": "10.11.0.0", "sourceUrl": "https://github.com/builtbyproxy/jellyfin-plugin-letterboxd/releases/download/v1.9.0/jellyfin-plugin-letterboxd-v1.9.0.zip", "checksum": "77b868d347daa3e5d2e406a84239ec59", "timestamp": "2026-04-30T00:00:00Z" }, { "version": "1.8.0.0", "changelog": "Jellyseerr auto-request for unmatched watchlist films (per-user attribution via Jellyfin User ID), plus dedup fix so the watchlist playlist no longer accumulates duplicate entries on each run", "targetAbi": "10.11.0.0", "sourceUrl": "https://github.com/builtbyproxy/jellyfin-plugin-letterboxd/releases/download/v1.8.0/jellyfin-plugin-letterboxd-v1.8.0.zip", "checksum": "e40552a2d9456c6a34ccf23475355b7c", "timestamp": "2026-04-26T00:00:00Z" }, { "version": "1.7.1.0", "changelog": "Fix watchlist sync returning 0 films via official API: redundant `member` query param caused Letterboxd to return empty items", "targetAbi": "10.11.0.0", "sourceUrl": "https://github.com/builtbyproxy/jellyfin-plugin-letterboxd/releases/download/v1.7.1/jellyfin-plugin-letterboxd-v1.7.1.zip", "checksum": "PLACEHOLDER", "timestamp": "2026-04-25T00:00:00Z" }, { "version": "1.7.0.0", "changelog": "Per-account User-Agent override so Cloudflare cookies copied from any browser (Chrome, Safari, etc.) work without UA mismatch", "targetAbi": "10.11.0.0", "sourceUrl": "https://github.com/builtbyproxy/jellyfin-plugin-letterboxd/releases/download/v1.7.0/jellyfin-plugin-letterboxd-v1.7.0.zip", "checksum": "d6281ab55367c645a3a3ff6bb7c62f5e", "timestamp": "2026-04-25T00:00:00Z" }, { "version": "1.6.1.0", "changelog": "Fix review posting via official API: resolve film LID from TMDb ID instead of slug (fixes #12)", "targetAbi": "10.11.0.0", "sourceUrl": "https://github.com/builtbyproxy/jellyfin-plugin-letterboxd/releases/download/v1.6.1/jellyfin-plugin-letterboxd-v1.6.1.zip", "checksum": "87fa9f95e6e57fa16e5b7083ef970876", "timestamp": "2026-04-14T00:00:00Z" }, { "version": "1.6.0.0", "changelog": "Official Letterboxd API integration (primary) with web scraping fallback, eliminates Cloudflare 403 errors", "targetAbi": "10.11.0.0", "sourceUrl": "https://github.com/builtbyproxy/jellyfin-plugin-letterboxd/releases/download/v1.6.0/jellyfin-plugin-letterboxd-v1.6.0.zip", "checksum": "5de13fa5256243bb0fc4b81f848cdd13", "timestamp": "2026-04-07T00:00:00Z" }, { "version": "1.5.0.0", "changelog": "User self-service account setup, sidebar link for all users, test connection button, standalone user page via File Transformation injection", "targetAbi": "10.11.0.0", "sourceUrl": "https://github.com/builtbyproxy/jellyfin-plugin-letterboxd/releases/download/v1.5.0/jellyfin-plugin-letterboxd-v1.5.0.zip", "checksum": "2a12387b19461de7dd49b4da5f03c513", "timestamp": "2026-04-07T00:00:00Z" }, { "version": "1.4.0.0", "changelog": "Architecture refactor, TMDb cache, progress dashboard, diary import fix, Cloudflare resilience, watchlist cleanup", "targetAbi": "10.11.0.0", "sourceUrl": "https://github.com/builtbyproxy/jellyfin-plugin-letterboxd/releases/download/v1.4.0/jellyfin-plugin-letterboxd-v1.4.0.zip", "checksum": "cdef9daa290a58986d20e2760843a3a6", "timestamp": "2026-03-31T00:00:00Z" }, { "version": "1.3.0.0", "changelog": "Real-time playback sync via PlaybackHandler, automatic session re-auth on 401", "targetAbi": "10.11.0.0", "sourceUrl": "https://github.com/builtbyproxy/jellyfin-plugin-letterboxd/releases/download/v1.3.0/jellyfin-plugin-letterboxd-v1.3.0.zip", "checksum": "5d6ab49eb7f6dec18d0d5bf63cb0451a", "timestamp": "2026-03-26T22:00:00Z" }, { "version": "1.2.1.0", "changelog": "Fix sync history persistence across version upgrades", "targetAbi": "10.11.0.0", "sourceUrl": "https://github.com/builtbyproxy/jellyfin-plugin-letterboxd/releases/download/v1.2.1/jellyfin-plugin-letterboxd-v1.2.1.zip", "checksum": "4a9dc0f75d90c945b1aa30e1b353ad63", "timestamp": "2026-03-26T01:00:00Z" }, { "version": "1.2.0.0", "changelog": "Star ratings in reviews, rewatch date picker, Cloudflare retry on reviews, better error display, sync history persistence fix", "targetAbi": "10.11.0.0", "sourceUrl": "https://github.com/builtbyproxy/jellyfin-plugin-letterboxd/releases/download/v1.2.0/jellyfin-plugin-letterboxd-v1.2.0.zip", "checksum": "b57832a58c8592ab54b508f2f56af89d", "timestamp": "2026-03-26T00:00:00Z" }, { "version": "1.1.0.0", "changelog": "Dashboard with sync history, watchlist sync, diary import, reviews, Cloudflare backoff, rating sync, rewatch detection", "targetAbi": "10.11.0.0", "sourceUrl": "https://github.com/builtbyproxy/jellyfin-plugin-letterboxd/releases/download/v1.1.0/jellyfin-plugin-letterboxd-v1.1.0.zip", "checksum": "99ebc280d1b2929416a71a92764150bc", "timestamp": "2026-03-25T12:00:00Z" }, { "version": "1.0.0.0", "changelog": "Initial release: real-time sync, scheduled catch-up, multi-user, duplicate detection, retry with backoff", "targetAbi": "10.11.0.0", "sourceUrl": "https://github.com/builtbyproxy/jellyfin-plugin-letterboxd/releases/download/v1.0.0/jellyfin-plugin-letterboxd-v1.0.0.zip", "checksum": "a7051032812f841542d03ccbd0bfe35a", "timestamp": "2026-03-25T00:00:00Z" } ] } ]