0.14.0 (2026-07-30)
Bug Fixes
- acquisition: make movie occupancy bucket-aware for multi-quality (989a580)
- activity: parse release group at write time instead of re-parsing titles (1608a4f)
- activity: resolve "Unknown" media titles in monitoring history (5ffa881)
- add missing required_formats to scoring_profiles CREATE TABLE (3ec7db4)
- build errors - button-in-button and deprecated svelte:component (da80920)
- captcha: improve Cloudflare challenge bypass reliability (4ac77c3)
- cascade failed queue cleanup when history is deleted (f600f3b)
- dashboard: improve stat cards with inline expand, storage icons, and resolve lint (00ed581)
- dashboard: prevent free space from being counted multiple times when root folders share a filesystem (dd53473)
- db: break circular dependency blocking isolated migration tests (dd11c3c)
- db: guard migration 119 against missing release_group column (7bfca13)
- disable chokidar symlink following to prevent CPU spike on NAS (6690f54)
- discover: decouple search-on-add from monitoring (7b9bf67)
- discover: keyword blocklist now filters dashboard sections and takes effect immediately (942c5c6)
- discover: prevent infinite /api/discover request loop in debug mode (df5955b)
- discover: use movie-specific descriptions for search and monitored toggles (ed622fb)
- downloads: capture downloads log domain and harden monitor grace handling (95b092b)
- downloads: forward release size in grab requests from detail pages (be594a9)
- downloads: harden vanished-download recovery from awaiting state (f6dbdce)
- downloads: integrate 'awaiting' recovery status and fix recovery test (1d7cb7d)
- downloads: sweep stalled torrents whose only queue rows are failed (053d19d)
- downloads: use API magnet for public trackers instead of torrent endpoints (a161bf8)
- format: differentiate 0 from null in formatBytes (3f7b733)
- grab: drop unused quality field and return proper error codes (902057b)
- grab: enforce size limits on manual grabs (0157601)
- grab: pass release.size to grabRelease in movie and tv detail pages (64d806c)
- import: add guard to
Import Extra Filesin file managment to warn and strip dangerous extensions from extra files list on save (3776dc0) - import: lock import method selection while import is in progress (cf11d67)
- import: populate naming tokens, preserve release groups, and resolve absolute episode numbers during import (4dc2def)
- import: preserve full episode range for multi-episode files during manual import (be82de5)
- import: use real library ID from import result for "View in Library" link during batch import of non tracked media (c8748c8)
- import: wire preferHardlink setting into manual importer and surface filesystem mismatch (77bbeac)
- indexers: add lightweight connectivity test for aggregate Prowlarr indexer (8c17340)
- indexers: add prowlarr XXX categories, fix open search behavior, and increase abort timeout (3837be6)
- indexers: complete prowlarr native search integration (50bdaa0)
- indexers: prevent partial updates from wiping config (4b87ef8), closes zod#5235
- indexers: refresh API key from connection before testing Prowlarr/Jackett indexers (1086ac4)
- indexers: require definitionId=prowlarr for badge and management lock (prowlarr integration) (c204831)
- indexers: skip DB cookie persist for ephemeral test indexer IDs (d53b83b)
- indexers: update BitSearch links to use the correct domain (f2168db)
- insights: remove unused InsightType import from resolver types (f62baf4)
- libraries: use invalidateAll instead of location.reload (9b25346)
- library: honor recycleEnabled in all movie-file delete paths (0c3b070)
- library: make listLibraries read-only; add reconcileAll (c3559c8)
- library: make root folder the single source of truth for default monitoring (3d56e3a)
- library: manual import now deletes source file after successful transfer (a9a8c00)
- library: resolve edit field collisions and update field title clarity (3ee57a5)
- library: set series type to anime on import and library scan (12d79ec)
- library: show all root folder options in multi-file import step 3 (67b8a46)
- library: show best file quality across multi-quality movies (b7afa42)
- library: surface reconcile delete failures and harden PATCH (afc67c7)
- lint errors - add {#each} keys and remove unused variable (3c0de27)
- lint: resolve formating issues (023021e)
- lint: resolve formatting issue in import page component (7c2587f)
- lint: resolve pre-existing format + svelte reactivity lint errors (b73262d)
- lint: resolve svelte lint errors in import components and file management page (61cb701)
- logging: log grab pipeline rejections at warn level (830af52)
- mediaServer: backfill episode tmdbId from parent series in provider (2103430)
- migrations: correct version numbers in migrations 108 and 109 (#414) (4434220)
- monitoring: add immediate feedback to scan and sync buttons (33c1a82)
- monitoring: detect and repair stale hasFile flags before missing content search (8c052df)
- monitoring: fix libraries-without-root-folder returning empty and add missing redundant-quality-tiers resolver (c11a979)
- monitoring: group untracked episodes insights by series name in insight modal (cb7f7ff)
- monitoring: promote history retention setting in storage & maintenance to a first-class settings card (592d20e)
- naming: add
collectionto the token picker (167e6f4) - naming: add warning and inline metadata refresh when {Collection} is missing in rename preview (8b6ffc8)
- naming: preserve {CleanTitle} behavior and correct OriginalTitle tests (454d21d)
- naming: use canonical rename route path (e26ca4b)
- naming: wire originalTitle into movie folder creation (0744cb3)
- parser: parse episode version suffix without separator (s01e01v2) (a79c9ce)
- parser: recognise fansub release groups in leading brackets (7b484ec)
- patch memory leak vectors found (9a89653)
- populate all MediaNamingInfo tokens at every naming call site (87616eb)
- profiles: persist
preventDowngradesin built-in profiles (26035cd) - profiles: prevent repeated grabs, reject unknown sizes when limits set, and default preventDowngrades to true (0a1d669)
- profiles: remove v114 dual-default scaffolding, restore single default (18f5588)
- quality: exclude unknown-resolution files from single-quality redundant set (04c7728)
- recover vanished downloads via client path reconstruction with auto-retry (fd64c5c)
- release: show old theatrical-only titles as Released after 3 years (095f66a)
- rename: complete safety overhaul — Radarr-parity architecture (3950943)
- rename: prevent root-folder sweep; carry only stem-matched companions (68c28a4)
- resolve CI lint and typecheck errors (30ebd77)
- resolve merge artifacts and correct Renovate config (984e14d)
- resolve storage-overhaul regressions — detail-page 500s, .strm naming, Jellyfin ghost-loop (b7023ef), closes jellyfin#16883
- resolve type error, svelte state warnings, and empty snippet in library and logs components (54712f3)
- resolve TypeScript error on LibraryBreakdownItem slug type mismatch (20398d8)
- root-folders: prevent root folder path validation self-overlap when editing (6f2403c)
- scan: prevent CPU lockout on NAS-backed Docker volumes during folder scan (d52592a)
- scripts: repair live test harness after YamlIndexer removal (caacc78)
- search: add result sort options for desktop view (d2be165)
- search: clear result cache when indexer enabled state changes (4e818d4)
- search: correct multi-quality bucket fill on add (8a6bc7e)
- search: fix multi-season pack search missing S01-S07 style releases (7759aeb)
- serach: respect enableAutomaticSearch flag in automatic search contexts (1b44eb1)
- server: add yield event loop in scan/match loops to keep app responsive under load (fb82c66)
- settings: remove max-w constraint so settings use full width like other pages (d4e65cc)
- settings: use server redirects for all settings landing pages (36691fb)
- smartlists: fetch all TMDB list pages using total_pages from API response (42c1bab)
- status: aggregate multi-quality movie files to best file and summed size (b43d3f3)
- stop retrying TMDB external ID lookup for deleted entries and hide headless mode toggle (#424) (42fd506)
- storage: address ReconciliationService code review findings (bad4b1e)
- storage: align attention and scan-status badges with codebase pattern (65a1b1b)
- storage: exclude series/season from untracked-by-cinephage count (8f9eb21)
- storage: extend rules to episodes + add undismiss endpoint (3c77831)
- storage: multi-quality-aware duplicate and cutoff insight rules (be0de31)
- storage: revert episode duplicate count in DuplicateItemsRule (f34b56c)
- storage: stop movies splitting into multiple storage_items rows (d07f392)
- subtitles: case-insensitive movie sidecar linking (0ff481c)
- subtitles: isolate per-file search failures and lock precedence (30c54a7)
- subtitles: validate movieFileId belongs to the movie (9e7cd79)
- tv: update TVDB series links to use slug-based URL format (3b1833d)
- typecheck: add missing rejectionType to MonitoringSearchService grabResult decls (9c76ed8)
- typecheck: correct pre-existing insert shapes + duplicate success key (504d7e7)
- ui: align BreakdownBar API with spec (f5f2716)
- ui: BreakdownBar valueFormatter prop for byte-valued charts (5cc246c)
- ui: make tasks tables fully responsive (7a0423b)
- ui: persist discover debug filter state, improve carousel arrow visibility, and align mobile action row (5e7c0d6)
- use TVDB dereferrer URLs for numeric series ID links (4547e37)
Features
- activity: add "remove from download client" option for failed downloads (8c6aa0f)
- activity: add the ability to recover download state from download client (6405b09)
- add {OriginalTitle} and {OriginalCleanTitle} naming tokens (e1b1211)
- add File Management settings with configurable import method (99e0527)
- add Real-Debrid and TorBox acquisition (a3e0e0f)
- api: add delay-profiles service module (30ccaf7)
- api: GET /api/storage/insights (f256603)
- api: POST /api/storage/insights/[id]/dismiss (577e6c5)
- api: POST /api/storage/reconcile + register InsightsService (24cf986)
- captcha: cap browsers, add native Cloudflare click solver, harden solving (8dea39a)
- dashboard: link storage card to storage maintenance page (6cd65a8)
- db: add subtitles.movie_file_id FK for per-file subtitles (v124) (ec62ca7)
- db: index subtitles.movie_file_id (v124) (8b6a3a7)
- deploy: add Unraid Community Apps template files (94e1fd8), closes #423
- discover: enrich discover media hero with video clips and backdrops (d2e6b82)
- downloads: log grab rejections under downloads log domain (57ed216)
- downloads: reliable stalled handling and configurable blocklist duration (0e86efd)
- downloads: sweep stalled orphan torrents not tracked in the queue (d306eca)
- duplicates: add duplicate detection system (eacdcd6)
- history: add history retention budgets with storage forecasts (1cca1a4)
- i18n: add page titles to settings pages and consolidate nav i18n keys (a70a87b)
- import: add file permissions control (preserve source / custom chmod) to file management (a1e6ded)
- import: add hardlink preference toggle to file management (07cefb4)
- import: add minimum free space check and delete empty folders after move to file management (cba34b2)
- import: add oprion to import extra files from download client (787903c)
- import: add recycle bin for replaced files to file management (77802ee)
- import: add symlink import mode to file managment (23b3119)
- import: add symlink option to manual import method selector (bc7e6f2)
- import: multi-select browser, bulk move/copy, strm fixes, and filter input (230e77a)
- indexers: add BT4G definition (RSS endpoint) (ec25f95)
- indexers: add DigitalCore definition (c79cd7c)
- indexers: add Magnetz definition (b61eb77)
- indexers: add Prowlarr aggregate endpoint mode (1ad2978)
- indexers: add seedpool definition (0b624be)
- indexers: add TheRARBG definition (835f72d)
- indexers: add TorrentGalaxy Clone definition (5f360b7)
- indexers: filter blocklisted releases from search results (afce928)
- indexers: migrate Jackett to native JSON search API with IMDB ID fix (#422) (2274bb5)
- indexers: migrate Prowlarr integration to native search API (e952ba5)
- insights: add /api/storage/insights/[id]/items endpoint (73cbd74)
- insights: add $lib/api/storage.ts with getInsightItems (fb1d012)
- insights: add broken-paths resolver (de2babe)
- insights: add duplicate-items resolver with pagination (75cd6c2)
- insights: add filename-duplicate insight rule (67c2850)
- insights: add health-issues resolver (8f23f6d)
- insights: add InsightDetailModal.svelte with paginated item list (99a6baa)
- insights: add InsightItem resolver types (8819117)
- insights: add missing-from-media-server resolver and finalize registry (f59dfc6)
- insights: add orphaned-files resolver (1ce911e)
- insights: add quality-below-cutoff resolver (fa910ed)
- insights: add resolver registry stub with getInsightItemResolver (05f001b)
- insights: add SSE stream for reactive storage updates (8b08540)
- insights: add unplayed resolver (7ce81f7)
- insights: add untracked-by-cinephage resolver (94c22f5)
- insights: wire InsightDetailModal into StorageDashboard widget (4f1d053)
- insights: wire modal into InsightsPanel and update InsightCard (524c3e8)
- libraries: extract LibraryEditModal from status page (8697cbf)
- libraries: show scan mode on library overview cards (b38423a)
- library: add "Search in Discover" shortcut on library empty search state (9e9bb89)
- library: add desired qualities picker to movie add flow (8d27b3a)
- library: add mixed-type library support (f187774)
- library: add per-library scan modes (99a1a46)
- library: apply UX improvements, contextual back button, and sidebar cleanup to TV series (b39e4ed)
- library: improve movie detail mobile UX with sticky action bar and layout refinements (211ae56)
- library: opt-in removal of unwanted quality tiers on desiredQualities change (15515c4)
- library: overhaul collection section on movie detail page (330a936)
- library: redesign movie detail header with improved layout and metadata (cdd2fbd)
- library: register library-reconcile scheduled task (06fcc7e)
- library: restore library scope on back navigation and show library name in back button (2148436)
- library: streamline movie detail sidebar by removing header duplicates and merging storage into details (1c869a4)
- library: surface hidden scan settings in interim UI (546577a)
- logs: add clear all logs button (fdfcd56)
- mediaServerStats: emit syncComplete and syncError events (e6045a2)
- naming: add collection assignment to movie detail page (a797752)
- naming: add path separator hint in movie/series folder format (5bbd7af)
- nav: add pin button to keep sidebar submenus open (128c360)
- patterns: add DB schema + migration v112 for pattern recognition (4786f7c)
- patterns: add pattern recognition settings UI (d192f2e)
- patterns: add PatternConfigService for config CRUD + compilation (0a6e740)
- patterns: add PatternRecognitionService core with TDD (f3fc0fb)
- patterns: consolidate EXCLUDED_FILE_PATTERNS into bonus defaults (2d88f94)
- per-item metadata language overrides with refreshed edit modal layout (476fde7)
- per-movie multi-quality support (closes #166) (4422df6)
- profiles: add prevent resolution downgrades option (6e7e8cb), closes hi#scoring
- quality: add DB scaffolding for quality profile system (7521dd6)
- quality: add delay profiles to Quality Settings and add media assignment (49f76aa)
- quality: add per-format AND/OR operator for required formats gate (5b0f73d)
- quality: add required formats gate with per-profile configuration and UI indicators (3c35781)
- resolution: add editable resolution categories (38d49ee)
- search: improve Interactive Search mobile and landscape UX (33113a8)
- settings: add Library group layout with 5 tabs (95ed26c)
- settings: add Monitoring group layout with 3 tabs (304eedd)
- settings: add shared settings shell layout with landing redirect (025ba1c)
- settings: consolidate sidebar to 5 settings groups (a592a6a)
- settings: move Cinephage from Integrations to System group (885d381)
- settings: move Cinephage page to System group (d759675)
- settings: move Library-group pages (libraries, root-folders, naming, quality, filters) (aceb65e)
- settings: move Monitoring-group pages (status, tasks, logs) (4f12831)
- storage: add /status/folders sub-route (55f6bb3)
- storage: add /status/insights sub-route (4857a22)
- storage: add /status/libraries sub-route (7c0f04c)
- storage: add BrokenPathsRule (8eb5ea3)
- storage: add client-side utils for storage components (3d9e6d9)
- storage: add DuplicateItemsRule (040a511)
- storage: add HealthIssuesRule (02688f3)
- storage: add insight domain types (833f436)
- storage: add InsightCard component (885416d)
- storage: add insights upsert helper (9da6bcb)
- storage: add InsightsPanel component (b1fdc4b)
- storage: add InsightsService skeleton (834701b)
- storage: add LibraryOverview component (9ac3bf4)
- storage: add MediaBreakdown component (eaaf423)
- storage: add MissingFromMediaServerRule (1a527e0)
- storage: add OrphanedFilesRule (8887a29)
- storage: add QualityBelowCutoffRule (e67904a)
- storage: add RootFolderOverview component (882afd3)
- storage: add shared storage-domain types (afa9d64)
- storage: add storage_items, storage_item_server_links, storage_insights schema (723303d)
- storage: add StorageDashboard container and components barrel (8d5e84f)
- storage: add StorageHero component (37523aa)
- storage: add StorageTile component (33c269a)
- storage: add UnplayedRule (b7c36fe)
- storage: add UntrackedByCinephageRule (a32e52b)
- storage: clickable charts deep-link to filtered media explorer (8af6b27)
- storage: dashboard charts + compact insights sidebar (3c8afc4)
- storage: emit reconcileComplete event from ReconciliationService (7706be6)
- storage: implement migration 105 - storage_items tables (0a41054)
- storage: implement ReconciliationService (edc0eb9)
- storage: load insights in status page server load (0b413f6)
- storage: pack dashboard with charts, lists, and disk bars (2c50f14)
- storage: persist total_space_bytes in RootFolderService.refreshFreeSpace (9a8eb3b)
- storage: redundant-quality-tiers insight + redundantFileIds helper (5156726)
- storage: register migration 105 and bump schema version to 105 (5017802)
- storage: register ReconciliationService in ServiceManager (bb4a02b)
- storage: rewrite status page to use StorageDashboard (d2b2e79)
- storage: rewrite StorageDashboard as tile-based overview (6e3749c)
- storage: simplify status page — remove modal handlers (cb6c271)
- streaming: serve mp4 sources as HLS VOD playlist with reachability probe (85e3099)
- subtitles: link discovered movie sidecars to their movie file (8e9b605)
- subtitles: per-file download and sync for multi-quality movies (32eeb3a)
- subtitles: per-file search with movieFileId-tagged results (586d699)
- ui: add Discord/GitHub links to logged in footer menu (ab78496)
- ui: add logo, version, and Discord/GitHub links to login and setup screens (a48c7e8)
- ui: enhance storage maintenance page UI (af9692b)
- ui: extract BreakdownBar primitive (30361e6)
Reverts
- remove wrongly-placed tabs and additions from Library settings (7c7e4ae)