All apps · 0 apps
auditorr
Docker app from thrill-burn's Repository
Overview
An audit tool for hardlinked media libraries using qBittorrent / qui + Sonarr / Radarr.
A dashboard with health score, per-tracker analytics, and cross-seed effectiveness tells you what's wrong with your library. Five automated workflows fix it.
- Health score (0-100) showing how clean and efficient your library is
- Five workflows: Backfill (re-seed orphaned media via Sonarr/Radarr search), Cleanup (reviewed delete script for orphaned torrent files), Triage (explains every problem torrent — dead seeds, unregistered, superseded, pending imports — with rescan/exclude/delete actions), Dedupe (replace duplicate copies with verified hardlinks), Trumped (paste a tracker trump PM to swap the whole cross-seed group for its replacement)
- Upload analytics and library yield: daily upload volume per tracker, yield % over time, multi-tracker comparison charts
- Cross-seeding insights: weighted average seed multiplier, segmented disk bar, per-tracker breakdown
- Powerful file explorer with tree and flat views, filterable by status, tracker, seed count, size, filename
- File-level change log between every audit, kept indefinitely
- Sonarr/Radarr integration and a guided first-run setup wizard
Follows the TRaSH Guides folder structure. Read-only and non-destructive by default — all delete actions are opt-in, reviewed, and confirmed.
Readme
View on GitHubauditorr
An audit tool for hardlinked media libraries using qBittorrent / qui + Sonarr / Radarr. A dashboard with health score, per-tracker analytics, and cross-seed effectiveness tells you what's wrong with your library. Five automated workflows fix it.
Configuration · Remote access · Troubleshooting
What's new in 1.7.2
- Rounds - a new page that tells you which workflows your library needs right now, which to do first, and keeps score with useless prizes.
- Force import - Triage can now replace a same-quality file Sonarr / Radarr refuses to upgrade, using their own Import Anyway.
- Health score weighting - split the 100 points however you like, or stop scoring a category entirely. For setups that delete torrents once seeding is done.
- External URLs - a separate browser-facing address per service, for reverse proxies. Blank means "same as before".
Upgrading from 1.7.0 or earlier? 1.7.1 closed off-LAN API access by default - LAN is unaffected.
What's new in 1.7.0
- Optimized for large libraries - backend memory optimizations, tested on libraries up to 500 TB.
- Four new workflows - Backfill is now joined by Cleanup, Triage, Dedupe, and Trumped, so every dashboard problem has a fix.
- A rebuilt UI - a top-to-bottom design pass with consistent buttons and spacing, and a calmer library-health dial.
Workflows
The dashboard tells you what's wrong; workflows fix it. Rounds tells you which one to open.
Rounds
Every workflow in one ranked list, in a fixed order you walk again and again: Baseline you clear once and then watch, Ongoing never has a last item, On demand waits for a tracker to ask. Each row states what it would cost you to ignore it. Underneath sits a shelf of useless prizes — about 500 named tiers and 87 one-off feats, in the spirit of Progress Quest, awarded for work you were going to do anyway and never taken back.
Backfill
Targets orphaned media: files on disk with no hardlink to a seeding torrent and no way to grow one (trumped, dead tracker, your own rip). Search the same title on the tracker you want, grab a version that actually seeds, and swap it in via Sonarr / Radarr.
Cleanup
Targets orphaned torrent files: files in your torrent folder the client has no torrent for. Review them grouped by release folder, then generate a reviewed delete script — or exclude the ones you put there on purpose.
Triage
Explains every problem torrent and what to do about it: dead seeds, dead registrations, unregistered, superseded quality, pending imports, and not in library. Trigger a Sonarr/Radarr rescan, exclude, or delete torrents and their files directly through qBittorrent / qui.
Dedupe
Targets duplicate files: review duplicate groups and generate a script that
replaces copies with hardlinks, verified with cmp before linking.
Trumped
Automates the private-tracker trump swap. Paste the tracker's "this release has been trumped" PM; auditorr parses the old and new release names, finds the entire hardlink group (every cross-seed of the old content), removes it from the client with its files, and grabs the exact replacement through Sonarr/Radarr — wizard-style, confirmed at every step.
Install
Unraid
auditorr is on Unraid Community Apps — search for auditorr in the
Apps tab and install in one click.
- WebUI:
http://[IP]:[PORT:8677]/ - Appdata:
/mnt/user/appdata/auditorr/data→/app/data - Data:
/mnt/user/data→/data(read-only)
Docker Compose
services:
auditorr:
image: ghcr.io/thrill-burn/auditorr:latest
container_name: auditorr
restart: unless-stopped
ports:
- "8677:8677"
volumes:
- ./data:/app/data
- /path/to/media:/data/media:ro
- /path/to/torrents:/data/torrents:ro
Build from source
git clone https://github.com/thrill-burn/auditorr.git
cd auditorr
docker build -t auditorr .
docker run -d \
--name auditorr \
-p 8677:8677 \
-v /path/to/appdata:/app/data \
-v /path/to/media:/data/media:ro \
-v /path/to/torrents:/data/torrents:ro \
auditorr
Something not working? See Troubleshooting.
[!IMPORTANT] The Hardlinked Media score assumes you use hardlinks between your torrent folder and your media library — the TRaSH Guides folder structure. Without hardlinks, this score is 0 regardless of how healthy the rest of your library is.
License
MIT — see LICENSE.
Install Auditorr on Unraid in a few clicks.
Find Auditorr in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.
Categories
Related apps
Explore more like this
Explore allDetails
ghcr.io/thrill-burn/auditorr:latestRuntime arguments
- Web UI
http://[IP]:[PORT:8677]/- Network
bridge- Shell
sh- Privileged
- false
Template configuration
Container Port: 8677 — auditorr web interface
- Target
- 8677
- Default
- 8677
- Value
- 8677
Container Path: /app/data — config, audit history, SQLite database. Persistent app state lives here.
- Target
- /app/data
- Default
- /mnt/user/appdata/auditorr/data
- Value
- /mnt/user/appdata/auditorr/data
Container Path: /data — your unified TRaSH-style media + torrents share (the parent of /data/media and /data/torrents). auditorr mounts this read-only by design.
- Target
- /data
- Default
- /mnt/user/data
- Value
- /mnt/user/data
Container Variable: AUDITORR_PORT — port the app listens on inside the container. Must match the WebUI Container Port above.
- Default
- 8677
- Value
- 8677
Container Variable: AUDITORR_SECRET — optional access key. Left blank, auditorr serves local clients only (loopback + private LAN ranges) and refuses non-local requests, so a port-forwarded instance is not open to the internet. Set a long random value to allow remote access and require the key from every client (sent as the X-Auditorr-Secret header; the web UI prompts for it).
Container Variable: AUDITORR_TRUSTED_NETWORKS — optional comma-separated CIDRs treated as local in addition to loopback and private ranges, e.g. 100.64.0.0/10 for Tailscale.
Container Variable: AUDITORR_REQUIRE_AUTH — optional strict mode (true): require the access key even from local clients. With no AUDITORR_SECRET set this refuses all API access until one is configured.








