Application Configuration
This is where to learn what each config item is, the default values for each item, and the name to use in an environment variable. Expand the blue sections to see excerpts from the example docker-compose.yml and example config files.
Config
- Setting a log file is strongly recommended. This makes it much easier to troubleshoot problems.
- To use a config file in Docker, mount
/configto the container and Unpackerr will write a config file.- Update the new file at
/config/unpackerr.confand restart the container.
- Update the new file at
- When using a config file you must uncomment at minimum the
[[header]]ex.[[radarr]],urlandapi_key. - Uncomment means remove the hash
#at the beginning of the line. - The config file format is TOML.
- Indentation is not important like YAML files, but it's used for ease of readability.
- You may use
"or'or'''or"""to wrap strings. Recommend'for paths.
Generator
Notifiarr hosts a configuration file maker. Simply fill in a web form, and click a button to get a working config file.
- Access the generator here: https://notifiarr.com/unpackerr
Two+ Instances
When adding a second (or third+) instance to the config file, you just
add another [[header]] ex. [[sonarr]] and the
url/api_key/etc under it. When adding a second instance to the environment
variables, you must increment the 0 to a 1. And to a 2 if you have 3
instances. There is no limit to the number of supported instances. This notation
works for all Starr apps, folders, command hooks, and webhooks.
Config examples with multiple instances.
- Config File example with two Radarrs and two Folders.
[[radarr]]
url = "http://radarr"
api_key = "32characters"
[[radarr]]
url = "http://radarr4k"
api_key = "32morecharacters"
[[folder]]
path = "/data/downloads/software/"
[[folder]]
path = "/data/downloads/games/"
- Environment Variable example with two Radarrs and two Folders setting the same values as above.
UN_RADARR_0_URL=http://radarr
UN_RADARR_0_API_KEY=32characters
UN_RADARR_1_URL=http://radarr4k
UN_RADARR_1_API_KEY=32morecharacters
UN_FOLDER_0_PATH=/data/downloads/software/
UN_FOLDER_1_PATH=/data/downloads/games/
Anything that has a header
with double brackets [[..]] can be repeated as many times as you'd like.
Global Settings
Examples. Prefix: UN_
- Using the config file:
#######################################################
## Unpackerr Example Configuration File ##
#######################################################
## The values are a mix of defaults and examples. ##
## Env vars overlay the process, not this file. ##
## More configuration help: https://unpackerr.zip ##
## Config Generator: https://notifiarr.com/unpackerr ##
#######################################################
## Turn on debug messages in the output. Do not wrap this in quotes.
## Recommend trying this so you know what it looks like. I personally leave it on.
debug = false
## Disable writing messages to stdout/stderr. This silences the app. Set a log
## file below if you set this to true. Recommended when starting with systemctl.
quiet = false
## Send error output to stderr instead of stdout by setting error_stderr to true.
## Recommend leaving this at false. Ignored if quiet (above) is true.
error_stderr = false
## Setting activity to true will silence all app queue log lines with only zeros.
## Set this to true when you want less log spam.
activity = false
## The Starr-application activity queue is logged on an interval.
## Adjust that interval with this setting.
## Default is a minute. 2m, 5m, 10m, 30m, 1h are also perfectly acceptable.
log_queues = "1m"
## Write messages to a log file. This is the same data that is normally output to stdout.
## This setting is great for Docker users that want to export their logs to a file.
## The alternative is to use syslog to log the output of the application to a file.
## Default is no log file; this is unset.
## Except on macOS and Windows, the log file gets set to "~/.unpackerr/unpackerr.log"
## log_files=0 turns off auto-rotation so logrotate can own the file.
## After logrotate renames the live file, send SIGHUP (`systemctl reload unpackerr`)
## to close and reopen it. Use logrotate `create` plus postrotate HUP, not copytruncate.
## Default files is 10 and size(mb) is 10 Megabytes.
log_file = '/downloads/unpackerr.log'
log_files = 10
log_file_mb = 10
log_file_mode = "0600"
## How many completed or failed items to keep in unpackerr.history.jsonl
## (next to the log file, or the config file if logs go to stdout).
## With neither a log file nor a config file, history stays in memory
## for this process and is not written to disk, so it does not survive
## a restart. Set `log_file` or use a config file to persist it.
## In-progress extracts are also written so a restart can resume them
## for 72 hours (Starr waiting for import, folders waiting on
## delete_after). Those in-progress rows do not count against this
## number. Imported and failed rows do. The history API still lists
## only completed or failed rows.
## `0` disables history and restart resume.
keep_history = 400
## How often to poll starr apps (sonarr, radarr, etc).
## Recommend 1m-5m. Uses Go Duration.
interval = "2m"
## How often status is logged for in-progress extractions.
## `0` uses the default `15s`. Uses Go Duration.
progress = "15s"
## How long an item must be queued (download complete) before extraction will start.
## One minute is the historic default and works well. Set higher if your downloads
## take longer to finalize (or transfer locally). Uses Go Duration.
start_delay = "1m"
## How long to wait before removing the history for a failed extraction.
## Once the history is deleted the item will be recognized as new and
## extraction will start again. Uses Go Duration.
retry_delay = "5m"
## How many times to retry a failed extraction after the first try. Default is 2
## (3 attempts total). `0` uses that default. Pauses retry_delay between attempts.
max_retries = 2
## Applies to Starr apps and to watched folders with `move_back` enabled
## (the default folder config extracts into a sidecar tree and does not
## classify leftovers there). When an extracted file cannot be moved into
## place because the destination already exists, Unpackerr checks whether
## that name was present before extraction. Names that arrived with the
## download are kept; names that were not (leftovers from an interrupted
## extraction) are handled by this setting. `rename` (default) moves the
## leftover to a sibling named with a `.remnant` suffix and retries the
## extract. `delete` removes it and retries. `off` leaves the leftover
## in place and fails the extract without retrying. The item stays failed
## until it leaves the Starr queue (folders are untracked). Bounded by
## max_retries; if retries are exhausted the leftover fails the extract
## instead of reporting success.
remnant_action = "rename"
## How many files may be extracted in parallel. 1 works fine.
## Do not wrap the number in quotes. Raise this only if you have fast disks and CPU.
parallel = 1
## Use these configurations to control the file modes used for newly extracted
## files and folders. Recommend 0644/0755 or 0666/0777.
file_mode = "0644"
dir_mode = "0755"
## List of passwords to use for encrypted archives. Must be a list of strings.
## Use this special format as a password to read more passwords from a file:
## passwords = [ "filepath:/path/to/passwords.txt" ]
passwords = []
- Using environment variables:
## Global Settings
UN_DEBUG=false
UN_QUIET=false
UN_ERROR_STDERR=false
UN_ACTIVITY=false
UN_LOG_QUEUES=1m
UN_LOG_FILE=/downloads/unpackerr.log
UN_LOG_FILES=10
UN_LOG_FILE_MB=10
UN_LOG_FILE_MODE=0600
UN_KEEP_HISTORY=400
UN_INTERVAL=2m
UN_PROGRESS=15s
UN_START_DELAY=1m
UN_RETRY_DELAY=5m
UN_MAX_RETRIES=2
UN_REMNANT_ACTION=rename
UN_PARALLEL=1
UN_FILE_MODE=0644
UN_DIR_MODE=0755
These values must exist at the top of the config file.
If you put them anywhere else they may be attached to a [header] inadvertently.
When using environment variables, you can simply omit the ones you don't set or change from default.
| Config Name | Variable Name | Default / Note |
|---|---|---|
| debug | UN_DEBUG | false / Turns on more logs. |
| quiet | UN_QUIET | false / Do not print logs to stdout or stderr. |
| error_stderr | UN_ERROR_STDERR | false / Print ERROR lines to stderr instead of stdout. |
| activity | UN_ACTIVITY | false / Setting true will print only queue counts with activity. |
| log_queues | UN_LOG_QUEUES | "1m" / How often to print internal counters. Uses Go Duration. |
| log_file | UN_LOG_FILE | No Default / Provide optional file path to write logs |
| log_files | UN_LOG_FILES | 10 / Log files to keep after rotating. 0 disables rotation |
| log_file_mb | UN_LOG_FILE_MB | 10 / Max size of log files in megabytes |
| log_file_mode | UN_LOG_FILE_MODE | "0600" / POSIX mode used for new log files; not for Windows |
| keep_history | UN_KEEP_HISTORY | 400 / Completed items kept in the history file and API. |
| interval | UN_INTERVAL | "2m" / How often apps are polled, recommend 1m to 5m. |
| progress | UN_PROGRESS | "15s" / How often status is logged for in-progress extractions. |
| start_delay | UN_START_DELAY | "1m" / Files are queued at least this long before extraction. |
| retry_delay | UN_RETRY_DELAY | "5m" / Failed extractions are retried after at least this long. |
| max_retries | UN_MAX_RETRIES | 2 / How many times to retry a failed extraction. 0 uses this default. |
| remnant_action | UN_REMNANT_ACTION | "rename" / How to handle files that blocked extraction but were not in the download. |
| parallel | UN_PARALLEL | 1 / Concurrent extractions, only recommend 1 |
| file_mode | UN_FILE_MODE | "0644" / Extracted files are written with this mode. |
| dir_mode | UN_DIR_MODE | "0755" / Extracted folders are written with this mode |
| passwords | UN_PASSWORD_0 | [] / List of passwords to use for encrypted archives. |
Secrets and Passwords
If a wrong password is provided, the entire archive must
be read before we know it's a bad password.
Providing many passwords here can drastically slow down
extractions and cause extra disk IO. You may also specify
a password file by providing a "password" in this format: filepath:/path/to/passwords.txt.
The file must contain 1 password per line.
You may store any string parameter (except time intervals) into a separate file
by setting the value to filepath:/path/to/file.txt. In other words, if you want
your Radarr API key to be read from a separate file, instead of storing it directly
in the config file or environment variables you can do this:
[[radarr]]
url = "https://some.url/radarr"
api_key = "filepath:/etc/secrets/radarr.txt"
Or if using environment variables:
UN_RADARR_0_API_KEY=filepath:/etc/secrets/radarr.txt
Then store the API key (and only the API key) in /etc/secrets/radarr.txt.
This feature was added in Unpackerr v0.14.0.
Web Server
Examples. Prefix: UN_WEBSERVER_, Header: [webserver]
- Using the config file:
[webserver]
## Expose Prometheus metrics at /metrics. The HTTP server starts whenever listen_addr is set;
## this only controls the /metrics route. Scrapes must send an API key with
## system:metrics:read via Authorization: Bearer or X-Api-Key.
metrics = false
## Expose Go pprof handlers at /debug/pprof/. Leave this false unless you
## are debugging the running process.
pprof = false
## This may be set to a port or an ip:port to bind a specific IP. 0.0.0.0 binds ALL IPs.
## Set this to an empty string to disable the HTTP server.
listen_addr = "0.0.0.0:5656"
## Local UI login. Use user:pass (hashed on startup), !!cryptd!!user:$2a$...
## for a stored hash, webauth:X-Webauth-User for a reverse-proxy header, or
## noauth. The HTTP API does not accept plaintext; send user:<PBKDF2 hex>
## (same digest as login) and uiCurrentKdf when changing a live password.
## filepath:/path reads that file for the live password and keeps filepath: in the
## config. Empty generates a temporary password when the HTTP server is enabled.
## Reset with --reset. Do not set an empty
## UN_WEBSERVER_UI_PASSWORD; a present empty env value wipes a stored hash.
ui_password = ""
## Used with webauth (proxy header auth). Empty keeps those proxy users
## as admin. Ignored for noauth and local password login. Set this to a
## header the reverse proxy fills, for example X-Webauth-Role or
## X-Authentik-Groups. Matching names are a built-in admin or a custom
## [webserver.roles] name. Comma, semicolon, pipe, or space separated
## lists are unioned; extra IdP groups are ignored. A selected header
## that is missing, empty, or has no matching role is access denied,
## not admin.
## example: ui_role_header = "X-Webauth-Role"
ui_role_header = ""
## Recommend setting a log file for HTTP requests. Otherwise, they go with other logs.
log_file = ''
## This app automatically rotates logs. Set these to the size and number to keep.
## log_files=0 disables auto-rotation; SIGHUP reopens the HTTP log too.
log_files = 10
log_file_mb = 10
## Set both of these to valid file paths to enable HTTPS/TLS.
ssl_cert_file = ''
ssl_key_file = ''
## Base URL from which to serve content.
urlbase = "/"
## Upstreams should be set to the IP or CIDR of your trusted upstream proxy.
## Setting this correctly allows X-Forwarded-For to be used in logs.
## In the future it may control auth proxy trust. Must be a list of strings.
## example: upstreams = [ "127.0.0.1/32", "10.1.2.0/24" ]
upstreams = []
## Empty keeps the library same-origin check (the embedded UI). Add hosts
## when a browser on another origin should open GET /ws, for example
## localhost:5173 or https://ui.example.com. Patterns use path.Match;
## a URI scheme is matched as scheme://host. Do not set * unless you
## intend to allow every origin.
## example: ws_origins = [ "localhost:5173" ]
ws_origins = []
## Nested [[webserver.api_keys]] tables, not an inline array. Each key is 60–150 ASCII
## characters. Names and key values must be unique. Built-in role `admin` grants every
## permission. Custom roles are listed under [webserver.roles].
## Env uses UN_WEBSERVER_API_KEYS_0_NAME, _KEY, and _ROLES_0.
## Nested [webserver.roles.<name>] tables. Names are letters, digits, _ or -.
## Built-in admin cannot be redefined. `*` is reserved for that built-in role.
## Each custom role needs at least one known permission.
## File browser is system:browse:read (list) and system:browse:write (create folder).
## Env works but is picky: do not set UN_WEBSERVER_ROLES itself. Role names are
## case-sensitive and may contain underscores. Index permissions from 0:
## UN_WEBSERVER_ROLES_stats_PERMISSIONS_0=system:stats:read
## UN_WEBSERVER_ROLES_read_only_PERMISSIONS_0=system:stats:read
## [webserver.roles.stats]
## permissions = ["system:stats:read"]
- Using environment variables:
## Web Server
UN_WEBSERVER_METRICS=false
UN_WEBSERVER_PPROF=false
UN_WEBSERVER_LISTEN_ADDR=0.0.0.0:5656
UN_WEBSERVER_UI_PASSWORD=
UN_WEBSERVER_UI_ROLE_HEADER=
UN_WEBSERVER_LOG_FILE=
UN_WEBSERVER_LOG_FILES=10
UN_WEBSERVER_LOG_FILE_MB=10
UN_WEBSERVER_SSL_CERT_FILE=
UN_WEBSERVER_SSL_KEY_FILE=
UN_WEBSERVER_URLBASE=/
UN_WEBSERVER_UPSTREAMS=
UN_WEBSERVER_WS_ORIGINS=
The HTTP server listens whenever listen_addr is set (default 0.0.0.0:5656).
Set listen_addr = "" to turn it off. metrics = true exposes Prometheus
metrics at /metrics for Grafana.
The web server was added in v0.12.0.
| Config Name | Variable Name | Default / Note |
|---|---|---|
| metrics | UN_WEBSERVER_METRICS | false / Enable the Prometheus metrics endpoint. |
| pprof | UN_WEBSERVER_PPROF | false / Enable Go pprof debug endpoints at /debug/pprof/. |
| listen_addr | UN_WEBSERVER_LISTEN_ADDR | "0.0.0.0:5656" / ip:port to listen on; empty string disables the HTTP server. |
| ui_password | UN_WEBSERVER_UI_PASSWORD | No Default / Web UI password (user:pass, hashed, proxy header, or noauth). |
| ui_role_header | UN_WEBSERVER_UI_ROLE_HEADER | No Default / Optional proxy header whose value is an Unpackerr role name. |
| log_file | UN_WEBSERVER_LOG_FILE | No Default / Provide optional file path to write HTTP logs. |
| log_files | UN_WEBSERVER_LOG_FILES | 10 / Log files to keep after rotating. 0 disables rotation |
| log_file_mb | UN_WEBSERVER_LOG_FILE_MB | 10 / Max size of HTTP log files in megabytes |
| ssl_cert_file | UN_WEBSERVER_SSL_CERT_FILE | No Default / Path to SSL cert file to serve HTTPS. |
| ssl_key_file | UN_WEBSERVER_SSL_KEY_FILE | No Default / Path to SSL key file to serve HTTPS. |
| urlbase | UN_WEBSERVER_URLBASE | "/" / Base URL path to serve HTTP content. |
| upstreams | UN_WEBSERVER_UPSTREAMS | [] / List of upstream proxy CIDRs or IPs to trust. |
| ws_origins | UN_WEBSERVER_WS_ORIGINS | [] / Extra WebSocket Origin hosts allowed besides same-origin. |
| api_keys | UN_WEBSERVER_API_KEYS_0_* | [] / Named API keys assigned to roles. |
| roles | UN_WEBSERVER_ROLES_*_PERMISSIONS_0 | No Default / Custom roles mapped to permission names. |
Folder Settings
Examples. Prefix: UN_FOLDERS_, Header: [folders]
- Using the config file:
## Global Folder configuration that affects all watched folders.
[folders]
## How many new folder events can be immediately queued. Don't change this.
buffer = 20000
- Using environment variables:
## Folder Settings
UN_FOLDERS_BUFFER=20000
| Config Name | Variable Name | Default / Note |
|---|---|---|
| buffer | UN_FOLDERS_BUFFER | 20000 / How many new folder events can be immediately queued. |
Sonarr Settings
Examples. Prefix: UN_SONARR_, Header: [sonarr.0]
- Using the config file:
[sonarr.0]
## Empty uses the app name (Sonarr, Radarr, and so on). Set this for a
## Sonarr-compatible app such as Sportarr so logs and Discord are not
## tagged Sonarr. Add Whisparr as a Radarr instance with name = "Whisparr".
## Hook exclude matches this name or the app dialect.
## Names must be printable and cannot contain quotes, braces, or angle brackets.
name = ""
url = "http://127.0.0.1:8989"
api_key = "0123456789abcdef0123456789abcdef"
## Username for HTTP basic authentication on the Starr app, if enabled.
http_user = ""
## Password for HTTP basic authentication on the Starr app, if enabled.
http_pass = ""
## Username for Starr native (forms) authentication, if enabled.
username = ""
## Password for Starr native (forms) authentication, if enabled.
password = ""
## List of paths where content is downloaded for this app.
## Used as fallback if the path the Starr app reports does not exist or is not accessible.
paths = ['/downloads']
## Protocols to process from the download queue. Starr apps historically
## used "torrent" and "usenet" as the protocol strings, but newer versions
## emit the full class names "TorrentDownloadProtocol" and
## "UsenetDownloadProtocol" instead. List every string your app may return,
## separated by commas. The default covers both the legacy and new torrent
## strings. Add "usenet,UsenetDownloadProtocol" if you use a Usenet client.
protocols = "torrent,TorrentDownloadProtocol"
## How long to wait for a reply from the backend.
timeout = "10s"
## How long to wait after import before deleting the extracted items.
delete_delay = "5m"
## If you use this app with NZB you may wish to delete archives after extraction.
## General recommendation is: do not enable this for torrent use.
## Setting this to true deletes the entire original download folder after import.
delete_orig = false
## If you use Syncthing, setting this to true will make unpackerr wait for syncs to finish.
syncthing = false
## When true, Unpackerr verifies the Starr app HTTPS certificate.
## The default is false for backward compatibility.
valid_ssl = false
## Per-archive uncompressed-byte cap. Empty uses the app default:
## Sonarr 20GB, Radarr 75GB, Lidarr 4GB, Readarr 1GB.
## `0` or `0B` disables the cap for this instance.
max_bytes = ""
- Using environment variables:
## Sonarr Settings
UN_SONARR_0_NAME=
UN_SONARR_0_URL=http://sonarr:8989
UN_SONARR_0_API_KEY=0123456789abcdef0123456789abcdef
UN_SONARR_0_HTTP_USER=
UN_SONARR_0_HTTP_PASS=
UN_SONARR_0_USERNAME=
UN_SONARR_0_PASSWORD=
UN_SONARR_0_PATHS_0=/downloads
UN_SONARR_0_PROTOCOLS=torrent,TorrentDownloadProtocol
UN_SONARR_0_TIMEOUT=10s
UN_SONARR_0_DELETE_DELAY=5m
UN_SONARR_0_DELETE_ORIG=false
UN_SONARR_0_SYNCTHING=false
UN_SONARR_0_VALID_SSL=false
UN_SONARR_0_MAX_BYTES=
| Config Name | Variable Name | Default / Note |
|---|---|---|
| name | UN_SONARR_0_NAME | No Default / Optional label for logs, webhooks, and the dashboard. |
| url | UN_SONARR_0_URL | No Default / URL where this starr app can be accessed. |
| api_key | UN_SONARR_0_API_KEY | No Default / Provide URL and API key if you use this app. |
| http_user | UN_SONARR_0_HTTP_USER | No Default / Optional HTTP basic-auth username. |
| http_pass | UN_SONARR_0_HTTP_PASS | No Default / Optional HTTP basic-auth password. |
| username | UN_SONARR_0_USERNAME | No Default / Optional native-auth username. |
| password | UN_SONARR_0_PASSWORD | No Default / Optional native-auth password. |
| paths | UN_SONARR_0_PATHS_0 | ["/downloads"] / File system path where downloaded items are located. |
| protocols | UN_SONARR_0_PROTOCOLS | "torrent,TorrentDownloadProtocol" / Protocols to process. Newer Starr apps use class-name strings. |
| timeout | UN_SONARR_0_TIMEOUT | "10s" / How long to wait for the app to respond. |
| delete_delay | UN_SONARR_0_DELETE_DELAY | "5m" / Extracts are deleted this long after import, -1s to disable. |
| delete_orig | UN_SONARR_0_DELETE_ORIG | false / Delete archives after import? Recommend keeping this false. |
| syncthing | UN_SONARR_0_SYNCTHING | false / Setting this to true makes unpackerr wait for syncthing to finish. |
| valid_ssl | UN_SONARR_0_VALID_SSL | false / Verify the Starr app TLS certificate. |
| max_bytes | UN_SONARR_0_MAX_BYTES | No Default / Per-archive byte cap. Empty uses the app default. 0 is unlimited. |
Radarr Settings
Examples. Prefix: UN_RADARR_, Header: [radarr.0]
- Using the config file:
[radarr.0]
## Empty uses the app name (Sonarr, Radarr, and so on). Set this for a
## Sonarr-compatible app such as Sportarr so logs and Discord are not
## tagged Sonarr. Add Whisparr as a Radarr instance with name = "Whisparr".
## Hook exclude matches this name or the app dialect.
## Names must be printable and cannot contain quotes, braces, or angle brackets.
name = ""
url = "http://127.0.0.1:7878"
api_key = "0123456789abcdef0123456789abcdef"
## Username for HTTP basic authentication on the Starr app, if enabled.
http_user = ""
## Password for HTTP basic authentication on the Starr app, if enabled.
http_pass = ""
## Username for Starr native (forms) authentication, if enabled.
username = ""
## Password for Starr native (forms) authentication, if enabled.
password = ""
## List of paths where content is downloaded for this app.
## Used as fallback if the path the Starr app reports does not exist or is not accessible.
paths = ['/downloads']
## Protocols to process from the download queue. Starr apps historically
## used "torrent" and "usenet" as the protocol strings, but newer versions
## emit the full class names "TorrentDownloadProtocol" and
## "UsenetDownloadProtocol" instead. List every string your app may return,
## separated by commas. The default covers both the legacy and new torrent
## strings. Add "usenet,UsenetDownloadProtocol" if you use a Usenet client.
protocols = "torrent,TorrentDownloadProtocol"
## How long to wait for a reply from the backend.
timeout = "10s"
## How long to wait after import before deleting the extracted items.
delete_delay = "5m"
## If you use this app with NZB you may wish to delete archives after extraction.
## General recommendation is: do not enable this for torrent use.
## Setting this to true deletes the entire original download folder after import.
delete_orig = false
## If you use Syncthing, setting this to true will make unpackerr wait for syncs to finish.
syncthing = false
## When true, Unpackerr verifies the Starr app HTTPS certificate.
## The default is false for backward compatibility.
valid_ssl = false
## Per-archive uncompressed-byte cap. Empty uses the app default:
## Sonarr 20GB, Radarr 75GB, Lidarr 4GB, Readarr 1GB.
## `0` or `0B` disables the cap for this instance.
max_bytes = ""
- Using environment variables:
## Radarr Settings
UN_RADARR_0_NAME=
UN_RADARR_0_URL=http://radarr:7878
UN_RADARR_0_API_KEY=0123456789abcdef0123456789abcdef
UN_RADARR_0_HTTP_USER=
UN_RADARR_0_HTTP_PASS=
UN_RADARR_0_USERNAME=
UN_RADARR_0_PASSWORD=
UN_RADARR_0_PATHS_0=/downloads
UN_RADARR_0_PROTOCOLS=torrent,TorrentDownloadProtocol
UN_RADARR_0_TIMEOUT=10s
UN_RADARR_0_DELETE_DELAY=5m
UN_RADARR_0_DELETE_ORIG=false
UN_RADARR_0_SYNCTHING=false
UN_RADARR_0_VALID_SSL=false
UN_RADARR_0_MAX_BYTES=
| Config Name | Variable Name | Default / Note |
|---|---|---|
| name | UN_RADARR_0_NAME | No Default / Optional label for logs, webhooks, and the dashboard. |
| url | UN_RADARR_0_URL | No Default / URL where this starr app can be accessed. |
| api_key | UN_RADARR_0_API_KEY | No Default / Provide URL and API key if you use this app. |
| http_user | UN_RADARR_0_HTTP_USER | No Default / Optional HTTP basic-auth username. |
| http_pass | UN_RADARR_0_HTTP_PASS | No Default / Optional HTTP basic-auth password. |
| username | UN_RADARR_0_USERNAME | No Default / Optional native-auth username. |
| password | UN_RADARR_0_PASSWORD | No Default / Optional native-auth password. |
| paths | UN_RADARR_0_PATHS_0 | ["/downloads"] / File system path where downloaded items are located. |
| protocols | UN_RADARR_0_PROTOCOLS | "torrent,TorrentDownloadProtocol" / Protocols to process. Newer Starr apps use class-name strings. |
| timeout | UN_RADARR_0_TIMEOUT | "10s" / How long to wait for the app to respond. |
| delete_delay | UN_RADARR_0_DELETE_DELAY | "5m" / Extracts are deleted this long after import, -1s to disable. |
| delete_orig | UN_RADARR_0_DELETE_ORIG | false / Delete archives after import? Recommend keeping this false. |
| syncthing | UN_RADARR_0_SYNCTHING | false / Setting this to true makes unpackerr wait for syncthing to finish. |
| valid_ssl | UN_RADARR_0_VALID_SSL | false / Verify the Starr app TLS certificate. |
| max_bytes | UN_RADARR_0_MAX_BYTES | No Default / Per-archive byte cap. Empty uses the app default. 0 is unlimited. |
Lidarr Settings
Examples. Prefix: UN_LIDARR_, Header: [lidarr.0]
- Using the config file:
[lidarr.0]
## Empty uses the app name (Sonarr, Radarr, and so on). Set this for a
## Sonarr-compatible app such as Sportarr so logs and Discord are not
## tagged Sonarr. Add Whisparr as a Radarr instance with name = "Whisparr".
## Hook exclude matches this name or the app dialect.
## Names must be printable and cannot contain quotes, braces, or angle brackets.
name = ""
url = "http://127.0.0.1:8686"
api_key = "0123456789abcdef0123456789abcdef"
## Username for HTTP basic authentication on the Starr app, if enabled.
http_user = ""
## Password for HTTP basic authentication on the Starr app, if enabled.
http_pass = ""
## Username for Starr native (forms) authentication, if enabled.
username = ""
## Password for Starr native (forms) authentication, if enabled.
password = ""
## List of paths where content is downloaded for this app.
## Used as fallback if the path the Starr app reports does not exist or is not accessible.
paths = ['/downloads']
## Protocols to process from the download queue. Starr apps historically
## used "torrent" and "usenet" as the protocol strings, but newer versions
## emit the full class names "TorrentDownloadProtocol" and
## "UsenetDownloadProtocol" instead. List every string your app may return,
## separated by commas. The default covers both the legacy and new torrent
## strings. Add "usenet,UsenetDownloadProtocol" if you use a Usenet client.
protocols = "torrent,TorrentDownloadProtocol"
## How long to wait for a reply from the backend.
timeout = "10s"
## How long to wait after import before deleting the extracted items.
delete_delay = "5m"
## If you use this app with NZB you may wish to delete archives after extraction.
## General recommendation is: do not enable this for torrent use.
## Setting this to true deletes the entire original download folder after import.
delete_orig = false
## If you use Syncthing, setting this to true will make unpackerr wait for syncs to finish.
syncthing = false
## When true, Unpackerr verifies the Starr app HTTPS certificate.
## The default is false for backward compatibility.
valid_ssl = false
## Per-archive uncompressed-byte cap. Empty uses the app default:
## Sonarr 20GB, Radarr 75GB, Lidarr 4GB, Readarr 1GB.
## `0` or `0B` disables the cap for this instance.
max_bytes = ""
## When enabled, FLAC and APE files with CUE sheets are split into
## individual track files. ape_format and ape_compression choose what
## an APE image becomes.
split_flac = false
## ape keeps Monkey's Audio. wav and flac decode the audio.
## Empty means ape. FLAC cannot store 32-bit or float PCM.
## Compression is ignored unless the format is ape.
ape_format = "ape"
## Used only when ape_format is ape (or empty). A default of 0 is set
## to 2000. Accepted values are 1000, 2000, 3000, 4000, and 5000.
## WAV and FLAC ignore this.
ape_compression = 0
- Using environment variables:
## Lidarr Settings
UN_LIDARR_0_NAME=
UN_LIDARR_0_URL=http://lidarr:8686
UN_LIDARR_0_API_KEY=0123456789abcdef0123456789abcdef
UN_LIDARR_0_HTTP_USER=
UN_LIDARR_0_HTTP_PASS=
UN_LIDARR_0_USERNAME=
UN_LIDARR_0_PASSWORD=
UN_LIDARR_0_PATHS_0=/downloads
UN_LIDARR_0_PROTOCOLS=torrent,TorrentDownloadProtocol
UN_LIDARR_0_TIMEOUT=10s
UN_LIDARR_0_DELETE_DELAY=5m
UN_LIDARR_0_DELETE_ORIG=false
UN_LIDARR_0_SYNCTHING=false
UN_LIDARR_0_VALID_SSL=false
UN_LIDARR_0_MAX_BYTES=
UN_LIDARR_0_SPLIT_FLAC=false
UN_LIDARR_0_APE_FORMAT=ape
UN_LIDARR_0_APE_COMPRESSION=0
| Config Name | Variable Name | Default / Note |
|---|---|---|
| name | UN_LIDARR_0_NAME | No Default / Optional label for logs, webhooks, and the dashboard. |
| url | UN_LIDARR_0_URL | No Default / URL where this starr app can be accessed. |
| api_key | UN_LIDARR_0_API_KEY | No Default / Provide URL and API key if you use this app. |
| http_user | UN_LIDARR_0_HTTP_USER | No Default / Optional HTTP basic-auth username. |
| http_pass | UN_LIDARR_0_HTTP_PASS | No Default / Optional HTTP basic-auth password. |
| username | UN_LIDARR_0_USERNAME | No Default / Optional native-auth username. |
| password | UN_LIDARR_0_PASSWORD | No Default / Optional native-auth password. |
| paths | UN_LIDARR_0_PATHS_0 | ["/downloads"] / File system path where downloaded items are located. |
| protocols | UN_LIDARR_0_PROTOCOLS | "torrent,TorrentDownloadProtocol" / Protocols to process. Newer Starr apps use class-name strings. |
| timeout | UN_LIDARR_0_TIMEOUT | "10s" / How long to wait for the app to respond. |
| delete_delay | UN_LIDARR_0_DELETE_DELAY | "5m" / Extracts are deleted this long after import, -1s to disable. |
| delete_orig | UN_LIDARR_0_DELETE_ORIG | false / Delete archives after import? Recommend keeping this false. |
| syncthing | UN_LIDARR_0_SYNCTHING | false / Setting this to true makes unpackerr wait for syncthing to finish. |
| valid_ssl | UN_LIDARR_0_VALID_SSL | false / Verify the Starr app TLS certificate. |
| max_bytes | UN_LIDARR_0_MAX_BYTES | No Default / Per-archive byte cap. Empty uses the app default. 0 is unlimited. |
| split_flac | UN_LIDARR_0_SPLIT_FLAC | false / Split FLAC and APE cue sheets into separate tracks. |
| ape_format | UN_LIDARR_0_APE_FORMAT | "ape" / Container written when an APE cue sheet is split. |
| ape_compression | UN_LIDARR_0_APE_COMPRESSION | No Default / Monkey's Audio level when the output format is APE. |
Readarr Settings
Examples. Prefix: UN_READARR_, Header: [readarr.0]
- Using the config file:
[readarr.0]
## Empty uses the app name (Sonarr, Radarr, and so on). Set this for a
## Sonarr-compatible app such as Sportarr so logs and Discord are not
## tagged Sonarr. Add Whisparr as a Radarr instance with name = "Whisparr".
## Hook exclude matches this name or the app dialect.
## Names must be printable and cannot contain quotes, braces, or angle brackets.
name = ""
url = "http://127.0.0.1:8787"
api_key = "0123456789abcdef0123456789abcdef"
## Username for HTTP basic authentication on the Starr app, if enabled.
http_user = ""
## Password for HTTP basic authentication on the Starr app, if enabled.
http_pass = ""
## Username for Starr native (forms) authentication, if enabled.
username = ""
## Password for Starr native (forms) authentication, if enabled.
password = ""
## List of paths where content is downloaded for this app.
## Used as fallback if the path the Starr app reports does not exist or is not accessible.
paths = ['/downloads']
## Protocols to process from the download queue. Starr apps historically
## used "torrent" and "usenet" as the protocol strings, but newer versions
## emit the full class names "TorrentDownloadProtocol" and
## "UsenetDownloadProtocol" instead. List every string your app may return,
## separated by commas. The default covers both the legacy and new torrent
## strings. Add "usenet,UsenetDownloadProtocol" if you use a Usenet client.
protocols = "torrent,TorrentDownloadProtocol"
## How long to wait for a reply from the backend.
timeout = "10s"
## How long to wait after import before deleting the extracted items.
delete_delay = "5m"
## If you use this app with NZB you may wish to delete archives after extraction.
## General recommendation is: do not enable this for torrent use.
## Setting this to true deletes the entire original download folder after import.
delete_orig = false
## If you use Syncthing, setting this to true will make unpackerr wait for syncs to finish.
syncthing = false
## When true, Unpackerr verifies the Starr app HTTPS certificate.
## The default is false for backward compatibility.
valid_ssl = false
## Per-archive uncompressed-byte cap. Empty uses the app default:
## Sonarr 20GB, Radarr 75GB, Lidarr 4GB, Readarr 1GB.
## `0` or `0B` disables the cap for this instance.
max_bytes = ""
- Using environment variables:
## Readarr Settings
UN_READARR_0_NAME=
UN_READARR_0_URL=http://readarr:8787
UN_READARR_0_API_KEY=0123456789abcdef0123456789abcdef
UN_READARR_0_HTTP_USER=
UN_READARR_0_HTTP_PASS=
UN_READARR_0_USERNAME=
UN_READARR_0_PASSWORD=
UN_READARR_0_PATHS_0=/downloads
UN_READARR_0_PROTOCOLS=torrent,TorrentDownloadProtocol
UN_READARR_0_TIMEOUT=10s
UN_READARR_0_DELETE_DELAY=5m
UN_READARR_0_DELETE_ORIG=false
UN_READARR_0_SYNCTHING=false
UN_READARR_0_VALID_SSL=false
UN_READARR_0_MAX_BYTES=
| Config Name | Variable Name | Default / Note |
|---|---|---|
| name | UN_READARR_0_NAME | No Default / Optional label for logs, webhooks, and the dashboard. |
| url | UN_READARR_0_URL | No Default / URL where this starr app can be accessed. |
| api_key | UN_READARR_0_API_KEY | No Default / Provide URL and API key if you use this app. |
| http_user | UN_READARR_0_HTTP_USER | No Default / Optional HTTP basic-auth username. |
| http_pass | UN_READARR_0_HTTP_PASS | No Default / Optional HTTP basic-auth password. |
| username | UN_READARR_0_USERNAME | No Default / Optional native-auth username. |
| password | UN_READARR_0_PASSWORD | No Default / Optional native-auth password. |
| paths | UN_READARR_0_PATHS_0 | ["/downloads"] / File system path where downloaded items are located. |
| protocols | UN_READARR_0_PROTOCOLS | "torrent,TorrentDownloadProtocol" / Protocols to process. Newer Starr apps use class-name strings. |
| timeout | UN_READARR_0_TIMEOUT | "10s" / How long to wait for the app to respond. |
| delete_delay | UN_READARR_0_DELETE_DELAY | "5m" / Extracts are deleted this long after import, -1s to disable. |
| delete_orig | UN_READARR_0_DELETE_ORIG | false / Delete archives after import? Recommend keeping this false. |
| syncthing | UN_READARR_0_SYNCTHING | false / Setting this to true makes unpackerr wait for syncthing to finish. |
| valid_ssl | UN_READARR_0_VALID_SSL | false / Verify the Starr app TLS certificate. |
| max_bytes | UN_READARR_0_MAX_BYTES | No Default / Per-archive byte cap. Empty uses the app default. 0 is unlimited. |
Watch Folders
Examples. Prefix: UN_FOLDER_, Header: [folder.0]
- Using the config file:
##################################################################################
### ### STOP HERE ### STOP HERE ### STOP HERE ### STOP HERE #### STOP HERE ### #
### Only using Starr apps? The things above. The below configs are OPTIONAL. ### #
##################################################################################
##-Folders-#######################################################################
## This application can also watch folders for things to extract. If you copy a ##
## subfolder into a watched folder (defined below) any extractable items in the ##
## folder will be decompressed. This has nothing to do with Starr applications. ##
##################################################################################
[folder.0]
path = '/downloads/auto_extract'
## How often this folder is scanned for new archives.
## Off (`0s`) uses filesystem events (inotify and friends).
## Enable a poll interval if files never show up in the queue, which is
## common on Docker and CIFS. Polling increases disk reads and is not
## recommended when fsnotify works.
interval = "0s"
## Paths to ignore while watching this folder. Excluded paths and their
## children are not tracked or extracted.
## Paths may be absolute, or relative to this folder's `path`.
exclude_paths = []
## Path to extract files to. The default (leaving this blank) is the same as `path` (above).
extract_path = ''
## Delete extracted or original files this long after extraction.
## The default is 10m. Set to 0 to disable all deletes. Deletes also
## require `delete_files` and/or `delete_original`. Uses Go Duration.
delete_after = "10m"
## Nested archives are extracted by default. Disable recursion to extract only the outer archive.
disable_recursion = false
## Per-archive uncompressed-byte cap. Empty is unlimited. `0` or `0B` is also unlimited.
max_bytes = ""
## Cap on files, directories, and symlinks created during extract. `0` is unlimited.
max_files = 0
## Cap on `bytes written / archive file size`. `0` is unlimited.
max_ratio = 0
## Cap on archives extracted from this folder's output (one extras pass). `0` is unlimited.
max_nested = 0
## Walk depth for the extras pass. `0` is unlimited.
extras_max_depth = 0
## When true, the initial archive search may include symlink-named files.
## The extras pass never follows archive-member zip links.
allow_symlinks = false
## Delete extracted files after successful extraction? delete_after must be greater than 0.
delete_files = false
## Delete original items after successful extraction? delete_after must be greater than 0.
delete_original = false
## Disable extraction log (unpackerred.txt) file creation?
disable_log = false
## Move extracted files into original folder? If false, files go into an _unpackerred folder.
move_back = false
## Set this to true if you want this app to extract ISO files with .iso extension.
extract_isos = false
## Incomplete-download suffixes such as `.part` or `.crdownload`. Extraction
## stays in waiting as long as any matching file is in the watched item's
## top folder. Subfolders are not scanned. The UI and config always store
## a leading period. Waiting items are rechecked every 5s even without the
## poller. Enabling folder poller will double-poll the folder and increase
## disk reads. Useful when fsnotify is not available, and not recommended
## when it is.
wait_extensions = []
## After start delay, skip watched folders that have no extractable archives.
## They leave waiting without history or webhooks.
skip_empty = false
- Using environment variables:
## Watch Folders
UN_FOLDER_0_PATH=/downloads/auto_extract
UN_FOLDER_0_INTERVAL=0s
UN_FOLDER_0_EXTRACT_PATH=
UN_FOLDER_0_DELETE_AFTER=10m
UN_FOLDER_0_DISABLE_RECURSION=false
UN_FOLDER_0_MAX_BYTES=
UN_FOLDER_0_MAX_FILES=0
UN_FOLDER_0_MAX_RATIO=0
UN_FOLDER_0_MAX_NESTED=0
UN_FOLDER_0_EXTRAS_MAX_DEPTH=0
UN_FOLDER_0_ALLOW_SYMLINKS=false
UN_FOLDER_0_DELETE_FILES=false
UN_FOLDER_0_DELETE_ORIGINAL=false
UN_FOLDER_0_DISABLE_LOG=false
UN_FOLDER_0_MOVE_BACK=false
UN_FOLDER_0_EXTRACT_ISOS=false
UN_FOLDER_0_SKIP_EMPTY=false
Folders are a way to watch a folder for things to extract. You can use this to
monitor your download client's "move to" path if you're not using it with a Starr app.
Use [folder.software] (env UN_FOLDER_software_PATH). Do not set a bare UN_FOLDER.
| Config Name | Variable Name | Default / Note |
|---|---|---|
| path | UN_FOLDER_0_PATH | No Default / Folder to watch for archives. Not for Starr apps. |
| interval | UN_FOLDER_0_INTERVAL | "0s" / How often this folder is polled. Off (0s) uses filesystem events. |
| exclude_paths | UN_FOLDER_0_EXCLUDE_PATH_0 | [] / List of paths to ignore under this watched folder. |
| extract_path | UN_FOLDER_0_EXTRACT_PATH | No Default / Where to extract to. Uses path if not set. |
| delete_after | UN_FOLDER_0_DELETE_AFTER | "10m" / Delete requested files after this duration; 0 disables. |
| disable_recursion | UN_FOLDER_0_DISABLE_RECURSION | false / Extract archives found inside other archives. Default is enabled. |
| max_bytes | UN_FOLDER_0_MAX_BYTES | No Default / Per-archive byte cap. Empty (the default) is unlimited. |
| max_files | UN_FOLDER_0_MAX_FILES | No Default / Stop after this many files, dirs, and symlinks. 0 is unlimited. |
| max_ratio | UN_FOLDER_0_MAX_RATIO | No Default / Stop when written bytes exceed this times the archive size. 0 is unlimited. |
| max_nested | UN_FOLDER_0_MAX_NESTED | No Default / Stop after this many nested archives from this folder's extras pass. 0 is unlimited. |
| extras_max_depth | UN_FOLDER_0_EXTRAS_MAX_DEPTH | No Default / How deep extras may walk this folder's extract output. 0 is unlimited. |
| allow_symlinks | UN_FOLDER_0_ALLOW_SYMLINKS | false / Include symlink-named archives in the initial search. |
| delete_files | UN_FOLDER_0_DELETE_FILES | false / Delete extracted files after successful extraction. |
| delete_original | UN_FOLDER_0_DELETE_ORIGINAL | false / Delete archives after successful extraction. |
| disable_log | UN_FOLDER_0_DISABLE_LOG | false / Turns off creation of extraction log files for this folder. |
| move_back | UN_FOLDER_0_MOVE_BACK | false / Move extracted items back into original folder. |
| extract_isos | UN_FOLDER_0_EXTRACT_ISOS | false / Setting this to true enables .iso file extraction. |
| wait_extensions | UN_FOLDER_0_WAIT_EXTENSION_0 | [] / Stay waiting while a top-level file with one of these extensions exists. |
| skip_empty | UN_FOLDER_0_SKIP_EMPTY | false / Do not queue folders that contain no archives. |
Hook Payload
Examples. Prefix: UN_HOOKS_, Header: [hooks]
- Using the config file:
####################
### Hook Payload ###
####################
# Extra IDs and custom event titles shared by every webhook and command hook.
[hooks]
## Nested [hooks.custom_ids] table, not an inline map.
## Webhooks get `customIDs` in JSON (`{{index .CustomIDs "url"}}` in templates).
## Command hooks get `UN_CUSTOM_ID_<key>` environment variables.
## Env: UN_HOOKS_CUSTOM_IDS_url=https://…
## [hooks.custom_ids]
## url = "https://unpackerr.example"
## Nested [hooks.titles] table with one field per extract event:
## waiting, queued, extracting, extractfailed, extracted, imported,
## deleting, deletefailed, deleted, extractednothing.
## Empty values keep the built-in English title. Built-in Discord, Slack,
## Telegram, Gotify, and Pushover templates use this string.
## Env: UN_HOOKS_TITLES_EXTRACTING=Archive Found
## [hooks.titles]
## extracting = "Archive Found"
- Using environment variables:
## Hook Payload
Extra payload IDs and per-event titles for every webhook and command hook.
Custom IDs are separate from Starr item IDs (ids).
Empty title values keep the built-in English event title (Status.Desc()).
| Config Name | Variable Name | Default / Note |
|---|---|---|
| custom_ids | UN_HOOKS_CUSTOM_IDS_ | No Default / Extra string IDs on every hook payload, separate from Starr item IDs. |
| titles | UN_HOOKS_TITLES_ | No Default / Override the English event title sent in hook payloads. |
Webhooks
Examples. Prefix: UN_WEBHOOK_, Header: [webhook.0]
- Using the config file:
################
### Webhooks ###
################
# Sends a webhook when an extraction queues, starts, finishes, and/or is deleted.
# Created to integrate with notifiarr.com.
# Also works natively with Discord.com, Telegram.org, Slack.com, ntfy, Apprise, and Mattermost webhooks.
# Can possibly be used with other services by providing a custom template_path.
###### Don't forget to uncomment [webhook.0] and url at a minimum !!!!
[webhook.0]
## Notifiarr: https://notifiarr.com/api/v1/notification/unpackerr plus headers.X-Api-Key.
## A path API key in a pasted URL is moved to that header.
url = "https://notifiarr.com/api/v1/notification/unpackerr"
## Provide an optional name to hide the URL in logs.
## If a name is not provided then the URL is used.
name = ""
## Do not log success (less log spam).
silent = false
## List of event ids to send notification for, [0] for all.
## The default is [0] and this is an example:
events = [1, 4, 6]
## ===> Advanced Optional Webhook Configuration <===
## Discord, Slack, and Mattermost: bot/display name. Telegram: chat_id.
## Gotify, ntfy, and Apprise: optional title prefix. Unused by Notifiarr JSON.
nickname = "Unpackerr"
## Also passed into templates. Slack and Mattermost optional channel. Pushover user key.
channel = ""
## Passed into webhook templates. Pushover requires the application token. ntfy sends Authorization Bearer when set. Unused by Discord, Telegram, and Slack incoming webhooks.
token = ""
## Dialect tokens skip every instance of that API. Any other value matches an instance name. None by default. This is an example:
exclude = ["readarr", "lidarr"]
## Used when template is empty (automatic). A named template ignores this file.
template_path = ''
## Override automatic template detection. Values: notifiarr, discord, telegram, gotify, pushover, slack, ntfy, apprise, mattermost. Empty uses the URL or template_path.
template = ""
## Default on for Discord webhooks and Telegram sendMessage. Other templates ignore this. Set false to post a new message for every extract event.
update = true
## Set this to true to ignore the SSL certificate on the server.
ignore_ssl = false
## You can adjust how long to wait for a server response.
timeout = "10s"
## If your custom template uses another MIME type, set this.
content_type = "application/json"
## Nested [webhook.0.headers] table. Header names are letters, digits, underscore, or hyphen.
## Applied first; Content-Type and ntfy Authorization Bearer from token still win.
## Notifiarr client key: X-Api-Key. Env: UN_WEBHOOK_0_HEADERS_X-Api-Key=api_key_from_notifiarr_com
## [webhook.0.headers]
## X-Api-Key = "api_key_from_notifiarr_com"
- Using environment variables:
## Webhooks
UN_WEBHOOK_0_URL=https://notifiarr.com/api/v1/notification/unpackerr
UN_WEBHOOK_0_NAME=
UN_WEBHOOK_0_SILENT=false
UN_WEBHOOK_0_EVENTS_0=1
UN_WEBHOOK_0_EVENTS_1=4
UN_WEBHOOK_0_EVENTS_2=6
UN_WEBHOOK_0_NICKNAME=Unpackerr
UN_WEBHOOK_0_CHANNEL=
UN_WEBHOOK_0_TOKEN=
UN_WEBHOOK_0_EXCLUDE_0=readarr
UN_WEBHOOK_0_EXCLUDE_1=lidarr
UN_WEBHOOK_0_TEMPLATE_PATH=
UN_WEBHOOK_0_TEMPLATE=
UN_WEBHOOK_0_UPDATE=true
UN_WEBHOOK_0_IGNORE_SSL=false
UN_WEBHOOK_0_TIMEOUT=10s
UN_WEBHOOK_0_CONTENT_TYPE=application/json
This application can send a POST webhook to a URL when an extraction begins, and again
when it finishes. Configure 1 or more webhook URLs with the parameters below.
Works great with notifiarr.com. You can use
requestbin.com to test and see the payload.
| Config Name | Variable Name | Default / Note |
|---|---|---|
| url | UN_WEBHOOK_0_URL | No Default / URL to send POST webhook to. |
| name | UN_WEBHOOK_0_NAME | No Default / Provide an optional name to hide the URL in logs. |
| silent | UN_WEBHOOK_0_SILENT | false / Hide successful POSTs from logs. |
| events | UN_WEBHOOK_0_EVENTS_0 | [0] / List of event ids to send notification for, 0 for all. |
| nickname | UN_WEBHOOK_0_NICKNAME | "Unpackerr" / Discord/Slack/Mattermost username, Telegram chat_id, or ntfy/Gotify/Apprise title prefix. |
| channel | UN_WEBHOOK_0_CHANNEL | No Default / Slack/Mattermost channel override, or Pushover user key. |
| token | UN_WEBHOOK_0_TOKEN | No Default / Pushover app token, or optional ntfy Bearer token. |
| exclude | UN_WEBHOOK_0_EXCLUDE_0 | [] / Apps or instance names to skip: sonarr, Sportarr, folder, etc. |
| template_path | UN_WEBHOOK_0_TEMPLATE_PATH | No Default / Custom Go template file; used when template is automatic. |
| template | UN_WEBHOOK_0_TEMPLATE | No Default / Force a built-in template instead of the URL or template file. |
| update | UN_WEBHOOK_0_UPDATE | true / Edit the previous Discord or Telegram message instead of posting a new one. |
| ignore_ssl | UN_WEBHOOK_0_IGNORE_SSL | false / Ignore invalid SSL certificates. |
| timeout | UN_WEBHOOK_0_TIMEOUT | "10s" / How long to wait for server response. |
| content_type | UN_WEBHOOK_0_CONTENT_TYPE | "application/json" / Content-Type header sent to webhook. |
| headers | UN_WEBHOOK_0_HEADERS_ | No Default / Extra HTTP headers sent with the webhook POST. |
Notes for Webhooks
- Paste a Discord, Slack, Telegram, ntfy, Apprise, Mattermost, Gotify, Pushover, or Notifiarr URL; the template is detected unless you set
template. - Discord and Telegram can edit the previous message (
update, default on). Slack incoming webhooks cannot update; each event is a new message. - Telegram:
nicknameis thechat_id. Pushover:tokenis the app token,channelis the user key,nicknameis an optional device. - Slack and Mattermost:
nicknameis the display name;channelis an optional override. - ntfy: optional
tokenas Bearer. Gotify, ntfy, and Apprise:nicknameis an optional title prefix. - Extra
headersare sent when set; the UI shows them for a namedtemplateor a customtemplate_path. Content-Type and ntfy Bearer still win after those headers. - Notifiarr: use
https://notifiarr.com/api/v1/notification/unpackerrplusheaders.X-Api-Key. A path API key (.../unpackerr/<uuid>) is moved to that header on start, save, and test. - Empty or unknown URLs use the Notifiarr JSON payload. Set
template_pathfor a custom Go template; a namedtemplateignores that file. Nameis only used in logs, but it's also available as a template value as{{name}}.- Built-in templates:
notifiarr,discord,telegram,slack,pushover,gotify,ntfy,apprise,mattermost.
Command Hooks
Examples. Prefix: UN_CMDHOOK_, Header: [cmdhook.0]
- Using the config file:
#####################
### Command Hooks ###
#####################
# Executes a script or command when an extraction queues, starts, finishes, and/or is deleted.
# All data is passed in as environment variables. Try /usr/bin/env to see what variables are available.
###### Don't forget to uncomment [cmdhook.0] at a minimum !!!!
[cmdhook.0]
command = '/downloads/scripts/command.sh'
## Provide an optional name to hide the URL in logs.
## If a name is not provided the first word in the command is used.
name = ""
## Runs the command inside /bin/sh ('nix) or cmd.exe (Windows).
shell = false
## Do not log command's output.
silent = false
## List of event ids to run command for, [0] for all.
## The default is [0] and this is an example:
events = [1, 4, 7]
## ===> Optional Command Hook Configuration <===
## Dialect tokens skip every instance of that API. Any other value matches an instance name. None by default. This is an example:
exclude = ["readarr", "lidarr"]
## You can adjust how long to wait for the command to run.
timeout = "10s"
- Using environment variables:
## Command Hooks
UN_CMDHOOK_0_COMMAND=/downloads/scripts/command.sh
UN_CMDHOOK_0_NAME=
UN_CMDHOOK_0_SHELL=false
UN_CMDHOOK_0_SILENT=false
UN_CMDHOOK_0_EVENTS_0=1
UN_CMDHOOK_0_EVENTS_1=4
UN_CMDHOOK_0_EVENTS_2=7
UN_CMDHOOK_0_EXCLUDE_0=readarr
UN_CMDHOOK_0_EXCLUDE_1=lidarr
UN_CMDHOOK_0_TIMEOUT=10s
Unpackerr can execute commands (or scripts) before and after an archive extraction.
The only thing required is a command. Name is optional, and used in logs only.
Setting shell to true executes your command after /bin/sh -c or cmd.exe /c
on Windows.
| Config Name | Variable Name | Default / Note |
|---|---|---|
| command | UN_CMDHOOK_0_COMMAND | No Default / Command to run. |
| name | UN_CMDHOOK_0_NAME | No Default / Name for logs, otherwise uses first word in command. |
| shell | UN_CMDHOOK_0_SHELL | false / Run command inside a shell. |
| silent | UN_CMDHOOK_0_SILENT | false / Hide command output from logs. |
| events | UN_CMDHOOK_0_EVENTS_0 | [0] / List of event ids to run command for, 0 for all. |
| exclude | UN_CMDHOOK_0_EXCLUDE_0 | [] / Apps or instance names to skip: sonarr, Sportarr, folder, etc. |
| timeout | UN_CMDHOOK_0_TIMEOUT | "10s" / How long to wait for the command to run. |
All extraction data is input to the command using environment variables, see example below.
Extracted files variables names begin with UN_DATA_FILES_.
Custom IDs from [hooks].custom_ids appear as UN_CUSTOM_ID_<key>.
Try /usr/bin/env as an example command to see what variables are available.
Example Output Variables
UN_DATA_OUTPUT=folder/subfolder_unpackerred
UN_PATH=folder/subfolder
UN_DATA_START=2021-10-04T23:04:27.849216-07:00
UN_REVISION=
UN_EVENT=extracted
UN_GO=go1.17
UN_DATA_ARCHIVES=folder/subfolder_unpackerred/Funjetting.rar,folder/subfolder_unpackerred/Funjetting.r00,folder/subfolder/files.zip
UN_DATA_ARCHIVE_2=folder/subfolder/files.zip
UN_DATA_ARCHIVE_1=folder/subfolder_unpackerred/Funjetting.r00
UN_DATA_ARCHIVE_0=folder/subfolder_unpackerred/Funjetting.rar
UN_DATA_FILES=folder/subfolder/Funjetting.mp3,folder/subfolder/Funjetting.r00,folder/subfolder/Funjetting.rar,folder/subfolder/_unpackerred.subfolder.txt
UN_DATA_FILE_1=folder/subfolder/Funjetting.r00
UN_DATA_BYTES=2407624
PWD=/Users/david/go/src/github.com/Unpackerr/unpackerr
UN_DATA_FILE_0=folder/subfolder/Funjetting.mp3
UN_OS=darwin
UN_DATA_FILE_3=folder/subfolder/_unpackerred.subfolder.txt
UN_DATA_FILE_2=folder/subfolder/Funjetting.rar
UN_BRANCH=
UN_TIME=2021-10-04T23:04:27.869613-07:00
UN_VERSION=
UN_DATA_QUEUE=0
SHLVL=1
UN_APP=Folder
UN_STARTED=2021-10-04T23:03:22.849253-07:00
UN_ARCH=amd64
UN_DATA_ELAPSED=20.365752ms
UN_DATA_ERROR=
Event IDs
Event IDs are used in command hooks and webhooks.
0 = all, 1 = queued, 2 = extracting, 3 = extract failed, 4 = extracted,
5 = imported, 6 = deleting, 7 = delete failed, 8 = deleted, 9 = nothing extracted
The nothing extracted event (9) only fires for the folder watcher, not Starr apps.
This page was generated automatically, 07 OCT 2026 21:07 UTC