Releases: nitrobass24/seedsync
Releases · nitrobass24/seedsync
v0.16.0
What's Changed
Added
- Sonarr/Radarr integration — Test connection buttons in Settings to verify Sonarr and Radarr API connectivity (#328, #362)
- Angular ESLint enforced in CI — All 17 lint rules at
errorwith--max-warnings 0; covers OnPush, a11y, type safety, and code style (#376-#382, #389-#392)
Fixed
- Mobile file list scrolling — Fixed items skipping during scroll on Android/iOS by correcting virtual scroll
itemSize(50→82) and switching to dynamic viewport height measurement via ResizeObserver (#370, #371, #396) - Log streaming memory — Stream log files line-by-line instead of
readlines()to avoid loading entire log into memory (#385) - Controller deadlock on exception — Use
withstatement on model lock to prevent deadlock when exception occurs during model update (#373, #384) - Integrations error leaking details — Strip internal exception details from Sonarr/Radarr error responses (#386)
Changed
- Accessibility — 55 template a11y violations fixed:
<div>/<a>click targets converted to<button>, keyboard navigation added, decorative images marked withalt="" aria-hidden="true"(#391) - OnPush change detection — All components now use
ChangeDetectionStrategy.OnPushwith Angular signals (#392) - Type safety — Replaced 50
no-explicit-anyviolations with proper types; addedModelFileJson,ConfigValue,OptionValueinterfaces (#390) - Dependency updates — Angular group (8 packages), follow-redirects, hono, vitest, ruff, pytest, pexpect, tblib, Docusaurus (#347-#368, #388)
Security
- npm audit fixes — Resolved high-severity vulnerabilities in Angular dependencies (#388)
Docker Pull
docker pull ghcr.io/nitrobass24/seedsync:0.16.0Full Changelog: v0.15.0...v0.16.0
v0.15.0
What's Changed
Added
- Virtual scrolling for large file lists — Improves performance when browsing directories with many files (#335)
- Size sorting in file list — New sort option to order files by size (#334)
- Log level dropdown — Replaced debug toggle with a full log level selector (DEBUG/INFO/WARNING/ERROR/CRITICAL) (#332)
Fixed
- Bulk delete crash — Fixed unbounded process spawning that caused crashes during bulk delete; scoped concurrency cap to delete operations and added move retry on failure (#338, #341)
- Infinite busy-loop in command process throttling — Fixed CPU spin in the controller process throttle logic
- Mobile viewport height — File list viewport no longer wastes 40px on small screens where the header row is hidden
- Bulk action error resilience — A single failed action no longer aborts the entire bulk operation pipeline
Changed
- Dependency updates — Angular group bump (9 packages), hono 4.12.7→4.12.12, @hono/node-server bump, jsdom 29.0.1→29.0.2, vitest 4.1.2→4.1.3, lodash 4.17.23→4.18.1, all deps to latest compatible versions (#326, #333, #336, #337, #343, #344, #345)
- Documentation — Moved recommended hard-link workflow from FAQ to a dedicated Usage section; fixed UI label consistency for "Delete from remote after download" (#340)
Docker Pull
docker pull ghcr.io/nitrobass24/seedsync:0.15.0Full Changelog: v0.14.4...v0.15.0
v0.14.4
What's Changed
Changed
- Pyright strict mode — Upgraded Pyright type checking from basic to strict mode across the entire Python codebase; added type stubs for bottle, pexpect, and tblib (#291, #316)
Fixed
- Extraction-move validation race — Extraction completion no longer spawns a staging move while validation is still running; the move is deferred to the validation completion path (#316)
- Directory size preservation in exclude filter —
_filter_childrennow preserves scanner-reported directory sizes instead of recomputing from filtered children, preventingremote_sizedivergence (#316)
Security
- Website dependency bumps — Fixed 4 vulnerabilities in website transitive dependencies: brace-expansion, path-to-regexp, picomatch, minimatch (#324)
- Pygments 2.20.0 — Bumped pygments to fix ReDoS vulnerability GHSA-5239-wwwm-4pmq (#325)
Docker Pull
docker pull ghcr.io/nitrobass24/seedsync:0.14.4Full Changelog: v0.14.3...v0.14.4
v0.14.3
What's Changed
Added
- Configurable remote Python path — New "Remote Python Path" setting lets users specify a custom Python binary on the remote server (e.g.
~/python3/bin/python3), solving issues on seedboxes wherepython3is not on the default PATH (#314, #315) - Startup config validation — SeedSync now validates required LFTP config fields on startup and shows clear error messages when
remote_address,remote_username,remote_path, orlocal_pathare missing (#310, #313)
Fixed
- scan_fs.py Python 3.5 compatibility — Remote scanner script now works on servers with Python 3.5+ by using
typing.List/Optionalinstead of modern type syntax (#314, #315) - Sshcp.copy() user@host format — Fixed
scpcommand construction to use the shared_remote_address()helper (#312) - Pre-existing code quality bugs — Fixed extraction retry counter, NotImplementedError base class, and process cleanup issues (#289, #312)
Changed
- uv for Python dependencies — Replaced pip + requirements.txt with uv and PEP 621 dependency groups; pinned uv versions in CI and Docker (#286, #311)
Docker Pull
docker pull ghcr.io/nitrobass24/seedsync:0.14.3Full Changelog: v0.14.2...v0.14.3
v0.14.2
What's Changed
Added
- Playwright E2E test suite — Replaced legacy Protractor tests with Playwright; 55 tests covering all pages, navigation, themes, and settings (#250)
- Pyright type checking enforced in CI — Completed Pyright phases 3 & 4, fixing 166 type errors to reach 0 errors in basic mode; Pyright check is now required in CI (#249)
Fixed
- ModelFile nullable size fields —
local_sizeandremote_sizeare now correctly typed asnumber | nullto match the Python backend JSON contract
Security
- Reject control characters in filenames — Decoded filenames containing control characters are now rejected to prevent corrupted file entries and queue command injection (#300)
- Redact sensitive credentials from API — SSH password and key passphrase are no longer exposed in API responses; set handler rejects the redacted sentinel value (#257)
Changed
- Angular dependency updates — Bumped Angular group to latest, jsdom to 29.0.1 (#307, #308)
- CI: actions/setup-python v6 — Bumped setup-python action from v5 to v6 (#306)
Removed
- Legacy Docker E2E infrastructure — Cleaned up Protractor Docker Compose files, test images, and fixture data
Docker Pull
docker pull ghcr.io/nitrobass24/seedsync:0.14.2Full Changelog: v0.14.1...v0.14.2
v0.14.1
What's Changed
Fixed
- Parser crash on long filenames — Chunk progress lines that wrap across PTY boundaries no longer crash the controller; unrecognized lines inside a job context are skipped with a warning (#290, #293)
- False download completion on parser error — Parser failures no longer trigger false "download completed" signals that left files stuck in staging at partial progress (#296)
- Progress tracking with .lftp temp naming — ActiveScanner now recognizes
.lftp-suffixed temp files in staging, fixing 0% progress display for single-file downloads when temp naming is enabled (#298) - Remote scanner compatibility — Fixed Python 3.8+ compatibility for
scan_fs.pywhich runs on remote seedbox servers
Changed
- PEP 621 pyproject.toml — Consolidated Python dependencies from Poetry format to PEP 621 with proper dependency groups (runtime, test, dev); removed dead dependencies (#287)
- Ruff linting and formatting — Added Ruff as Python linter/formatter with CI enforcement; applied auto-fixes across 99 files (#288)
- Pyright type checking — Added Pyright in basic mode with CI reporting; fixed 91 type errors across 26 modules (#292, #295)
- Python unit tests in CI — Python tests now run in CI alongside Angular tests (#287)
- Angular dependency updates — Bumped Angular group to 21.2.4, vitest to 4.1.0, jsdom to 29.0.0 (#282, #283, #284)
Docker Pull
docker pull ghcr.io/nitrobass24/seedsync:0.14.1Full Changelog: v0.14.0...v0.14.1
v0.14.0
What's Changed
Added
- Inline transfer verification — LFTP's
xfer:verifychecksums files during download, catching corruption in real-time; enabled by default (#242) - Post-download integrity checking — Optional validation step that compares local and remote checksums via SSH after download, with per-file Validate button and Validated/Corrupt status indicators (#125, #276)
- File list pair label column — File list shows which path pair each file belongs to (#156)
- Accessibility — All file action buttons converted to native
<button>elements (#241) - Comprehensive test coverage — 287 unit tests across Angular (Vitest) and Python (pytest) (#225)
Changed
- Alpine-only Docker image — Removed Debian variant; all images are now Alpine-based (~45 MB), multi-arch (amd64/arm64) (#231, #244)
- Multiprocessing fork to spawn — Fixes Python 3.12 deprecation warnings (#228)
- Verbose logging in web UI — Verbose LFTP logging setting exposed in Settings > Logging (#266)
- CI deduplication — Eliminated redundant amd64 Docker build; publish triggers now build, test, and push in a single job (#274)
Fixed
- Stopped download delete stuck — Deleting local files for a stopped download no longer leaves the UI spinner and ActiveScanner polling forever (#271, #272, #273)
- File descriptor leak on restart — Multiprocessing Event/Queue references released in
close_queues()to prevent FD exhaustion across restarts (#265) - Model rebuild log noise — Temporary model objects no longer emit "Adding file" log messages every controller loop iteration (#267)
Docker Pull
docker pull ghcr.io/nitrobass24/seedsync:0.14.0Full Changelog: v0.13.5...v0.14.0
v0.13.5
What's Changed
Fixed
- Exclude patterns use wrong LFTP flag — Changed
--exclude(regex) to--exclude-glob(glob) so patterns like*.nfowork correctly instead of being silently misinterpreted as regex (#271)
Changed
- LFTP queue command logging — Log LFTP queue commands at INFO level (previously DEBUG) for easier troubleshooting without enabling verbose mode
- CI workflow_dispatch support — Allow manual Docker image publishing via GitHub Actions workflow_dispatch trigger
Docker Pull
docker pull ghcr.io/nitrobass24/seedsync:0.13.5Full Changelog: v0.13.4...v0.13.5
v0.13.4
What's Changed
Fixed
- Exclude patterns not passed to LFTP — Exclude patterns were only filtering the UI display model but were never passed to LFTP's
mirrorcommand, causing all files to be downloaded regardless of configured exclusions (#259) - Parser crash on Unraid PTY line-wrap fragments — Unraid's Docker PTY handling wraps long LFTP progress lines, producing tail fragments that crashed the parser and stopped the container (#260)
- Parser error threshold too aggressive — Bumped consecutive status error threshold so persistent parse issues don't crash the app within seconds
- PTY width override on Unraid — Set
COLUMNS=10000in pexpect spawn environment to prevent Unraid from overriding PTY dimensions
Docker Pull
docker pull ghcr.io/nitrobass24/seedsync:0.13.4Full Changelog: v0.13.3...v0.13.4
v0.13.3
What's Changed
- chore(deps-dev): bump hono from 4.12.5 to 4.12.7 in /src/angular by @dependabot[bot] in #237
- chore(deps-dev): bump tar from 7.5.9 to 7.5.11 in /src/angular by @dependabot[bot] in #238
- Fix parser crash on unrecognized lftp status lines (#253) by @nitrobass24 in #258
Full Changelog: v0.13.2...v0.13.3