The fake Sonarr sends season posters on request, generated per season. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Local test instances
Radarr, Sonarr and SABnzbd in containers (same versions as the author's setup), pre-wired together:
fixed dev API keys, root folders /media/movies and /media/tv, and SABnzbd registered as the
download client in both (categories radarr / sonarr).
dev/up.sh # start + configure (idempotent); needs docker/podman compose
go run ./cmd/arr-tui --config dev/config.json
docker compose -f dev/compose.yaml down # stop; state lives in dev/data (gitignored)
| Service | URL | Port |
|---|---|---|
| Radarr | http://127.0.0.1:17878 | 17878 |
| Sonarr | http://127.0.0.1:18989 | 18989 |
| SABnzbd | http://127.0.0.1:18080 | 18080 |
No indexers or Usenet servers are configured, so nothing actually downloads. To get something into the SABnzbd queue, upload any NZB:
curl -F name=@some.nzb -F cat=radarr \
"http://127.0.0.1:18080/api?mode=addfile&output=json&apikey=devsabnzbdapikey0000000000000000"
Metadata lookups (search) need internet access, since Radarr/Sonarr query their cloud metadata services.
To get an item into the Radarr (or Sonarr) queue as well, add a movie to Radarr, serve an NZB from the
host and push it as a release. Containers reach the host as host.containers.internal:
python3 -m http.server 19191 --bind 0.0.0.0 & # directory containing some.nzb
curl -H "X-Api-Key: devradarrapikey00000000000000000" -H 'Content-Type: application/json' \
-d '{"title":"The.Matrix.1999.1080p.BluRay.x264-DEV","downloadUrl":"http://host.containers.internal:19191/some.nzb","protocol":"usenet","publishDate":"2026-01-01T00:00:00Z"}' \
http://127.0.0.1:17878/api/v3/release/push
Interactive search without a real indexer
dev/fake-indexer.py is a tiny Newznab indexer that returns a fixed set of releases for "The Matrix (1999)"
and "Breaking Bad"; Radarr/Sonarr still do their own parsing and approve/reject decisions. Its NZBs are
dummies, so grabbed releases just sit in the SABnzbd queue.
python3 dev/fake-indexer.py & # listens on :19292
dev/add-indexer.sh # registers it in the dev Radarr and Sonarr
Add the movie / series to the dev instances first (e.g. from the TUI), then press i on it.
To test with a real indexer, add it in the dev Radarr/Sonarr web UI (Settings, Indexers) instead of pasting
credentials anywhere else.
Screenshots
dev/screenshots/take.sh makes the README screenshots from a fake, made-up library; see
screenshots/README.md.