Settings reference
Everything is an environment variable with a working default. This page is generated from the Unraid template and .env.example on every deploy, so it cannot drift from the container.
Two vocabularies used below
The four *_ACTION settings take one of:
- replace
- Remove from queue and client, blocklist, search for a different release. The loop guard applies, so the same release title stops being re-searched after
LOOP_GUARD_LIMITblocklists. - discard
- Remove from queue and client, blocklist, keep whatever is already in the library, no new search.
- notify
- Leave it alone and report it. The log line names the setting that would auto-clear it.
The seven NOTIFY_* category settings take one of:
- immediate
- Batched within a cycle and sent at the end of it.
- daily, weekly, monthly
- Sent at
NOTIFY_DIGEST_HOURon the configured day. Categories sharing a slot are merged into one message. - none
- Never sent. Still logged.
Connections and cycle
| Setting | Default | What it does |
|---|---|---|
SONARR_URL | http://SERVER-IP:8989 | Sonarr base URL. Leave empty to disable Sonarr handling. Unraid: “Sonarr URL” |
SONARR_API_KEY | empty | Sonarr Settings > General > Security > API Key Unraid: “Sonarr API key” |
RADARR_URL | http://SERVER-IP:7878 | Radarr base URL. Leave empty to disable Radarr handling. Unraid: “Radarr URL” |
RADARR_API_KEY | empty | Radarr Settings > General > Security > API Key Unraid: “Radarr API key” |
SONARR_2_URL | http://SERVER-IP:8990 | Optional second Sonarr instance (e.g. anime). Leave empty if you have one Sonarr. For more instances add SONARR_3_URL etc. as extra variables. Unraid: “Sonarr 2 URL” |
SONARR_2_API_KEY | empty | API key for the second Sonarr instance. Unraid: “Sonarr 2 API key” |
SONARR_2_NAME | sonarr-2 | Label for the second Sonarr in logs and notifications, e.g. anime. Unraid: “Sonarr 2 name” |
INTERVAL_SECONDS | 300 | Seconds between queue checks. Unraid: “Cycle seconds” |
MIN_AGE_MINUTES | 5 | An item must be stuck at least this long before the janitor touches it (avoids racing an import that is actively being processed). |
LOOP_GUARD_LIMIT | 2 | Same junk release blocklisted this many times => stop searching for a replacement. |
ARCHIVE_ACTION | replace | Unextracted archive in a completed download: replace (remove, blocklist, search again), discard (remove, blocklist, no search), or notify (leave it, report it). Unraid: “Archive action” |
DANGEROUS_FILE_ACTION | replace | Dangerous or executable file in a download: replace, discard, or notify. Unraid: “Dangerous file action” |
SAMPLE_ACTION | notify | File flagged as a sample: replace, discard, or notify. Default notify because short-form shows trip the sample detector on real episodes. Unraid: “Sample action” |
NOT_UPGRADE_ACTION | discard | Download that is not an upgrade for the existing library file, or a single-episode file that would replace a multi-episode file: replace, discard, or notify. Unraid: “Not-an-upgrade action” |
FOLDER_MISMATCH_ACTION | import | Sonarr: episode numbers in the file name disagree with the release folder name (usually a parser quirk like 1x8_720.mkv). import uses Sonarr's own mapping when it covers exactly the grabbed episodes and the mismatch looks like a parser quirk (another season, or many episodes); a few same-season episodes is reported as a possible mislabel. Also takes replace, discard, or notify. Unraid: “Folder mismatch action” |
ORPHAN_ACTION | delete | Completed or failed download that no configured Sonarr/Radarr grabbed, e.g. a series deleted while it was downloading. delete removes it from the queue and the download client (no blocklist, no search); notify only reports it. Set notify if you add NZBs by hand and import them yourself. Unraid: “Orphan action” |
DRY_RUN | false | true = log intended actions without doing anything. Recommended for the first day. Unraid: “Dry run” |
PUID | 99 | User ID the service runs as; /state is chowned to it at start. Unraid: “PUID” |
PGID | 100 | Group ID the service runs as. Unraid: “PGID” |
RUN_ONCE | false | Optional one-cycle execution; waits for periodic reviews before exiting. |
stall watcher
| Setting | Default | What it does |
|---|---|---|
SABNZBD_URL | http://SERVER-IP:8080 | Optional. The stalled/dead-download watcher turns on only when both this and the API key are set. Unraid: “SABnzbd URL” |
SABNZBD_API_KEY | empty | SABnzbd Config > General > API Key Unraid: “SABnzbd API key” |
STALL_MINUTES | 45 | Head-of-queue slot making less than STALL_MIN_PROGRESS_MB of progress in STALL_MINUTES => remove + blocklist + replacement search via the arr that tracks it. |
STALL_MIN_PROGRESS_MB | 5 | |
STALL_MISSING_FRAC | 0.12 | Missing-article heuristics for actively downloading jobs only. These are configurable thresholds, not proof that PAR2 cannot repair a job. |
STALL_MISSING_TRIED_FRAC | 0.35 | |
STALL_MAX_ACTIONS_PER_CYCLE | 2 | Hard cap on stall/doomed removals per cycle — clears a wall of dead jobs one by one instead of guessing about items that never got bandwidth. |
leftover download folders
| Setting | Default | What it does |
|---|---|---|
LEFTOVER_DIRS | empty | Container paths whose children are job folders, e.g. /downloads/tv,/downloads/movies. Empty keeps the leftover sweep off. SABnzbd never deletes completed job folders and an arr only cleans up its own, so folders nobody references pile up. Unraid: “Leftover dirs” |
LEFTOVER_MIN_AGE_HOURS | 24 | A folder is a leftover only if neither it nor any file in it changed within this many hours. Unraid: “Leftover minimum age hours” |
LEFTOVER_HOURS | 6 | Hours between sweeps. |
LEFTOVER_ACTION | notify | notify (report each unreferenced old folder in the digest) or delete (remove it; needs the path mapped read-write). Only direct children of the leftover dirs, never symlinks. Unraid: “Leftover action” |
notifications
| Setting | Default | What it does |
|---|---|---|
NOTIFY_URL | empty | Optional webhook for digests: Discord/Slack webhook URL, ntfy topic URL, Gotify https://host/message, Apprise API notify URL, or your own endpoint. Empty = log only. Unraid: “Notify URL” |
NOTIFY_FORMAT | json | discord, slack, ntfy, gotify, apprise, or json. Unraid: “Notify format” |
NOTIFY_TOKEN | empty | Optional. Bearer token for ntfy/apprise/json, app token for gotify. Unraid: “Notify token” |
NOTIFY_EXTRA_JSON | empty | Optional JSON object merged into every payload (Discord username, Gotify priority, Apprise urls). For ntfy the fields become headers. Unraid: “Notify extra JSON” |
NOTIFY_ATTENTION | immediate | Items plungarr will not touch. immediate, daily, weekly, monthly, or none. Unraid: “Notify: attention” |
NOTIFY_ERRORS | immediate | API and cycle errors. immediate, daily, weekly, monthly, or none. Unraid: “Notify: errors” |
NOTIFY_ACTIONS | daily | Itemised list of everything plungarr did. immediate, daily, weekly, monthly, or none. Unraid: “Notify: actions” |
NOTIFY_PROBLEMS | daily | Chronic grab failures from the failure review. immediate, daily, weekly, monthly, or none. Unraid: “Notify: problems” |
NOTIFY_CORRUPTION | weekly | Suspect library files from the corruption sweep. immediate, daily, weekly, monthly, or none. Unraid: “Notify: corruption” |
NOTIFY_SUMMARY | none | Totals for the period with no per-item lines. daily, weekly, monthly, or none. Unraid: “Notify: summary” |
NOTIFY_HEARTBEAT | none | A 'plungarr alive' line even when nothing happened. daily, weekly, monthly, or none. Unraid: “Notify: heartbeat” |
NOTIFY_DIGEST_HOUR | 8 | Hour (0-23, container local time; set TZ) for daily, weekly, and monthly digests. Unraid: “Digest hour” |
NOTIFY_DIGEST_DAY | monday | Weekday for weekly digests. Unraid: “Digest weekday” |
NOTIFY_DIGEST_DAY_OF_MONTH | 1 | Day (1-28) for monthly digests. Unraid: “Digest day of month” |
NOTIFY_REMIND_DAYS | 7 | Re-send an attention item still unresolved after this many days. 0 = never. Unraid: “Reminder days” |
failure review
| Setting | Default | What it does |
|---|---|---|
FAIL_REVIEW_ENABLED | true | |
FAIL_REVIEW_HOURS | 6 | |
FAIL_REVIEW_WINDOW_HOURS | 48 | |
FAIL_REVIEW_FAIL_LIMIT | 3 | An episode/movie with this many failed grabs in the window (and no import since the last failure) gets a PROBLEM log line. Report-only, never acts. |
corruption review
| Setting | Default | What it does |
|---|---|---|
CORRUPT_SWEEP_ENABLED | true | |
CORRUPT_SWEEP_HOURS | 24 | Hours between sweeps (first sweep runs at startup). |
CORRUPT_STUB_MB | 20 | Small files and low estimated bitrates are inspection hints only. |
CORRUPT_MIN_KBPS | 150 | |
CORRUPT_ACT_EXTS | .mkv | Classifies missing-metadata reports by format. Never enables deletion. |
CORRUPT_REPORT_CLASSES | unreadable,stub,junk_readable | Comma-separated suspect classes to report. Add tiny_readable and/or scanner_blind for the full list. Each suspect is reported once. Unraid: “Corruption report classes” |
Unraid template only
| Setting | Default | What it does |
|---|---|---|
RADARR_2_URL | empty | Optional second Radarr instance (e.g. 4K). Leave empty if you have one Radarr. For more instances add RADARR_3_URL etc. as extra variables. Unraid: “Radarr 2 URL” |
RADARR_2_API_KEY | empty | API key for the second Radarr instance. Unraid: “Radarr 2 API key” |
RADARR_2_NAME | radarr-2 | Label for the second Radarr in logs and notifications, e.g. 4k. Unraid: “Radarr 2 name” |
TZ | empty | Container timezone for digest scheduling, e.g. Europe/London or America/New_York. Unraid: “Timezone” |
Unraid users see the same settings as form fields; the quoted “Unraid” name is the field label. Anything not in the template can be added in the container's Edit view with “Add another Path, Port, Variable”.