qBittorrent's add call answers `Ok.` and nothing else — no hash, no name, no duplicate signal — so arr derives the v1 infohash from the magnet or the `.torrent` bytes before the call and looks the torrent up by it. That also drops Transmission's numeric torrent id: the hash is the only identity now. The reaper needs "stopped because a share limit was reached", and qBittorrent's state field cannot tell that apart from a hand-paused torrent. So the ratio and idle counters are checked against the limits arr set, and a torrent stopped by a global limit reads as still seeding rather than being deleted. The WebUI needs a login, so `ARR_QBITTORRENT_USERNAME` and `ARR_QBITTORRENT_PASSWORD` join the env-only secrets; leaving both unset is valid for an instance that whitelists arr's subnet. Verified against qBittorrent 5 (WebAPI 2.15.1) in a container: it rejects `setShareLimits` without `shareLimitAction`, which 4.x ignores, so it is always sent. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
29 lines
995 B
Markdown
29 lines
995 B
Markdown
# arr
|
|
|
|
One service that replaces Radarr and Sonarr, and later Bazarr, for a single
|
|
household.
|
|
|
|
Five .NET services idle at 600-900 MB to run a loop with four steps in it:
|
|
decide what you want, find it, fetch it, put it where Jellyfin can read it.
|
|
Each has a configuration surface an order of magnitude larger than the subset
|
|
anyone uses, and none of them share a model.
|
|
|
|
This is that loop, once, in Rust.
|
|
|
|
- **Prowlarr** stays — it owns tracker auth, Cloudflare bypass and the indexer
|
|
definitions, and replacing it buys nothing.
|
|
- **qBittorrent** stays.
|
|
- **Jellyseerr** stays, talking to a thin Radarr-compatible shim.
|
|
|
|
## Status
|
|
|
|
Design complete, implementation not started. See `DESIGN.md` for the contract
|
|
and the issue tracker for the work.
|
|
|
|
## Documents
|
|
|
|
- `DESIGN.md` — the contract. Domain model, policy engine, sourcing, import,
|
|
crate layout, build order.
|
|
- `CLAUDE.md` — repository conventions, label taxonomy, and how an autonomous
|
|
driver session should sequence the work.
|