plungarr

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_LIMIT blocklists.
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_HOUR on the configured day. Categories sharing a slot are merged into one message.
none
Never sent. Still logged.

Connections and cycle

SettingDefaultWhat it does
SONARR_URLhttp://SERVER-IP:8989Sonarr base URL. Leave empty to disable Sonarr handling. Unraid: “Sonarr URL”
SONARR_API_KEYemptySonarr Settings > General > Security > API Key Unraid: “Sonarr API key”
RADARR_URLhttp://SERVER-IP:7878Radarr base URL. Leave empty to disable Radarr handling. Unraid: “Radarr URL”
RADARR_API_KEYemptyRadarr Settings > General > Security > API Key Unraid: “Radarr API key”
SONARR_2_URLhttp://SERVER-IP:8990Optional 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_KEYemptyAPI key for the second Sonarr instance. Unraid: “Sonarr 2 API key”
SONARR_2_NAMEsonarr-2Label for the second Sonarr in logs and notifications, e.g. anime. Unraid: “Sonarr 2 name”
INTERVAL_SECONDS300Seconds between queue checks. Unraid: “Cycle seconds”
MIN_AGE_MINUTES5An item must be stuck at least this long before the janitor touches it (avoids racing an import that is actively being processed).
LOOP_GUARD_LIMIT2Same junk release blocklisted this many times => stop searching for a replacement.
ARCHIVE_ACTIONreplaceUnextracted 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_ACTIONreplaceDangerous or executable file in a download: replace, discard, or notify. Unraid: “Dangerous file action”
SAMPLE_ACTIONnotifyFile 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_ACTIONdiscardDownload 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_ACTIONimportSonarr: 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_ACTIONdeleteCompleted 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_RUNfalsetrue = log intended actions without doing anything. Recommended for the first day. Unraid: “Dry run”
PUID99User ID the service runs as; /state is chowned to it at start. Unraid: “PUID”
PGID100Group ID the service runs as. Unraid: “PGID”
RUN_ONCEfalseOptional one-cycle execution; waits for periodic reviews before exiting.

stall watcher

SettingDefaultWhat it does
SABNZBD_URLhttp://SERVER-IP:8080Optional. The stalled/dead-download watcher turns on only when both this and the API key are set. Unraid: “SABnzbd URL”
SABNZBD_API_KEYemptySABnzbd Config > General > API Key Unraid: “SABnzbd API key”
STALL_MINUTES45Head-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_MB5
STALL_MISSING_FRAC0.12Missing-article heuristics for actively downloading jobs only. These are configurable thresholds, not proof that PAR2 cannot repair a job.
STALL_MISSING_TRIED_FRAC0.35
STALL_MAX_ACTIONS_PER_CYCLE2Hard 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

SettingDefaultWhat it does
LEFTOVER_DIRSemptyContainer 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_HOURS24A folder is a leftover only if neither it nor any file in it changed within this many hours. Unraid: “Leftover minimum age hours”
LEFTOVER_HOURS6Hours between sweeps.
LEFTOVER_ACTIONnotifynotify (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

SettingDefaultWhat it does
NOTIFY_URLemptyOptional 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_FORMATjsondiscord, slack, ntfy, gotify, apprise, or json. Unraid: “Notify format”
NOTIFY_TOKENemptyOptional. Bearer token for ntfy/apprise/json, app token for gotify. Unraid: “Notify token”
NOTIFY_EXTRA_JSONemptyOptional JSON object merged into every payload (Discord username, Gotify priority, Apprise urls). For ntfy the fields become headers. Unraid: “Notify extra JSON”
NOTIFY_ATTENTIONimmediateItems plungarr will not touch. immediate, daily, weekly, monthly, or none. Unraid: “Notify: attention”
NOTIFY_ERRORSimmediateAPI and cycle errors. immediate, daily, weekly, monthly, or none. Unraid: “Notify: errors”
NOTIFY_ACTIONSdailyItemised list of everything plungarr did. immediate, daily, weekly, monthly, or none. Unraid: “Notify: actions”
NOTIFY_PROBLEMSdailyChronic grab failures from the failure review. immediate, daily, weekly, monthly, or none. Unraid: “Notify: problems”
NOTIFY_CORRUPTIONweeklySuspect library files from the corruption sweep. immediate, daily, weekly, monthly, or none. Unraid: “Notify: corruption”
NOTIFY_SUMMARYnoneTotals for the period with no per-item lines. daily, weekly, monthly, or none. Unraid: “Notify: summary”
NOTIFY_HEARTBEATnoneA 'plungarr alive' line even when nothing happened. daily, weekly, monthly, or none. Unraid: “Notify: heartbeat”
NOTIFY_DIGEST_HOUR8Hour (0-23, container local time; set TZ) for daily, weekly, and monthly digests. Unraid: “Digest hour”
NOTIFY_DIGEST_DAYmondayWeekday for weekly digests. Unraid: “Digest weekday”
NOTIFY_DIGEST_DAY_OF_MONTH1Day (1-28) for monthly digests. Unraid: “Digest day of month”
NOTIFY_REMIND_DAYS7Re-send an attention item still unresolved after this many days. 0 = never. Unraid: “Reminder days”

failure review

SettingDefaultWhat it does
FAIL_REVIEW_ENABLEDtrue
FAIL_REVIEW_HOURS6
FAIL_REVIEW_WINDOW_HOURS48
FAIL_REVIEW_FAIL_LIMIT3An 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

SettingDefaultWhat it does
CORRUPT_SWEEP_ENABLEDtrue
CORRUPT_SWEEP_HOURS24Hours between sweeps (first sweep runs at startup).
CORRUPT_STUB_MB20Small files and low estimated bitrates are inspection hints only.
CORRUPT_MIN_KBPS150
CORRUPT_ACT_EXTS.mkvClassifies missing-metadata reports by format. Never enables deletion.
CORRUPT_REPORT_CLASSESunreadable,stub,junk_readableComma-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

SettingDefaultWhat it does
RADARR_2_URLemptyOptional 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_KEYemptyAPI key for the second Radarr instance. Unraid: “Radarr 2 API key”
RADARR_2_NAMEradarr-2Label for the second Radarr in logs and notifications, e.g. 4k. Unraid: “Radarr 2 name”
TZemptyContainer 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”.