v1.3.0 - qBittorrent 5.2, metadata integrity, dual-database search, Cloudflare-friendly uploads
🚀 Highlights
- qBittorrent 5.2 fully supported: connect with a qBittorrent API key (immune to login bans) or user/pass - 5.2 rewrote its login API and correct credentials were being read as failures. Both confirmed working in the field. (#192, #193)
- Metadata integrity: matching a series fired two concurrent syncs that could cross-wire issue records (issue 1 wearing issue 4's cover and synopsis). Now exactly one sync runs per match, the engine refuses overlapping syncs of the same series, and any data fetched by a stored provider id must prove it belongs to that exact issue before it can touch a record or cover. (#194)
- Library search fixed on BOTH databases: searching the issues browser crashed on every SQLite install, and series search was case-sensitive on PostgreSQL - lowercase queries found nothing. Both now behave identically on either database.
- Smarter interactive search: Prowlarr now gets a query ladder (zero-padded issue numbers, year-stripped forms, bare title) instead of one rigid term, so releases named "049 (2026)" or year-less tracker entries actually surface. Fallback finds are labeled "via broadened search".
- Manual uploads work through Cloudflare Tunnels: files are sliced into ~48MB chunks under Cloudflare's 100MB request cap and reassembled server-side with per-chunk integrity checks. Upload modal sizing and long-filename overflow fixed too.
- Big-library scans no longer freeze the UI: batched database writes, WAL checkpointing, and tuned scan concurrency keep the app responsive during large scans. (#183)
🛠️ More fixes and improvements
- Native .cb7 (7z) reading - no conversion needed for reading, Panels, or OPDS
- Auto-match sweep now writes a per-series audit trail to Job History
- Cover Art Source setting is respected when matching (archive-first users keep their local covers); custom covers can never be overwritten by a sync
- Series names keep their real punctuation (no more "Series: Name" losing its colon on match)
- Cover and font polish, actionable download-client error messages, dependency refresh (npm audit clean)
📦 Upgrading
Standard three-service compose: docker compose pull && docker compose down && docker compose up -d. SQLite and PostgreSQL profiles both covered. If you upload through a reverse proxy, see the new "Behind a reverse proxy or Cloudflare Tunnel?" section in the README.
Thanks to randrini, niddelicious, anacronismo, and lboyce for the reports and field testing that shaped this release.