github Cinephage/Cinephage v0.18.0

latest release: v0.18.1...
3 days ago

0.18.0 (2026-11-02)

  • feat(deps)!: migrate to SvelteKit 3 + adapter-node 6 (7f9fa16)

Bug Fixes

  • acquisition: hard-stage enforcement, intent lifecycle, and recoverable imports (5853f09)
  • activity: always delete files and unify removal confirmation flow (860003b)
  • activity: confirm-and-exit instead of step-1 for wizard sessions from Unmatched (dade5df)
  • activity: delete files when removing downloads (#583) (fe4664d)
  • activity: keep imported seeding torrents visible (#563) (0612bca)
  • activity: parse quality/group and label the source for Attach/Accept history (e163db3)
  • api: stat files before serving and update main API key fallback to use correct permission set for verification (e751cd2)
  • arr-compat: add downloadclient, fix lookup prefixes, fix Open in Radarr links (ac18f84)
  • arr-compat: implement Radarr/Sonarr exclusion list endpoints (be1a300)
  • arr-compat: map language endpoints onto v2 language profiles (df59887)
  • arr-compat: parse Sonarr requests tvdbId identity against Cinephage tmdbid (3973217)
  • arr-compat: resolve case-insensitive routing + real language/languageprofile data (7f887d8)
  • arr-compat: stop command retries and accidental global-sweep fallback from hammering indexers (fbf0ac3)
  • auth: create Better Auth tables before first auth access (7710afc)
  • auth: dual LAN + external-URL login support (Issue #596) (04595ba)
  • auth: reconcile apikey DDL with better-auth 1.7 and upgrade to 1.7.5 (5ae1a8f), closes #569
  • auth: stop API-key requests from crashing the server via cookies_set_after_response (2f6249a)
  • auth: strip __Secure- cookie prefix on LAN http login, not just the Secure attribute (1b4e683)
  • blocklist: auto-blocklist failed downloads, allow manual blocklisting from history (0e12a7c)
  • build: pre-compile paraglide before vite build (8ed4fc0)
  • captcha: migrate to the official @camoufox/camoufox launcher (f0165a1)
  • captcha: passive-first two-phase solving and browser-context binary downloads (40de989), closes #228
  • cinephage: point unregistered installs at registration in all gateway 401s (838c746)
  • cinephage: preserve release version prefix (fca6dad)
  • CI: resolve typecheck errors (5adc591)
  • ci: skip first-run Camoufox provisioning in the Docker smoke test (69cf147)
  • correct import path for CinephageApiService (09f0e93)
  • db: align schema version stamp and drift map with migration 160 (cefc190)
  • db: backfill NULL adult values before migration v140's NOT NULL rebuild (3cacb6f)
  • db: make all remaining INSERT sites idempotent with onConflictDoNothing (8e8404e)
  • db: never brick boot when startup VACUUM fails (248725a)
  • db: purge legacy orphaned unmatched_files rows (migration 131) (6009bf8)
  • deploy: adapt server entry and env pins to SvelteKit 3 runtime (9d8c6cd)
  • deps: restore playwright-core pin below 1.63 (edf05eb)
  • deps: stub out the npm package to drop its bundled vulnerabilities (3818062)
  • derive per-category save paths for Transmission, Deluge and rTorrent (c4bdb2a)
  • dev: load dotenv in vite.config.ts (3caf2dd)
  • dev: stop process signal handlers from stacking across Vite HMR reloads (88a3d4d)
  • discover: prevent SectionRow TMDB request loop (c3dafcd)
  • docker: add AbortSignal.timeout to healthcheck fetch (7010566)
  • docker: allow 10m startup grace for first-run camoufox download (#516) (3fdc8ba)
  • docker: chown intermediate .cache dir in shallow ownership path (f454071), closes #516
  • docker: create camoufox staging dir on non-root direct runs (#516) (08d15cb)
  • docker: exclude generated paraglide from build context (65d498c)
  • docker: measured camoufox logging, interrupted-install recovery, staging sweep (#516) (9ce5331)
  • docker: stop the doc-dir pruning from deleting yaml's runtime code (879700a)
  • download-clients: align the debrid client form with the app template and clarify torrent-acquisition UX (877606a)
  • download-clients: enable category customization for Transmission (#568) (5f1279a)
  • download-clients: enforce boolean safety for sequentialDownload (bf609a2)
  • download-clients: improve error message for failed torrent addition (f78d469)
  • download-clients: prevent import-exhausted failures from being resurrected by polling (4a444c2), closes #502
  • download-clients: sanitize categories and quote rTorrent commands per PR #565 review (42ca479)
  • downloadClients: fall back to get_cats for SABnzbd 5.x categories (#482) (691711d)
  • downloadClients: resolve relative SABnzbd complete_dir via local path mapping (#489) (3913630)
  • downloadClients: resolve unmatched usenet downloads by actual protocol (e33c220)
  • downloadClients: stalled progress timeout, blocked extensions and search cache (6f93b43)
  • downloadClients: surface SABnzbd's archived history and recognize .strm content (4190b32)
  • downloads: accept explicit null URL fields in grab requests (9d30030)
  • downloads: never auto-remove torrents that are actively seeding (#559) (17552f5)
  • downloads: persist failed grabs to download_history (573cf6a)
  • downloads: prevent duplicate torrent tracking (4b3779d)
  • downloads: rTorrent seed goals evaluated app-side for canBeRemoved (441eddc)
  • downloads: stop the infinite import retry loop for permanently-failed items (8d6aad0)
  • downloads: validate recovery candidates before importing vanished downloads (#532) (9527bb0)
  • filesystem: cache root folder paths to prevent event-loop freeze on large directories (#495) (14e5ddd)
  • filesystem: stop the container's umask from making media dirs/files unreadable by other-UID processes (cd6d241)
  • filters: let manual grabs override size validation (df959a0)
  • hide and refuse non-video files in unmatched linking (e5c6ff1)
  • import: apply manual episode/season overrides when filename parses successfully during manual import (74f46f2)
  • import: copy without mode preservation to support exfat roots (#490) (74bfacb)
  • import: raise bulk job cap and request body limit, clearer payload errors (#496) (04a13e0)
  • import: respect user's default root folder setting in manual import destination (47ca9c6)
  • import: skip transferring content the library already has (#598) (6dde379)
  • imports: notify media servers immediately on import completion (74d2131)
  • import: stop false-positive duplicate skips and recover stuck imports (5e380b9)
  • indexer: revert NoName Club indexer name to pass indexer file test (685ac04)
  • indexers: add kinozal.me mirror to Kinozal indexer definitions (49caba2)
  • indexers: add missing rateLimitPerMinute field to IndexerFactory configuration (15b8570)
  • indexers: add missing rateLimitPerMinute field to YamlIndexerFactory (74c1ded)
  • indexers: address review feedback on C411 and TR4KER (09bfef2)
  • indexers: bind search-level response.type instead of silently dropping it (fc3b672)
  • indexers: classify aborted search variants as cancellations, not failures (68768a0)
  • indexers: detect every HDR format in combo releases (issue #640) (c0568f8)
  • indexers: honest language parsing, definition-language demoted, enhanced-path language boost (76d31e1)
  • indexers: ID-first matching, context-aware parsing and scoring hardening (df92741), closes Sonarr#7372
  • indexers: make explicit resolution win over UHD/4K alias in parser (#594) (83ba1a3)
  • indexers: parse audio codecs when channel digits are glued on (#585) (c8724c3)
  • indexers: pure language boost, drop dead enhanced-path boost and seeder leak (1a96e57)
  • indexers: return first movie variant results instead of timing out (a72340c)
  • indexers: show a clear message when a JSON indexer returns an empty response body (c96b28e)
  • indexers: stop incidental pubDate whitespace from wasting indexer API quota (afa24d5)
  • indexers: stop large TV searches from exhausting indexer quotas (2cfa068)
  • indexers: stop searches from firing against category-restricted or mismatched indexers (dcf63bd)
  • indexers: stop TV/movie searches from also querying the wrong content type's categories (6be9aa5)
  • indexers: unwrap JSON-encoded cookie envelopes in indexer_status (b243bc1)
  • indexers: validate RSS weekdays in the source timezone (#641) (71bc669)
  • integrations: add explicit update schemas to prevent Zod v4 default injection (30cbccf)
  • integrations: review fixes for PR #484 debrid preflight (9dcb321)
  • language: enforce profile/settings authority and migration guards (5526446)
  • library-watcher: harden ENOSPC handling and detect network mounts (cfd827c)
  • library-watcher: replace chokidar with @parcel/watcher to fix inotify exhaustion (0464f10)
  • library: add cancelled TV status filter with both status spellings (#494) (a8e7455)
  • library: allow debrid client to satisfy auto-search preflight (d6d0671)
  • library: canonicalize article titles and score TMDB original titles (0881514), closes #513
  • library: direct ownership handoff in LibraryOperationLock release path (27fbd52)
  • library: fix swapped Promise.all destructuring breaking anime detection at add-time (81aae54)
  • library: guard read-only root folder destinations (#529) (63bdf9b)
  • library: guard read-only root folder destinations (#529) (f5978cb)
  • library: heal failures fall back to removal; accurate heal metrics; deterministic transition order (74b93ee)
  • library: implement dedicated endpoints for anime provider ref lookups to enhance page load performance (65d8c9c)
  • library: infinite loop + directory false-positives for uppercase/extension-named content (4824ea6)
  • library: keyset match paging, queued reprocess-all, self-healing job worker (c1181aa), closes #513
  • library: make poster grid breakpoints responsive (978799e)
  • library: make series rebuild atomic and reject unusable episode groups (a270f40)
  • library: match edition filenames and year searches (#564) (1ddbf28)
  • library: move the list->detail "back" link out of the URL and into sessionStorage (4d7d311)
  • library: movie detail back link restores filtered list state (#515) (a5f5e91)
  • library: never wipe tracked records when a root folder scans as empty (b16bcfe), closes #505
  • library: persist current list URL not destination in returnUrl keys (#515) (eef34bb)
  • library: persist explicit default quality profile selection (#493) (3b6c821)
  • library: persist movies return URL for back navigation (#515) (b98a7b8)
  • library: persist tv return URL for back navigation (#515) (de5f3d3)
  • library: preserve filters when returning from detail (6f7fdd9), closes MoldyTaint/Cinephage#515
  • library: preserve tracked files in hidden-looking folders (#582) (f334cde)
  • library: prevent event loop starvation during initial folder scan on ZFS/NFS (747fc66)
  • library: refuse cross-root unmatched matches to avoid unresolvable file links (#488) (a6fbcb0)
  • library: refuse rename and move operations while a library scan is in flight (12963e2)
  • library: reject read-only root folders in reorganize and smartlist APIs (#529) (753867f)
  • library: relax write-test dir mode to avoid media-server watcher errors (eecdca6)
  • library: resolve false root-folder conflicts and wrong-year title matches (#595) (d9b1573)
  • library: restore episode file links after series refresh rebuilds episodes (6bcdbbd)
  • library: retire displaced file on deliberate re-match (issue #627) (46b2ff7)
  • library: series detail back link restores filtered list state (#515) (782fdc4)
  • library: stop anime metadata lookups from blocking series page load (1dcbb75)
  • library: stop double-resolving returnTo back links on detail pages (SSR 500) (0c89db9)
  • library: stop series refresh from silently re-monitoring every season (9d740b6)
  • library: stop stamping instance default as item profile override at add time (5761b14)
  • library: synchronize .nfo sidecar lifecycle with media files during rename and upgrade ops (103be1e)
  • library: tag new movie with its TMDB collection on manual match (92065c0)
  • library: validate read-only root folders without write access (ff93d6f), closes MoldyTaint/Cinephage#522
  • library: watcher defers during rename operations and re-queues on transient errors (9fd6334)
  • library: write NFO/artwork sidecars on manual import and file matching (ea79968)
  • license: restore canonical GPL-3.0 text for GitHub/Unraid CA detection (11762e6)
  • lint: resolve pre-existing ESLint errors from updated rule set (9f0306a)
  • livetv: fetch all EPG source candidates in the picker (9bf30b2)
  • livetv: harden HLS to TS streaming and segment proxying (cd920ce)
  • logging: resolve pino-pretty target path explicitly for vite ssr dev (83e49df)
  • media-matcher: make movie_files insert idempotent (54ec2f5)
  • media-matcher: make season/episode/episode_file inserts idempotent (34304fc)
  • media-matcher: replace try/catch UNIQUE recovery with onConflictDoNothing across all tables (b47e94e)
  • mediabrowser: surface notify failures (3a9ae32)
  • mediabrowser: use the full Authorization header Jellyfin 12.x requires (3647f1d)
  • mediaServerStats: resolve Plex episodes to their parent series TMDB ID (0edff04), closes #500
  • mediaserver: stop trusting Emby/Jellyfin's per-episode TMDB id (1d68536)
  • metadata: guard against TMDB placeholder titles and honor series language in manual refresh (3f15a00), closes #509
  • metadata: locale authority, naming parity, EPG display language, and parser coverage (c07a4e7)
  • monitoring: decouple new-episode lookback from its run interval, schedule metadata refresh, fix task status/interval bugs (1fed1a1)
  • monitoring: resolve default scoring profile for null-profile upgrade contexts (#492) (f39c792)
  • monitoring: resolve log freeze and add capture-level persistence (fd5a5ec)
  • monitoring: rotate through missing episodes instead of starving the backlog past the per-run cap (4bbc4f5)
  • monitoring: scope every log call site to a proper domain (6018f83)
  • monitoring: season-pack search fixes for torrent / non-Western trackers (63b9535), closes #504
  • monitoring: stop re-downloading episodes with a broken season link (0b2997f)
  • monitoring: truthful history records and search-window fixes (b374f51)
  • naming: chunk rename execution in RenamePreviewModal to respect the 500-file server cap (48f6e2e)
  • naming: create nested target directories for letter-bucket renames and clean emptied parents (7b0d913)
  • naming: fall back to filename-parsed audio languages in Rename Preview (f70572e), closes #507
  • naming: map validation failures on rename execute to 400 instead of 500 (b5fc4a9)
  • naming: move renameExecuteSchema out of +server.ts — SvelteKit forbids non-handler exports (173999b)
  • naming: render series tokens in season folder formats (#548) (105982d)
  • naming: report rollback failure accurately in reorganize error message (c61ff39)
  • naming: reset confirm state on empty selection and refresh preview after mid-batch failure (603abad)
  • naming: resolve svelte-check type error in lock integration test (12cc4c6)
  • naming: roll back folder rename on disk when the DB path update fails (ea5a0aa)
  • naming: stop bulk rename preview serving stale results (#549) (5a9bcd7)
  • naming: strip leading dots from generated folder/file names (2ab3646)
  • naming: surface and record folder-path DB update failures instead of swallowing them (bef5a38)
  • naming: surface per-file error details in rename-failure message (i18n {errors} placeholder) (03ae6f3)
  • naming: valid localized-title locales, rename parity, canonical {AudioLanguages} (d5aa736)
  • notifications: guard root-folder reorganize/delete, skip Plex pre-delete, cover root guards with tests (e9c0ed3)
  • parser: bracketed episode notation, same-season ranges, title hygiene (28555e4)
  • parser: don't treat episode-title tail words as release groups (186705d)
  • parser: harden episode-range detection and bare ISO 639-1 language tags (7e2cae3), closes #508 #510 #508 #510
  • parser: release-group guard handles bracketed quality blocks in generated filenames (4e12dd6)
  • parser: strip space-separated extensions in release-group guard (94d3ccd)
  • perf: eliminate remaining event-loop-blocking scans in status/logs tabs (bab3071)
  • perf: eliminate unbounded full-table scans across dashboard, library pages, monitoring, and background rules (9447bcc)
  • preserve native streaming formats (09186ad)
  • qbittorent: refactor test stubs for torrent and preferences (52f81e1)
  • qbittorrent: declare test-local hash/forceStart vars in duplicate-detection test (390972b)
  • qbittorrent: parse structured add responses (4d9daf6)
  • quality: apply default profile bounds to null-profile multi-quality buckets (36a4d7b)
  • reconciliation: fix crash, event-loop blocking, and missed triggers (f7d966d)
  • releases: fix identity-match false positives on dual-language and episode-prefixed release titles (6a82241)
  • rename: add inline warning when rename button is disabled during an active scan (a128a22)
  • repair episode file links after refresh, re-link unmatched files, and fix scan toasts (a91d978)
  • repair yaml parsing in indexer validator script (58d560e)
  • reports: replace native confirm() with the app's ConfirmationModal and disable Export button when reports are empty (e0ba8f3)
  • requests: reconcile requests orphaned by media deletion (35948b2)
  • resolve correlationIds in diagnostic reports to actual log record (98c7510)
  • scan: match title-only specials and absolute-numbered episodes (e91750f)
  • search: name the matched formats on score breakdown pills (16b254b), closes #585
  • search: parse (YYYY Edition) names with spaces and strip years from indexer queries (#557) (f49aa68)
  • search: stop the search modal from resetting while its open (63ada21)
  • security: close credential, auth, and destructive-delete holes (49fed05)
  • security: defense-in-depth admin guards and server-side password-reset revocation (df3fc6e)
  • security: enforce read-only roots on every writer and redact leaked credentials (c02521f)
  • security: harden API-key scoping, secrets, redaction, and inputs (aaf5c8c)
  • security: harden SSRF checks against mapped IPv6 and multi-address DNS (a694943)
  • security: pin SSRF fetches, bind LiveTV proxy URLs, and cap fan-out (346f0f8)
  • security: use nonce-based CSP for dynamic pages instead of hash mode (6b0f602)
  • server: add sqlite.close, fix exit codes, ensure closeDb on all paths (7536d0c)
  • server: chunk stale-item deletion media-server stats to avoid SQLite variable limit (b5cd33a)
  • settings: allow saving the External URL setting (076a6c7)
  • settings: preserve Date columns in configuration backup round-trip (3ddb61c), closes #513
  • settings: resolve library quality-profile dropdown defaulting and update checkbox styling. (45d80a8)
  • smart-lists: honor language_profile_id on auto-added items; drop default-stamping helper (868cd47)
  • storage: fix quick-insights modal close behavior and scroll lock (f5d4071)
  • storage: fix Storage Insights navigation, grouping, and remediation (#600) (e79ef79)
  • storage: group untracked episodes by series name when tmdbId is unresolved (079459f)
  • storage: hide disabled media servers from Storage Maintenance + other enhancements (b232496)
  • storage: match server items lacking tmdbId via imdbId fallback (#601) (cf77c55)
  • storage: multi-episode files no longer flagged missing from media server (#481) (06b5b8a)
  • storage: re-sync cached insight count/summary against live resolver total (#601) (020f0d1)
  • storage: reuse captured event emitter refs instead of re-importing on detach (1b3dc1c)
  • storage: stop guessing movie-vs-series from tmdbId collisions (#601) (683b2da)
  • storage: stop insight pagination from resetting to page 1 (e3a1990)
  • storage: stop long titles from overflowing cards on mobile and add click to expand for truncated titles (b756e2e)
  • streaming: add CORS preflight and cheap HEAD probes to session entry routes (7894946)
  • streaming: apply gateway headers verbatim and guard the proxy (c1f3442)
  • streaming: build legacy master.m3u8 redirects from the configured base URL (cec4276)
  • streaming: classify DASH sources correctly and surface upstream probe status (c7b355f), closes #503
  • streaming: file-safe STRM handling, session correctness, and format honesty (4891ce8)
  • streaming: keep session playlists uncached, subpath-safe, and Origin-free upstream (3e2188c)
  • streaming: match providers by family instead of exact name (c29edde)
  • streaming: normalize HLS URL rewriting and provider URL handling (8c702e2)
  • streaming: reject unplayable gateway source URLs (ed1f9b7)
  • streaming: release SSRF agent only after the response body is consumed (191d4ea)
  • streaming: stop the legacy proxy inventing a Referer (198d80d)
  • streaming: use matching undici fetch for the pinned SSRF dispatcher (8f230e2)
  • subtitles: full-result manual download, multi-file keys, surfaced provider errors (07a2e94)
  • subtitles: make subtitle disk scans file-row-driven (arr parity) (c930a7c)
  • subtitles: normalize OpenSubtitles VIP base_url response (#608) (cdb5666)
  • subtitles: override-aware search, provider throttling, and safe retirement (e0d66a3)
  • subtitles: redesign search filters as toggle pills, fix overlap bug (37a271f)
  • subtitles: refuse symlinked or traversing subtitle paths (de0087f)
  • subtitles: resolve effective profile read-only in tasks/import; never persist resolved defaults (95a3906)
  • subtitles: resolve provider language codes through the registry (e11a44f)
  • subtitles: route every search path through per-requirement backoff (48936e4)
  • tasks: add the missing history-cleanup endpoint (f8b517a)
  • test: renumber stray migration references in media-server test (366da58)
  • test: smart_lists filters column expects an object (a2be1bd)
  • test: update subtitle auto-search test (c64deed)
  • tmdb: stop images from staying stuck behind the placeholder on reload (5bb691d)
  • types: repair silently vacuous svelte-check and fix surfaced errors (497f526)
  • ui: break effect loop in library edit modal profile prefill (8fd2f2f)
  • ui: link add-flow no-default-profile warning to the languages settings page (69158a0)
  • ui: SSR-render subtitle requirement rows (initialize working copy from props) (e1cfb2c)
  • ui: stop CSP from blocking image load/error handlers app-wide (21aa51e), closes #each
  • unmatched: check episode-level file precision, not just season (f81e1cd)
  • unmatched: clear file selection when switching view mode on Unmatched Files page (6b1e4b3)
  • unmatched: resolve folder-based unmatched items to their source download (5a571b4), closes #629
  • unmatched: stamp queue-row origin, fix arr_push collision + mid-import race (08f7747)
  • unmatched: update unmatched file count immediately after delete or match (072721a)
  • use resolveAppVersion() in pre-update backup filenames (5ff1196)
  • validation: stop mediaBrowserServerTestSchema backfilling serverType default (af9a6c6), closes #499
  • version: stop doubling the v prefix on login and setup (61cddb3)

Features

  • accounts: per-user preferences, avatars, timed bans, key encryption (c101327)
  • acquisition: intent-based acquisition authority + identity enforcement (90dc718)
  • activity: add bulk cancel for active downloads (8a7cedd)
  • activity: add tab filters, remove defaults setting, report import failures, fix badge crash (ce60949)
  • activity: distinct importing status for finished transfers awaiting import (13e75af), closes #501
  • activity: make Unmatched tab table consistent with other activity tabs (0bca630)
  • activity: persist import transfer method and warn on copy fallbacks (#597) (d012afe)
  • add partially monitored indicator for TV series (#514) (3d4d383)
  • api: add local library file streaming api endpoints (ac6ee11)
  • api: complete the client response typing pass (8952bfc)
  • api: language profile v2 + language settings + metadata mode/value endpoints (6232afd)
  • api: per-item subtitle requirement override endpoints (movies/series/episodes, bulk clear, library-aware effective) (aa5e0a3)
  • api: type calendar, discover, and downloads client modules (b0a2b11)
  • api: type filesystem and logos client modules (ff67ac8)
  • api: type the client response layer, first batch (ae8d571)
  • arr-compat: add movie/series (POST/PUT/DELETE) actions (8076ffd)
  • arr-compat: add notification webhook support for Pulsarr/Notifiarr (c9602e3)
  • arr-compat: add Radarr/Sonarr API compatibility layer (53e7096)
  • arr-compat: add release/push endpoint for autobrr integration (bf3c814)
  • auth: carry session identity into the UI (17da6e4)
  • auth: make the auth layer multi-user ready (19ed361)
  • auth: ship multi-user support with confined viewer accounts (31995b4)
  • captcha: keep the paired Camoufox browser provisioned automatically (5d81933)
  • cinephage: per-install gateway API keys (657e559)
  • cinephage: rebuild settings page around the install key (924858e)
  • cinephage: resolve gateway signing secret from env or file (a1b5d92)
  • cinephage: sign gateway requests with per-release HMAC secret (0f709ae)
  • crypto: versioned AEAD envelope for credentials at rest (81148d0)
  • db: language profile v2 + language_settings schema definitions (df3952b)
  • db: language system reset migration (v2 profiles, language_settings, canonicalization, FKs) (94f59e1)
  • db: subtitle requirement override columns + inheritance repair (m143) (2fba8ed)
  • db: subtitle search state, upgrade rotation, episode path-base fix (m138) (82354c8)
  • discover: add network filter and multi-select bulk add (f5762c5)
  • downloads: per-client removal policy for completed downloads (#559 follow-up) (95eff64)
  • i18n: add parameterized library_backTo message (#515) (8c55ddb)
  • import-wizard: redesign Step 2/3 into master-detail layout (f66a8d5)
  • indexers: add Blutopia direct API indexer definition (56937af)
  • indexers: add C411 and TR4KER French trackers (b221f18)
  • indexers: add LST, Aither, TorrentLeech and SuperBits definitions (#533) (8355ed8)
  • indexers: add native Hungarian tracker definitions (43413dd)
  • indexers: add Nebulance direct API indexer definition (d0ccf41)
  • indexers: add NoNaMe Club and fix Kinozal cartoon categories (115f22a)
  • indexers: add PassThePopcorn direct API indexer definition (3d2a6e3)
  • indexers: add Usenet-Crawler definition and detect Newznab API errors (d189251)
  • indexers: rutracker dub-studio title normalization (kinozal parity) (7639b10)
  • indexers: session cookie store, browser cookie injection, search & alternate-title improvements (fa2b6ef)
  • language: add combined profile types and v2 Zod schemas (f0d7202)
  • language: add server boundary normalizer with ISO fallback (8def1dc)
  • language: effective-profile API with source, library defaults, original-title instance default (m141) (46b4688)
  • language: generate checked-in ISO 639-2/3 mapping table (92ce101)
  • language: rewrite shared registry with canonical tags and aliases (29a1a14)
  • libraries: allow separate quality profiles per library (60a5e0f), closes #439
  • library: add background import for multi-file wizard (9eb7354)
  • library: add Change Match to rematch an already-added series/movie (#595) (ae61585)
  • library: add LibraryOperationLock for rename/scan mutual exclusion (072a3cc)
  • library: add NFO + poster/fanart sidecar files feature and manual sidecar file regeneration task (3f647c2)
  • library: background manual imports via library_jobs (#530) (ed467c7)
  • library: defer library scans while rename operations hold the operation lock (a9ad2bb)
  • library: per-import hardlink control in the manual import wizard (#584) (8d20f7d)
  • library: persist title search query in list URLs (#515) (f04ec7c)
  • library: record every wizard-driven manual import in activity history (d595ca0)
  • library: reorganize operations write rename history for crash-window healing (0de08b8)
  • library: repair restrictive media file permissions (issue #617) (fa9a946)
  • library: root-folder moves hold the library operation lock (683f2ce)
  • library: route bulk imports through durable jobs, add worker pool and Activity visibility (ad758cb)
  • library: scan diff heals externally-renamed folders via basename+size correlation (9cc020e)
  • library: scan diff heals renamed rows from rename_history instead of deleting (efcafcf)
  • library: series-directory context matching for TV files (6d82643)
  • library: sort and filter the TV library by missing episodes (#591) (e73773a)
  • link unmatched downloads via import wizard (8b93138), closes #605
  • livetv: add Cinephage Live provider (d63b49a)
  • livetv: add country filter to channel browser (a8dbee6)
  • livetv: configurable Stalker portal language; Unicode-aware channel matching (220f837)
  • livetv: make EPG sync responsive, observable, and configurable (ae41bef)
  • livetv: preserve XMLTV @lang with display-time selection (m140) (66ca882)
  • livetv: unwrap camouflaged DaddyLive HLS segments (71d640c)
  • media-server: detect the running product and unify API-key auth (4f8e983)
  • media-server: link Cinephage accounts to Jellyfin via Quick Connect (7ad4754)
  • media-server: normalized + raw language stats, deterministic multi-source enumeration (m140) (257a1d8)
  • metadata: language_settings drives TMDB locale/region; discover origin filter separated (f293eda)
  • metadata: language-tagged alternate titles from translations; AniList/MAL title variants persisted (8b60799)
  • metadata: persist original_language with lazy+task backfill; URLSearchParams; series-original episode fallback (336ac4a)
  • monitoring: add diagnostic Reports page with correlation tracing (6597fbe)
  • monitoring: add Import Failures tab to reports page (b463c3c)
  • monitoring: add Rejected Releases tab to reports page (41fa86d)
  • monitoring: add Renaming Failures tab to reports page (2366ec1)
  • naming: add preview cache and progressive streaming (09a826f)
  • naming: add Specials folder support for season 0 naming with scanner fixes (7785d36)
  • naming: batch folder reorganize holds the operation lock across all items (3028416)
  • naming: cap rename batches at 500 and reject renames during library scans (3a79b4a)
  • naming: hold operation lock during rename execution and folder reorganize (450647e)
  • naming: in-place renames carry stem-matched subtitle companions (7b3e371)
  • naming: two-step bulk rename confirmation with media-server warning and 500-item batching (65dcc87)
  • naming: whitespace-tolerant tokens, docs-name aliases, and :First first-letter spec (issue #497 stage A) (8c440ff)
  • notifications: enforce per-server event toggles, Deleted-for-old-path, pre-delete retry, move notifications (97f1be8)
  • profile: add avatar upload, theme preference, danger zone, and last-active tracking (9a67b70)
  • profiles: per-profile indexer allowlist (4e2a5ae)
  • qbittorrent: add sequential download option (4b6560d)
  • reports: add Resolve All bulk action to diagnostic report tabs (fab218b)
  • requests: delete decided requests, harden transitions, backfill tests (da0ada4)
  • requests: Seerr-style request system with quotas and notifications (64fd114)
  • scoring: add built-in Anime quality profile (#612) (d1cdddb)
  • search: surface audio, edition, version and language details in results (#586) (adf2c2d)
  • security: encrypt all third-party credentials at rest (schema 161) (e3fbd3d)
  • settings: expose minimum score and minimum improvement in quality profiles (#590) (23cd903)
  • settings: surface latest release and auto-update toggle on cinephage page (1e36e19)
  • streaming: audio-preference-driven source selection with compatible session reuse (94037f1)
  • streaming: default subtitle track from effective language requirements (35d8b98)
  • streaming: derive .strm quality from the probe instead of 1080p (623f28d)
  • streaming: honor empty-referer contract and wire refresh=1 for gateway sources (1a9fb52)
  • streaming: remuxable .strm entry points, DASH support, self-healing gateway identity (5473ad3), closes #469 #470 #471
  • subtitles: add Super Subtitles provider (e0f9814)
  • subtitles: atomic downloads, single history write, notify hook, rename-aware paths (dcf2fb8)
  • subtitles: effective subtitle requirements resolution (item overrides, cutoff rule, tri-state gate) (f7c6700)
  • subtitles: per-requirement acquisition, normalized scores, honest automation reporting (d2239ef)
  • subtitles: provider capabilities, settings UI, rate limiting, priority tiers (ba47e59)
  • subtitles: reconcile scanner, unambiguous association, unified path base, scan hooks (ca0e3fc)
  • subtitles: single requirement matcher with variant/accessibility truth table (3eaced2)
  • subtitles: v2 profile service + language settings as single default authority (32f2f1b)
  • system: add SQLite database backup feature (7fc0354)
  • ui+api: apply library language default to existing items (250f62a)
  • ui+api: per-requirement "Search now" from details pages (28f7266)
  • ui: apply the prefer-original-title instance default (0026422)
  • ui: bulk language profile assignment + override clearing on list pages (779aab2)
  • ui: consolidate language settings and profiles into Library Languages tab (6c1e519)
  • ui: inheritance UX — library defaults, per-item overrides, effective-profile display (f3b78ef)
  • ui: language profile + subtitle customization in add flows (ed27bc1)
  • ui: Languages & Localization settings hub (8c2df58)
  • ui: minimal v2 adaptation for language profiles, settings, and metadata overrides (db64412)
  • ui: minimum-score slider with plain-language help (c171076)
  • ui: per-item subtitle requirements editing on details pages (941d4d4)
  • ui: profile-delete impact preview (57939d0)
  • ui: requirement-aware subtitle badges and terminology pass (47c5985)
  • ui: series header aggregate subtitle badge (c83306d)
  • unmatched: add force-match UI and overhaul unmatched files page (77d9135)
  • unmatched: TMDB match suggestions, fix search pagination, fix table reload flicker (11eef50)
  • unraid: add ca_profile.xml at repo root for CA submission (7a1fcd8)
  • users: add user detail pages and self-service profiles (c115595)
  • users: import accounts from media server user directories (03e168d)
  • validation: subtitle requirements override schema for movies/series/episodes (b8d3f20)

Performance Improvements

  • auth: cache hot-path reads and stabilize the session cookie (1a0e6bb)
  • db: batch disk-scan writes in transactions and yield between chunks (1d8fb84)
  • db: run one-time VACUUM and enable incremental auto-vacuum on startup (4603050)
  • naming: chunk preview computation and cap execute concurrency (e16636a)
  • reconciliation: skip no-op DB writes on stable library, add storage_items file-id indexes (7b3c03f)

Reverts

  • cinephage: gateway request signing superseded by per-install API keys (848f18f)
  • Revert "fix(indexer): revert NoName Club indexer name to pass indexer file test" (9894e15)

BREAKING CHANGES

  • requires Node >= 22.17.

Don't miss a new Cinephage release

NewReleases is sending notifications on new releases.