Skip to content

Downloads & folder layout (Holly /mnt/user/downloads)

How the download clients and the arr stack share the downloads share on Holly, and the intended folder structure* so the share stays legible if browsed manually.

The flow

flowchart LR
    P[Prowlarr<br/>indexers] --> R[Radarr / Sonarr]
    R -->|torrents| Q[qBittorrent]
    R -->|usenet| N[NZBGet]
    Q --> C[/downloads/complete/...]
    N --> C
    C -->|import: move/hardlink| M[/mnt/user/Media]
    R -.->|manages import| C

A grab goes to qBittorrent (torrent) or NZBGet (usenet); on completion it lands under downloads/complete/<category>/; Radarr/Sonarr import it into /mnt/user/Media (move or hardlink) for indexing. The copy left in downloads/ is staging — safe to remove once imported and (for torrents) no longer seeding.

Intended structure

/mnt/user/downloads/
├── incomplete/          # in-progress (qBittorrent temp + NZBGet InterDir) - never import from here
├── complete/            # finished, awaiting/after *arr import
│   ├── movies/          # Radarr category
│   ├── tv/              # Sonarr category
│   └── music/           # (if used)
└── watch/               # .nzb / .torrent drop dir

Who owns which path

App Setting Value
qBittorrent Default Save Path /downloads/complete (container path)
qBittorrent Incomplete dir /downloads/incomplete
qBittorrent Category radarr / sonarr save-path /downloads/complete/movies / /tv
NZBGet MainDir /downloads
NZBGet InterDir /downloads/incomplete
NZBGet Category Movies / TV DestDir /downloads/complete/movies / /tv
Radarr/Sonarr Download client + "Remove Completed" on (imports then lets the client clean up post-seed)

Container /downloads == host /mnt/user/downloads (the linuxserver bind mount). The qbittorrent/nzbget MCP servers apply this map so a host path can be looked up directly.

Cleanup of the current mess

The share currently has loose top-level release folders (e.g. Interstellar 2014 2160p…) outside the category tree — old/manual grabs or items still seeding. Do not bulk-delete. Per item, cross-reference with the MCPs before touching:

  • qbittorrent: find_torrent_by_path "<name>"SEEDING - do not delete vs COMPLETE_STOPPED.
  • nzbget: find_download "<name>" → whether NZBGet still tracks it.
  • Confirm the title exists under /mnt/user/Media (imported) before removing the staging copy.

Only items that are imported into Media and not seeding are safe to remove; the rest either finish seeding first or get relocated into the category tree.

Live snapshot (2026-07-06, via the MCPs)

  • qBittorrent: 56 torrents, all 56 actively seeding (47 tv-sonarr, 9 radarr); seed ratios median 2.60, max 83.93. All 56 sit at the top level of /downloads (tracker-named www.UIndex.org - … folders / loose release dirs) — none use a complete/<category>/ save-path. That is the whole "mess": not junk, but unorganised seeding data.
  • NZBGet: queue 0, history 0 — the usenet side is clean; it contributes nothing.
  • Nothing is safe to delete right now (everything is seeding). Reclaim path:
  • Set a qBittorrent seeding limit (e.g. ratio 2.0 or 14 days → stop) so torrents auto-complete; enable Radarr/Sonarr "Remove Completed" so they clean up post-seed.
  • Configure category save-paths (tv-sonarr → /downloads/complete/tv, radarr → /downloads/complete/movies) so future grabs self-organise. Existing seeding torrents are left in place (moving them breaks seeding); they migrate naturally as they finish and are re-grabbed.
  • Flag: a torrent named Scream 7 (2026) [1080p] [WEBRip] [5.1].exe is seeding — a video file with an .exe extension is a classic fake/malware pattern; recommend removing it (with data) via delete_torrent.