Releases
v0.17.0
Compare
Sorry, something went wrong.
No results found
0.17.0 (2026-09-10)
Bug Fixes
api: stat files before serving and update main API key fallback to use correct permission set for verification (e751cd2 )
build: pre-compile paraglide before vite build (8ed4fc0 )
captcha: passive-first two-phase solving and browser-context binary downloads (40de989 ), closes #228
cinephage: preserve release version prefix (fca6dad )
CI: resolve typecheck errors (5adc591 )
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 )
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 )
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
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: stalled progress timeout, blocked extensions and search cache (6f93b43 )
downloads: prevent duplicate torrent tracking (4b3779d )
filesystem: cache root folder paths to prevent event-loop freeze on large directories (#495 ) (14e5ddd )
filters: let manual grabs override size validation (df959a0 )
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 )
indexers: add kinozal.me mirror to Kinozal indexer definitions (49caba2 )
indexers: ID-first matching, context-aware parsing and scoring hardening (df92741 ), closes Sonarr#7372
indexers: pure language boost, drop dead enhanced-path boost and seeder leak (1a96e57 )
indexers: return first movie variant results instead of timing out (a72340c )
integrations: add explicit update schemas to prevent Zod v4 default injection (30cbccf )
integrations: review fixes for PR #484 debrid preflight (9dcb321 )
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: 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: 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: 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: 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: restore episode file links after series refresh rebuilds episodes (6bcdbbd )
library: series detail back link restores filtered list state (#515 ) (782fdc4 )
library: stop double-resolving returnTo back links on detail pages (SSR 500) (0c89db9 )
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 )
license: restore canonical GPL-3.0 text for GitHub/Unraid CA detection (11762e6 )
lint: resolve pre-existing ESLint errors from updated rule set (9f0306a )
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 )
mediaServerStats: resolve Plex episodes to their parent series TMDB ID (0edff04 ), closes #500
metadata: guard against TMDB placeholder titles and honor series language in manual refresh (3f15a00 ), closes #509
monitoring: resolve default scoring profile for null-profile upgrade contexts (#492 ) (f39c792 )
monitoring: resolve log freeze and add capture-level persistence (fd5a5ec )
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: 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: 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: 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 )
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 )
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 )
resolve correlationIds in diagnostic reports to actual log record (98c7510 )
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: preserve Date columns in configuration backup round-trip (3ddb61c ), closes #513
storage: multi-episode files no longer flagged missing from media server (#481 ) (06b5b8a )
streaming: add CORS preflight and cheap HEAD probes to session entry routes (7894946 )
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
unmatched: clear file selection when switching view mode on Unmatched Files page (6b1e4b3 )
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
Features
activity: distinct importing status for finished transfers awaiting import (13e75af ), closes #501
add partially monitored indicator for TV series (#514 ) (3d4d383 )
api: add local library file streaming api endpoints (ac6ee11 )
i18n: add parameterized library_backTo message (#515 ) (8c55ddb )
indexers: add native Hungarian tracker definitions (43413dd )
indexers: add NoNaMe Club and fix Kinozal cartoon categories (115f22a )
indexers: rutracker dub-studio title normalization (kinozal parity) (7639b10 )
indexers: session cookie store, browser cookie injection, search & alternate-title improvements (fa2b6ef )
libraries: allow separate quality profiles per library (60a5e0f ), closes #439
library: add LibraryOperationLock for rename/scan mutual exclusion (072a3cc )
library: defer library scans while rename operations hold the operation lock (a9ad2bb )
library: persist title search query in list URLs (#515 ) (f04ec7c )
library: reorganize operations write rename history for crash-window healing (0de08b8 )
library: root-folder moves hold the library operation lock (683f2ce )
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 )
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 )
qbittorrent: add sequential download option (4b6560d )
reports: add Resolve All bulk action to diagnostic report tabs (fab218b )
settings: surface latest release and auto-update toggle on cinephage page (1e36e19 )
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 )
system: add SQLite database backup feature (7fc0354 )
unmatched: add force-match UI and overhaul unmatched files page (77d9135 )
unraid: add ca_profile.xml at repo root for CA submission (7a1fcd8 )
Performance Improvements
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 )
You can’t perform that action at this time.