Skip to content

Releases: nitrobass24/seedsync

v0.16.0

22 Apr 17:17
75c4562

Choose a tag to compare

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 error with --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 with statement 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 with alt="" aria-hidden="true" (#391)
  • OnPush change detection — All components now use ChangeDetectionStrategy.OnPush with Angular signals (#392)
  • Type safety — Replaced 50 no-explicit-any violations with proper types; added ModelFileJson, ConfigValue, OptionValue interfaces (#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.0

Full Changelog: v0.15.0...v0.16.0

v0.15.0

08 Apr 15:08
8af5868

Choose a tag to compare

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.0

Full Changelog: v0.14.4...v0.15.0

v0.14.4

30 Mar 23:27

Choose a tag to compare

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_children now preserves scanner-reported directory sizes instead of recomputing from filtered children, preventing remote_size divergence (#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.4

Full Changelog: v0.14.3...v0.14.4

v0.14.3

25 Mar 16:08

Choose a tag to compare

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 where python3 is 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, or local_path are 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/Optional instead of modern type syntax (#314, #315)
  • Sshcp.copy() user@host format — Fixed scp command 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.3

Full Changelog: v0.14.2...v0.14.3

v0.14.2

24 Mar 01:14
1fa5dee

Choose a tag to compare

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 fieldslocal_size and remote_size are now correctly typed as number | null to 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.2

Full Changelog: v0.14.1...v0.14.2

v0.14.1

18 Mar 20:42
f96e41d

Choose a tag to compare

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.py which 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.1

Full Changelog: v0.14.0...v0.14.1

v0.14.0

14 Mar 06:36
6b45b21

Choose a tag to compare

What's Changed

Added

  • Inline transfer verification — LFTP's xfer:verify checksums 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.0

Full Changelog: v0.13.5...v0.14.0

v0.13.5

13 Mar 02:09

Choose a tag to compare

What's Changed

Fixed

  • Exclude patterns use wrong LFTP flag — Changed --exclude (regex) to --exclude-glob (glob) so patterns like *.nfo work 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.5

Full Changelog: v0.13.4...v0.13.5

v0.13.4

12 Mar 20:36

Choose a tag to compare

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 mirror command, 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=10000 in pexpect spawn environment to prevent Unraid from overriding PTY dimensions

Docker Pull

docker pull ghcr.io/nitrobass24/seedsync:0.13.4

Full Changelog: v0.13.3...v0.13.4

v0.13.3

12 Mar 13:52

Choose a tag to compare

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