diff --git a/404.html b/404.html index 0021b27..9282893 100644 --- a/404.html +++ b/404.html @@ -4,7 +4,7 @@ Page Not Found | Unpackerr Extracter - + diff --git a/assets/js/43892b4c.d67167cb.js b/assets/js/43892b4c.d67167cb.js deleted file mode 100644 index 136a4e9..0000000 --- a/assets/js/43892b4c.d67167cb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkunpackerrdox=self.webpackChunkunpackerrdox||[]).push([[782],{4191:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>c,contentTitle:()=>i,default:()=>a,frontMatter:()=>l,metadata:()=>t,toc:()=>o});var n=r(4848),d=r(8453);const l={id:"configuration",title:"Application Configuration",pagination_prev:"install/choosemethod",pagination_next:"unpackerr/troubleshooting",description:"Unpackerr configurations explained."},i=void 0,t={id:"install/configuration",title:"Application Configuration",description:"Unpackerr configurations explained.",source:"@site/docs/install/configuration.md",sourceDirName:"install",slug:"/install/configuration",permalink:"/docs/install/configuration",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{id:"configuration",title:"Application Configuration",pagination_prev:"install/choosemethod",pagination_next:"unpackerr/troubleshooting",description:"Unpackerr configurations explained."},sidebar:"someSidebar",previous:{title:"Choose Install Method",permalink:"/docs/install/choosemethod"},next:{title:"Troubleshooting",permalink:"/docs/unpackerr/troubleshooting"}},c={},o=[{value:"Config",id:"config",level:2},{value:"Generator",id:"generator",level:3},{value:"Two+ Instances",id:"two-instances",level:3},{value:"Global Settings",id:"global-settings",level:2},{value:"Secrets and Passwords",id:"secrets-and-passwords",level:2},{value:"Webserver",id:"webserver",level:2},{value:"Sonarr",id:"sonarr",level:2},{value:"Radarr",id:"radarr",level:2},{value:"Lidarr",id:"lidarr",level:2},{value:"Readarr",id:"readarr",level:2},{value:"Whisparr",id:"whisparr",level:2},{value:"Folder",id:"folder",level:2},{value:"Command Hooks",id:"command-hooks",level:2},{value:"Webhooks",id:"webhooks",level:2},{value:"Webhook Notes",id:"webhook-notes",level:3},{value:"Event IDs",id:"event-ids",level:2}];function h(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,d.R)(),...e.components},{Details:r}=s;return r||function(e,s){throw new Error("Expected "+(s?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(s.p,{children:["This is where to learn what each config item is, the default\nvalues for each item, and the name to use in an environment variable.\nYou should use the data here along with the data in the\n",(0,n.jsx)(s.a,{href:"https://github.com/Unpackerr/unpackerr/blob/main/examples/unpackerr.conf.example",children:"example config file"}),"\nto paint the full picture of how to configure Unpackerr."]}),"\n",(0,n.jsx)(s.h2,{id:"config",children:"Config"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Setting a log file is strongly recommend. This makes it much easier to troubleshoot problems."}),"\n",(0,n.jsxs)(s.li,{children:["To use a config file in Docker, mount ",(0,n.jsx)(s.code,{children:"/config"})," to the container and Unpackerr will write a config file.","\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Update the new file and restart the container."}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["When using a config file you must uncomment at minimum the ",(0,n.jsx)(s.code,{children:"[[header]]"})," ",(0,n.jsxs)("font",{color:"gray",children:["\nex. ",(0,n.jsx)(s.code,{children:"[[radarr]]"})]}),", ",(0,n.jsx)(s.code,{children:"url"})," and ",(0,n.jsx)(s.code,{children:"api_key"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["Uncomment means remove the hash ",(0,n.jsx)(s.code,{children:"#"})," at the beginning of the line."]}),"\n",(0,n.jsxs)(s.li,{children:["The config file format is ",(0,n.jsx)(s.a,{href:"https://toml.io",children:"TOML"}),".","\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Indentation is not important like YAML files, but it's used for ease of readability."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"generator",children:"Generator"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"https://notifiarr.com",children:"Notifiarr"})," hosts a configuration file maker.\nSimply fill in a web form, and click a button to get a working config file."]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsxs)(s.strong,{children:["Access the generator here: ",(0,n.jsx)(s.a,{href:"https://notifiarr.com/unpackerr.php",children:"https://notifiarr.com/unpackerr.php"})]})}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"two-instances",children:"Two+ Instances"}),"\n",(0,n.jsxs)(s.p,{children:["When adding a second (or third+) instance to the ",(0,n.jsx)(s.strong,{children:"config file"}),", you just\nadd another ",(0,n.jsx)(s.code,{children:"[[header]]"})," ",(0,n.jsxs)("font",{color:"gray",children:["ex. ",(0,n.jsx)(s.code,{children:"[[sonarr]]"})]})," and the\n",(0,n.jsx)(s.code,{children:"url"}),"/",(0,n.jsx)(s.code,{children:"api_key"}),"/etc under it. When adding a second instance to the ",(0,n.jsx)(s.strong,{children:"environment\nvariables"}),", you must increment the ",(0,n.jsx)(s.code,{children:"0"})," to a ",(0,n.jsx)(s.code,{children:"1"}),". And to a ",(0,n.jsx)(s.code,{children:"2"})," if you have 3\ninstances. There is no limit to the number of supported instances. This notation\nworks for all starr apps, folders, command hooks, and web hooks."]}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsx)("summary",{children:"Config examples with multiple instances."}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Config File example with two Radarrs and two Folders."}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:'[[radarr]]\n url = "http://radarr"\n api_key = "32characters"\n\n[[radarr]]\n url = "http://radarr4k"\n api_key = "32morecharacters"\n\n[[folder]]\n path = "/data/downloads/software/"\n\n[[folder]]\n path = "/data/downloads/games/"\n'})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Environment Variable example with two Radarrs and two Folders setting the same values as above."}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"UN_RADARR_0_URL=http://radarr\nUN_RADARR_0_API_KEY=32characters\nUN_RADARR_1_URL=http://radarr4k\nUN_RADARR_1_API_KEY=32morecharacters\nUN_FOLDER_0_PATH=/data/downloads/software/\nUN_FOLDER_1_PATH=/data/downloads/games/\n"})})]}),"\n",(0,n.jsxs)(s.p,{children:["Anything that ",(0,n.jsx)(s.a,{href:"https://github.com/Unpackerr/unpackerr/blob/main/examples/unpackerr.conf.example#L87",children:"has a header"}),"\nwith double brackets ",(0,n.jsx)(s.code,{children:"[[..]]"})," can be repeated as many times as you'd like."]}),"\n",(0,n.jsx)(s.h2,{id:"global-settings",children:"Global Settings"}),"\n",(0,n.jsxs)(s.p,{children:["These values must exist at the top of the config file.\nIf you put them anywhere else they may be attached to a ",(0,n.jsx)(s.code,{children:"[header]"})," inadvertently.\nWhen using environment variables, you can simply omit the ones you don't set or change from default."]}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsxs)("summary",{children:["Examples. Prefix: ",(0,n.jsx)("b",{children:"UN"})]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using the config file:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:'debug = false\nquiet = false\nerror_stderr = false\nactivity = false\nlog_queues = "1m"\nlog_file = ""\nlog_files = 10\nlog_file_mb = 10\ninterval = "2m"\nstart_delay = "1m"\nretry_delay = "5m"\nparallel = 1\nfile_mode = "0644"\ndir_mode = "0755"\n\n[folders]\n interval = "0s"\n'})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using environment variables:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"TZ=America/New_York\nUN_DEBUG=false\nUN_QUIET=false\nUN_ERROR_STDERR=false\nUN_ACTIVITY=false\nUN_LOG_QUEUES=1m\nUN_LOG_FILE=\nUN_LOG_FILES=10\nUN_LOG_FILE_MB=10\nUN_INTERVAL=2m\nUN_START_DELAY=1m\nUN_RETRY_DELAY=5m\nUN_MAX_RETRIES=3\nUN_PARALLEL=1\nUN_FILE_MODE=0644\nUN_DIR_MODE=0755\nUN_FOLDERS_INTERVAL=0s\n"})})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Config Name"}),(0,n.jsx)(s.th,{children:"Variable Name"}),(0,n.jsx)(s.th,{children:"Default / Note"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"debug"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_DEBUG"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Turns on more logs"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"quiet"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_QUIIET"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Do not print logs to stdout or stderr"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"error_stderr"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_ERROR_STDERR"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Print ERROR lines to stderr instead of stdout."]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"activity"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_ACTIVITY"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Setting true will print only queue counts with activity."]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"log_queues"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LOG_QUEUES"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"1m"})," / Uses Go Duration. How often to print internal counters."]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"log_file"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LOG_FILE"})}),(0,n.jsx)(s.td,{children:"None by default. Optionally provide a file path to write logs"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"log_files"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LOG_FILES"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"10"})," / Log files to keep after rotating. ",(0,n.jsx)(s.code,{children:"0"})," disables rotation"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"log_file_mb"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LOG_FILE_MB"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"10"})," / Max size of log files in megabytes"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"interval"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_INTERVAL"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"2m"})," / How often apps are polled, recommend ",(0,n.jsx)(s.code,{children:"1m"})," to ",(0,n.jsx)(s.code,{children:"5m"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"start_delay"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_START_DELAY"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"1m"})," / Files are queued at least this long before extraction"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"retry_delay"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_RETRY_DELAY"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"5m"})," / Failed extractions are retried after at least this long"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"max_retries"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_MAX_RETRIES"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"3"})," / Times to retry failed extractions. ",(0,n.jsx)(s.code,{children:"0"})," = unlimited."]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"parallel"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_PARALLEL"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"1"})," / Concurrent extractions, only recommend ",(0,n.jsx)(s.code,{children:"1"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"file_mode"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_FILE_MODE"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"0644"})," / Extracted files are written with this mode"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"dir_mode"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_DIR_MODE"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"0755"})," / Extracted folders are written with this mode"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"passwords"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_PASSWORD_0"})}),(0,n.jsx)(s.td,{children:"No default; empty list. Provide a list of RAR passwords to try."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"folders.interval"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_FOLDERS_INTERVAL"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"1s"})," / How often poller checks for new folders. Use ",(0,n.jsx)(s.code,{children:"1ms"})," to disable it."]})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"secrets-and-passwords",children:"Secrets and Passwords"}),"\n",(0,n.jsxs)(s.p,{children:['If a wrong password is provided, the entire archive must\nbe read before we know it\'s a bad password.\nProviding many passwords here can drastically slow down\nextractions and cause extra disk IO. You may also specify\na password file by providing a "password" in this format: ',(0,n.jsx)(s.code,{children:"filepath:/path/to/passwords.txt"}),".\nThe file must contain 1 password per line."]}),"\n",(0,n.jsxs)(s.admonition,{title:"Other Secrets",type:"info",children:[(0,n.jsxs)(s.p,{children:["You may store any string parameter (except time intervals) into a separate file\nby setting the value to ",(0,n.jsx)(s.code,{children:"filepath:/path/to/file.txt"}),". In other words, if you want\nyour Radarr API key to be read from a separate file, instead of storing it directly\nin the config file or environment variables you can do this:"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-toml",children:'[[radarr]]\n url = "https://some.url/radarr"\n api_key = "filepath:/etc/secrets/radarr.txt"\n'})}),(0,n.jsx)(s.p,{children:"Or if using environment variables:"}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"UN_RADARR_0_API_KEY=filepath:/etc/secrets/radarr.txt\n"})}),(0,n.jsxs)(s.p,{children:["Then store the API key (and only the API key) in ",(0,n.jsx)(s.code,{children:"/etc/secrets/radarr.txt"}),"."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.em,{children:(0,n.jsx)("font",{color:"gray",children:"This feature was added in Unpackerr v0.14.0."})})})]}),"\n",(0,n.jsx)(s.h2,{id:"webserver",children:"Webserver"}),"\n",(0,n.jsx)(s.admonition,{title:"Metrics",type:"note",children:(0,n.jsxs)(s.p,{children:["The web server currently only provides prometheus metrics, which you can display in\n",(0,n.jsx)(s.a,{href:"https://grafana.com/grafana/dashboards/18817-unpackerr/",children:"Grafana"}),".\nIt provides no UI. This may change in the future. The web server was added in v0.12.0."]})}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsxs)("summary",{children:["Examples. Prefix: ",(0,n.jsx)("b",{children:"UN_WEBSERVER"}),", Header: ",(0,n.jsx)("b",{children:"[webserver]"})]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using the config file:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:'[webserver]\n metrics = true\n listen_addr = "0.0.0.0:5656"\n log_file = ""\n log_files = 10\n log_file_mb = 10\n ssl_cert_file = ""\n ssl_key_file = ""\n urlbase = "/"\n upstreams = [ "127.0.0.1/32", "10.1.2.0/24" ]\n'})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using environment variables:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"UN_WEBSERVER_METRICS=true\nUN_WEBSERVER_LISTEN_ADDR=0.0.0.0:5656\nUN_WEBSERVER_LOG_FILE=\nUN_WEBSERVER_LOG_FILES=10\nUN_WEBSERVER_LOG_FILE_MB=10\nUN_WEBSERVER_URLBASE=/\nUN_WEBSERVER_UPSTREAMS=127.0.0.1/32,10.1.2.0/24\n"})})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Config Name"}),(0,n.jsx)(s.th,{children:"Variable Name"}),(0,n.jsx)(s.th,{children:"Default / Note"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webserver.metrics"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBSERVER_METRICS"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Set this to true to enable the webserver, and metrics"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webserver.listen_addr"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBSERVER_LISTEN_ADDR"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"0.0.0.0:5656"})," / ip",":port"," to listen on. ",(0,n.jsx)(s.code,{children:"0.0.0.0"})," is all IPs"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webserver.log_file"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBSERVER_LOG_FILE"})}),(0,n.jsx)(s.td,{children:"No default. Optionally provide a file path to write HTTP logs"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webserver.log_files"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBSERVER_LOG_FILES"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"10"})," / Log files to keep after rotating. ",(0,n.jsx)(s.code,{children:"0"})," to disable"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webserver.log_file_mb"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBSERVER_LOG_FILE_MB"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"10"})," / Max size of HTTP log files in megabytes"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webserver.ssl_cert_file"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBSERVER_SSL_CERT_FILE"})}),(0,n.jsx)(s.td,{children:"No default. Path to SSL cert file to serve HTTPS"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webserver.ssl_key_file"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBSERVER_SSL_KEY_FILE"})}),(0,n.jsx)(s.td,{children:"No default. Path to SSL key file to serve HTTPS"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webserver.urlbase"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBSERVER_URLBASE"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"/"})," / Base URL path to serve HTTP content"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webserver.upstreams"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBSERVER_UPSTREAMS"})}),(0,n.jsx)(s.td,{children:"No default. List of upstream proxy CIDRs or IPs to trust"})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"sonarr",children:"Sonarr"}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsxs)("summary",{children:["Examples. Prefix: ",(0,n.jsx)("b",{children:"UN_SONARR_#"}),", Header: ",(0,n.jsx)("b",{children:"[[sonarr]]"})]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using the config file:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:'[[sonarr]]\n url = "http://127.0.0.1:8989"\n api_key = "0123456789abcdef0123456789abcdef"\n paths = [\'/downloads\']\n protocols = "torrent"\n timeout = "10s"\n delete_delay = "5m"\n delete_orig = false\n syncthing = false\n'})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using environment variables:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"UN_SONARR_0_URL=http://sonarr:8989\nUN_SONARR_0_API_KEY=\nUN_SONARR_0_PATHS_0=/downloads\nUN_SONARR_0_PROTOCOLS=torrent\nUN_SONARR_0_TIMEOUT=10s\nUN_SONARR_0_DELETE_ORIG=false\nUN_SONARR_0_DELETE_DELAY=5m\n"})})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Config Name"}),(0,n.jsx)(s.th,{children:"Variable Name"}),(0,n.jsx)(s.th,{children:"Default / Note"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonarr.url"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_SONARR_0_URL"})}),(0,n.jsxs)(s.td,{children:["No Default. Something like: ",(0,n.jsx)(s.code,{children:"http://localhost:8989"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonarr.api_key"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_SONARR_0_API_KEY"})}),(0,n.jsx)(s.td,{children:"No Default. Provide URL and API key if you use Sonarr"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonarr.paths"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_SONARR_0_PATHS_0"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"/downloads"})," List of paths where content is downloaded for Sonarr. Used as fallback if the path Sonarr reports does not exist or is not accessible."]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonarr.protocols"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_SONARR_0_PROTOCOLS"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"torrent"})," Protocols to process. Alt: ",(0,n.jsx)(s.code,{children:"torrent,usenet"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonarr.timeout"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_SONARR_0_TIMEOUT"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"10s"})," / How long to wait for the app to respond"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonarr.delete_orig"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_SONARR_0_DELETE_ORIG"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Delete archives after import? Recommend not setting this to true"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonarr.delete_delay"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_SONARR_0_DELETE_DELAY"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"5m"})," / Extracts are deleted this long after import, ",(0,n.jsx)(s.code,{children:"-1s"})," to disable"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonarr.syncthing"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_SONARR_0_SYNCTHING"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Setting this to true makes unpackerr wait for syncthing to finish"]})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"radarr",children:"Radarr"}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsxs)("summary",{children:["Examples. Prefix: ",(0,n.jsx)("b",{children:"UN_RADARR_#"}),", Header: ",(0,n.jsx)("b",{children:"[[radarr]]"})]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using the config file:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:'[[radarr]]\n url = "http://127.0.0.1:7878"\n api_key = "0123456789abcdef0123456789abcdef"\n paths = [\'/downloads\']\n protocols = "torrent"\n timeout = "10s"\n delete_delay = "5m"\n delete_orig = false\n syncthing = false\n'})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using environment variables:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"UN_RADARR_0_URL=http://radarr:7878\nUN_RADARR_0_API_KEY=0123456789abcdef0123456789abcdef\nUN_RADARR_0_PATHS_0=/downloads\nUN_RADARR_0_PROTOCOLS=torrent\nUN_RADARR_0_TIMEOUT=10s\nUN_RADARR_0_DELETE_ORIG=false\nUN_RADARR_0_DELETE_DELAY=5m\n"})})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Config Name"}),(0,n.jsx)(s.th,{children:"Variable Name"}),(0,n.jsx)(s.th,{children:"Default / Note"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"radarr.url"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_RADARR_0_URL"})}),(0,n.jsxs)(s.td,{children:["No Default. Something like: ",(0,n.jsx)(s.code,{children:"http://localhost:7878"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"radarr.api_key"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_RADARR_0_API_KEY"})}),(0,n.jsx)(s.td,{children:"No Default. Provide URL and API key if you use Radarr"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"radarr.paths"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_RADARR_0_PATHS_0"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"/downloads"})," List of paths where content is downloaded for Radarr. Used as fallback if the path Radarr reports does not exist or is not accessible"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"radarr.protocols"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_RADARR_0_PROTOCOLS"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"torrent"})," Protocols to process. Alt: ",(0,n.jsx)(s.code,{children:"torrent,usenet"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"radarr.timeout"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_RADARR_0_TIMEOUT"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"10s"})," / How long to wait for the app to respond"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"radarr.delete_orig"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_RADARR_0_DELETE_ORIG"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Delete archives after import? Recommend not setting this to true"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"radarr.delete_delay"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_RADARR_0_DELETE_DELAY"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"5m"})," / Extracts are deleted this long after import, ",(0,n.jsx)(s.code,{children:"-1s"})," to disable"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"radarr.syncthing"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_RADARR_0_SYNCTHING"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Setting this to true makes unpackerr wait for syncthing to finish"]})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"lidarr",children:"Lidarr"}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsxs)("summary",{children:["Examples. Prefix: ",(0,n.jsx)("b",{children:"UN_LIDARR_#"}),", Header: ",(0,n.jsx)("b",{children:"[[lidarr]]"})]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using the config file:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:'[[lidarr]]\n url = "http://127.0.0.1:8686"\n api_key = "0123456789abcdef0123456789abcdef"\n paths = [\'/downloads\']\n protocols = "torrent"\n timeout = "10s"\n delete_delay = "5m"\n delete_orig = false\n syncthing = false\n'})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using environment variables:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"UN_LIDARR_0_URL=http://lidarr:8686\nUN_LIDARR_0_API_KEY=0123456789abcdef0123456789abcdef\nUN_LIDARR_0_PATHS_0=/downloads\nUN_LIDARR_0_PROTOCOLS=torrent\nUN_LIDARR_0_TIMEOUT=10s\nUN_LIDARR_0_DELETE_ORIG=false\nUN_LIDARR_0_DELETE_DELAY=5m\n"})})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Config Name"}),(0,n.jsx)(s.th,{children:"Variable Name"}),(0,n.jsx)(s.th,{children:"Default / Note"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"lidarr.url"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LIDARR_0_URL"})}),(0,n.jsxs)(s.td,{children:["No Default. Something like: ",(0,n.jsx)(s.code,{children:"http://localhost:8686"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"lidarr.api_key"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LIDARR_0_API_KEY"})}),(0,n.jsx)(s.td,{children:"No Default. Provide URL and API key if you use Lidarr"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"lidarr.paths"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LIDARR_0_PATHS_0"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"/downloads"})," List of paths where content is downloaded for Lidarr. Used as fallback if the path Lidarr reports does not exist or is not accessible"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"lidarr.protocols"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LIDARR_0_PROTOCOLS"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"torrent"})," Protocols to process. Alt: ",(0,n.jsx)(s.code,{children:"torrent,usenet"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"lidarr.timeout"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LIDARR_0_TIMEOUT"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"10s"})," / How long to wait for the app to respond"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"lidarr.delete_orig"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LIDARR_0_DELETE_ORIG"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Delete archives after import? Recommend not setting this to true"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"lidarr.delete_delay"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LIDARR_0_DELETE_DELAY"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"5m"})," / Extracts are deleted this long after import, ",(0,n.jsx)(s.code,{children:"-1s"})," to disable"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"lidarr.syncthing"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LIDARR_0_SYNCTHING"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Setting this to true makes unpackerr wait for syncthing to finish"]})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"readarr",children:"Readarr"}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsxs)("summary",{children:["Examples. Prefix: ",(0,n.jsx)("b",{children:"UN_READARR_#"}),", Header: ",(0,n.jsx)("b",{children:"[[readarr]]"})]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using the config file:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:'[[readarr]]\n url = "http://127.0.0.1:8787"\n api_key = "0123456789abcdef0123456789abcdef"\n paths = [\'/downloads\']\n protocols = "torrent"\n timeout = "10s"\n delete_delay = "5m"\n delete_orig = false\n syncthing = false\n'})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using environment variables:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"UN_READARR_0_URL=http://readarr:8787\nUN_READARR_0_API_KEY=0123456789abcdef0123456789abcdef\nUN_READARR_0_PATHS_0=/downloads\nUN_READARR_0_PROTOCOLS=torrent\nUN_READARR_0_TIMEOUT=10s\nUN_READARR_0_DELETE_ORIG=false\nUN_READARR_0_DELETE_DELAY=5m\n"})})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Config Name"}),(0,n.jsx)(s.th,{children:"Variable Name"}),(0,n.jsx)(s.th,{children:"Default / Note"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"readarr.url"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_READARR_0_URL"})}),(0,n.jsxs)(s.td,{children:["No Default. Something like: ",(0,n.jsx)(s.code,{children:"http://localhost:8787"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"readarr.api_key"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_READARR_0_API_KEY"})}),(0,n.jsx)(s.td,{children:"No Default. Provide URL and API key if you use Readarr"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"readarr.paths"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_READARR_0_PATHS_0"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"/downloads"})," List of paths where content is downloaded for Readarr. Used as fallback if the path Readarr reports does not exist or is not accessible"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"readarr.protocols"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_READARR_0_PROTOCOLS"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"torrent"})," Protocols to process. Alt: ",(0,n.jsx)(s.code,{children:"torrent,usenet"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"readarr.timeout"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_READARR_0_TIMEOUT"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"10s"})," / How long to wait for the app to respond"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"readarr.delete_orig"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_READARR_0_DELETE_ORIG"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Delete archives after import? Recommend not setting this to true"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"readarr.delete_delay"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_READARR_0_DELETE_DELAY"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"5m"})," / Extracts are deleted this long after import, ",(0,n.jsx)(s.code,{children:"-1s"})," to disable"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"readarr.syncthing"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_READARR_0_SYNCTHING"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Setting this to true makes unpackerr wait for syncthing to finish"]})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"whisparr",children:"Whisparr"}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsxs)("summary",{children:["Examples. Prefix: ",(0,n.jsx)("b",{children:"UN_WHISPARR_#"}),", Header: ",(0,n.jsx)("b",{children:"[[whisparr]]"})]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using the config file:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:'[[whisparr]]\n url = "http://127.0.0.1:6969"\n api_key = "0123456789abcdef0123456789abcdef"\n paths = [\'/downloads\']\n protocols = "torrent"\n timeout = "10s"\n delete_delay = "5m"\n delete_orig = false\n syncthing = false\n'})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using environment variables:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"UN_WHISPARR_0_URL=http://whisparr:6969\nUN_WHISPARR_0_API_KEY=0123456789abcdef0123456789abcdef\nUN_WHISPARR_0_PATHS_0=/downloads\nUN_WHISPARR_0_PROTOCOLS=torrent\nUN_WHISPARR_0_TIMEOUT=10s\nUN_WHISPARR_0_DELETE_ORIG=false\nUN_WHISPARR_0_DELETE_DELAY=5m\n"})})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Config Name"}),(0,n.jsx)(s.th,{children:"Variable Name"}),(0,n.jsx)(s.th,{children:"Default / Note"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"whisparr.url"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WHISPARR_0_URL"})}),(0,n.jsxs)(s.td,{children:["No Default. Something like: ",(0,n.jsx)(s.code,{children:"http://localhost:8787"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"whisparr.api_key"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WHISPARR_0_API_KEY"})}),(0,n.jsx)(s.td,{children:"No Default. Provide URL and API key if you use Readarr"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"whisparr.paths"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WHISPARR_0_PATHS_0"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"/downloads"})," List of paths where content is downloaded for Readarr. Used as fallback if the path Readarr reports does not exist or is not accessible"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"whisparr.protocols"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WHISPARR_0_PROTOCOLS"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"torrent"})," Protocols to process. Alt: ",(0,n.jsx)(s.code,{children:"torrent,usenet"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"whisparr.timeout"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WHISPARR_0_TIMEOUT"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"10s"})," / How long to wait for the app to respond"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"whisparr.delete_orig"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WHISPARR_0_DELETE_ORIG"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Delete archives after import? Recommend not setting this to true"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"whisparr.delete_delay"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WHISPARR_0_DELETE_DELAY"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"5m"})," / Extracts are deleted this long after import, ",(0,n.jsx)(s.code,{children:"-1s"})," to disable"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"whisparr.syncthing"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WHISPARR_0_SYNCTHING"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Setting this to true makes unpackerr wait for syncthing to finish"]})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"folder",children:"Folder"}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsxs)("summary",{children:["Examples. Prefix: ",(0,n.jsx)("b",{children:"UN_FOLDER_#"}),", Header: ",(0,n.jsx)("b",{children:"[[folder]]"})]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using the config file:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"[[folder]]\n path = '''/some/folder/to/watch'''\n extract_path = ''\n delete_after = \"10m\"\n disable_recursion = false\n delete_files = false\n delete_original = false\n disable_log = false\n move_back = false\n extract_isos = false\n"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using environment variables:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"UN_FOLDER_0_PATH=/some/folder/to/watch\nUN_FOLDER_0_EXTRACT_PATH=\nUN_FOLDER_0_DELETE_AFTER=10m\nUN_FOLDER_0_DELETE_ORIGINAL=false\nUN_FOLDER_0_DELETE_FILES=false\nUN_FOLDER_0_MOVE_BACK=false\n"})})]}),"\n",(0,n.jsx)(s.p,{children:"Folders are a way to watch a folder for things to extract. You can use this to\nmonitor your download client's \"move to\" path if you're not using it with an Starr app."}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Config Name"}),(0,n.jsx)(s.th,{children:"Variable Name"}),(0,n.jsx)(s.th,{children:"Default / Note"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"folder.path"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_FOLDER_0_PATH"})}),(0,n.jsxs)(s.td,{children:["No Default; folder to watch for archives. ",(0,n.jsx)(s.strong,{children:"Not for Starr apps"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"folder.extract_path"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_FOLDER_0_EXTRACT_PATH"})}),(0,n.jsxs)(s.td,{children:["Where to extract to. Default is the same as ",(0,n.jsx)(s.code,{children:"path"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"folder.delete_after"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_FOLDER_0_DELETE_AFTER"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"10m"})," Delete extracted files and/or archives after this duration; ",(0,n.jsx)(s.code,{children:"0"})," disables"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"folder.disable_log"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_FOLDER_0_DISABLE_LOG"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," Turns off creation of extraction logs files for this folder"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"folder.delete_original"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_FOLDER_0_DELETE_ORIGINAL"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," Delete archives after successful extraction"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"folder.delete_files"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_FOLDER_0_DELETE_FILES"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," Delete extracted files after successful extraction"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"folder.move_back"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_FOLDER_0_MOVE_BACK"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," Move extracted items back into original folder"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"folder.extract_isos"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_FOLDER_0_EXTRACT_ISOS"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," Setting this to true enables .iso file extraction"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"folder.disable_recursion"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_FOLDER_0_DISABLE_RECURSION"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," Setting this to true disables extracting archives inside archives"]})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"command-hooks",children:"Command Hooks"}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsxs)("summary",{children:["Examples. Prefix: ",(0,n.jsx)("b",{children:"UN_CMDHOOK_#"}),", Header: ",(0,n.jsx)("b",{children:"[[cmdhook]]"})]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using the config file:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:'[[cmdhook]]\n command = \'/my/cool/script\' # Path to command or script.\n shell = false # Runs the command inside /bin/sh (\'nix) or cmd.exe (Windows).\n name = "" # Provide an optional name for logging.\n silent = false # Hides command output from logs.\n events = [1,2,3,4] # list of event ids to include, [0] == all.\n exclude = ["lidarr"] # list of apps to exclude, ie. ["radarr", "lidarr"]\n timeout = "10s" # You can adjust how long to wait for a server response.\n'})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using environment variables:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"UN_CMDHOOK_0_COMMAND=/usr/bin/env\nUN_CMDHOOK_0_NAME=\nUN_CMDHOOK_0_TIMEOUT=10s\nUN_CMDHOOK_0_SILENT=false\nUN_CMDHOOK_0_SHELL=true\nUN_CMDHOOK_0_EXCLUDE_0=lidarr\nUN_CMDHOOK_0_EXCLUDE_1=readarr\nUN_CMDHOOK_0_EVENTS_0=1\nUN_CMDHOOK_0_EVENTS_1=2\nUN_CMDHOOK_0_EVENTS_2=3\nUN_CMDHOOK_0_EVENTS_3=4\n"})})]}),"\n",(0,n.jsxs)(s.p,{children:["Unpackerr can execute commands (or scripts) before and after an archive extraction.\nThe only thing required is a command. Name is optional, and used in logs only.\nSetting ",(0,n.jsx)(s.code,{children:"shell"})," to ",(0,n.jsx)(s.code,{children:"true"})," executes your command after ",(0,n.jsx)(s.code,{children:"/bin/sh -c"})," or ",(0,n.jsx)(s.code,{children:"cmd.exe /c"}),"\non Windows."]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Config Name"}),(0,n.jsx)(s.th,{children:"Variable Name"}),(0,n.jsx)(s.th,{children:"Default / Note"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"cmdhook.command"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_CMDHOOK_0_COMMAND"})}),(0,n.jsx)(s.td,{children:"No Default; command to run"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"cmdhook.name"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_CMDHOOK_0_NAME"})}),(0,n.jsx)(s.td,{children:"Defaults to first word in command; provide an optional name for logs"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"cmdhook.timeout"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_CMDHOOK_0_TIMEOUT"})}),(0,n.jsxs)(s.td,{children:["Defaults to global timeout, usually ",(0,n.jsx)(s.code,{children:"10s"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"cmdhook.silent"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_CMDHOOK_0_SILENT"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Hide command output from logs"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"cmdhook.shell"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_CMDHOOK_0_SHELL"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Run command inside a shell"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"cmdhook.exclude"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_CMDHOOK_0_EXCLUDE"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"[]"})," / List of apps to exclude: radarr, sonarr, folders, etc"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"cmdhook.events"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_CMDHOOK_0_EVENTS"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"[0]"})," / List of event IDs to send (shown under Webhooks)"]})]})]})]}),"\n",(0,n.jsxs)(s.p,{children:["All extraction data is input to the command using environment variables, see example below.\nExtracted files variables names begin with ",(0,n.jsx)(s.code,{children:"UN_DATA_FILES_"}),".\nTry ",(0,n.jsx)(s.code,{children:"/usr/bin/env"})," as an example command to see what variables are available."]}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsx)("summary",{children:"Example Output Variables"}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-none",children:"UN_DATA_OUTPUT=folder/subfolder_unpackerred\nUN_PATH=folder/subfolder\nUN_DATA_START=2021-10-04T23:04:27.849216-07:00\nUN_REVISION=\nUN_EVENT=extracted\nUN_GO=go1.17\nUN_DATA_ARCHIVES=folder/subfolder_unpackerred/Funjetting.rar,folder/subfolder_unpackerred/Funjetting.r00,folder/subfolder/files.zip\nUN_DATA_ARCHIVE_2=folder/subfolder/files.zip\nUN_DATA_ARCHIVE_1=folder/subfolder_unpackerred/Funjetting.r00\nUN_DATA_ARCHIVE_0=folder/subfolder_unpackerred/Funjetting.rar\nUN_DATA_FILES=folder/subfolder/Funjetting.mp3,folder/subfolder/Funjetting.r00,folder/subfolder/Funjetting.rar,folder/subfolder/_unpackerred.subfolder.txt\nUN_DATA_FILE_1=folder/subfolder/Funjetting.r00\nUN_DATA_BYTES=2407624\nPWD=/Users/david/go/src/github.com/Unpackerr/unpackerr\nUN_DATA_FILE_0=folder/subfolder/Funjetting.mp3\nUN_OS=darwin\nUN_DATA_FILE_3=folder/subfolder/_unpackerred.subfolder.txt\nUN_DATA_FILE_2=folder/subfolder/Funjetting.rar\nUN_BRANCH=\nUN_TIME=2021-10-04T23:04:27.869613-07:00\nUN_VERSION=\nUN_DATA_QUEUE=0\nSHLVL=1\nUN_APP=Folder\nUN_STARTED=2021-10-04T23:03:22.849253-07:00\nUN_ARCH=amd64\nUN_DATA_ELAPSED=20.365752ms\nUN_DATA_ERROR=\n"})})]}),"\n",(0,n.jsx)(s.h2,{id:"webhooks",children:"Webhooks"}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsxs)("summary",{children:["Examples. Prefix: ",(0,n.jsx)("b",{children:"UN_WEBHOOK_#"}),", Header: ",(0,n.jsx)("b",{children:"[[webhook]]"})]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using the config file:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:'[[webhook]]\n url = "https://notifiarr.com/api/v1/notification/unpackerr/api_key_from_notifiarr_com"\n name = "" # Set this to hide the URL in logs.\n silent = false # Do not log success (less log spam).\n events = [1,2,3] # List of event ids to include, 0 == all.\n ## Advanced Optional Webhook Configuration\n nickname = "" # Used in Discord and Slack templates as bot name, in Telegram as chat_id.\n channel = "" # Passed into templates. Used in Slack templates for destination channel.\n template_path = "" # Override internal webhook template for discord.com or other hooks.\n template = "" # Values: notifiarr, discord, telegram, gotify, pushover, slack\n ignore_ssl = true # Set this to true to ignore the SSL certificate on the server.\n timeout = "9s" # You can adjust how long to wait for a server response.\n exclude = ["lidarr"] # List of apps to exclude, ie. ["radarr", "lidarr"]\n content_type = "application/json" # Set this if your template uses another MIME type.\n'})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using environment variables:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"UN_WEBHOOK_0_URL=https://a303739bc23bfcfa79b9cf36fd92833x.m.pipedream.net\nUN_WEBHOOK_0_NAME=\nUN_WEBHOOK_0_NICKNAME=Unpackerr\nUN_WEBHOOK_0_CHANNEL=\nUN_WEBHOOK_0_TIMEOUT=10s\nUN_WEBHOOK_0_SILENT=false\nUN_WEBHOOK_0_IGNORE_SSL=false\nUN_WEBHOOK_0_EXCLUDE_0=lidarr\nUN_WEBHOOK_0_EXCLUDE_1=readarr\nUN_WEBHOOK_0_EVENTS_0=1\nUN_WEBHOOK_0_EVENTS_1=2\nUN_WEBHOOK_0_EVENTS_2=3\nUN_WEBHOOK_0_TEMPLATE_PATH=\nUN_WEBHOOK_0_TEMPLATE=\nUN_WEBHOOK_0_CONTENT_TYPE=application/json\n"})})]}),"\n",(0,n.jsxs)(s.p,{children:["This application can send a ",(0,n.jsx)(s.code,{children:"POST"})," webhook to a URL when an extraction begins, and again\nwhen it finishes. Configure 1 or more webhook URLs with the parameters below.\nWorks great with ",(0,n.jsx)(s.a,{href:"https://notifiarr.com",children:"notifiarr.com"}),". You can use\n",(0,n.jsx)(s.a,{href:"https://requestbin.com/r/",children:"requestbin.com"})," to test and ",(0,n.jsx)(s.em,{children:"see"})," the payload."]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Config Name"}),(0,n.jsx)(s.th,{children:"Variable Name"}),(0,n.jsx)(s.th,{children:"Default / Note"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.url"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_URL"})}),(0,n.jsx)(s.td,{children:"No Default; URL to send POST webhook to"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.name"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_NAME"})}),(0,n.jsx)(s.td,{children:"Defaults to URL; provide an optional name to hide the URL in logs"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.nickname"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_NICKNAME"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"Unpackerr"})," / Passed into templates for telegram, discord and slack hooks"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.channel"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_CHANNEL"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:'""'})," / Passed into templates for slack.com webhooks"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.timeout"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_TIMEOUT"})}),(0,n.jsxs)(s.td,{children:["Defaults to global timeout, usually ",(0,n.jsx)(s.code,{children:"10s"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.silent"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_SILENT"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Hide successful POSTs from logs"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.ignore_ssl"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_IGNORE_SSL"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Ignore invalid SSL certificates"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.exclude"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_EXCLUDE"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"[]"})," / List of apps to exclude: radarr, sonarr, folders, etc"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.events"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_EVENTS"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"[0]"})," / List of event IDs to send (shown below)"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.template_path"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_TEMPLATE_PATH"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:'""'})," / Instead of an internal template, provide your own"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.template"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_TEMPLATE"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:'""'})," / Instead of auto template selection, force one; options below"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.content_type"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_CONTENT_TYPE"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"application/json"})," / Content-Type header sent to webhook"]})]})]})]}),"\n",(0,n.jsx)(s.h3,{id:"webhook-notes",children:"Webhook Notes"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsxs)(s.em,{children:[(0,n.jsx)(s.code,{children:"Nickname"})," should equal the ",(0,n.jsx)(s.code,{children:"chat_id"})," value in Telegram webhooks."]})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsxs)(s.em,{children:[(0,n.jsx)(s.code,{children:"Channel"})," is used as destination channel for Slack. It's not used in others."]})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsxs)(s.em,{children:[(0,n.jsx)(s.code,{children:"Nickname"})," and ",(0,n.jsx)(s.code,{children:"Channel"})," may be used as custom values in custom templates."]})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsxs)(s.em,{children:[(0,n.jsx)(s.code,{children:"Name"})," is only used in logs, but it's also available as a template value as ",(0,n.jsx)(s.code,{children:"{{name}}"}),"."]})}),"\n",(0,n.jsxs)(s.li,{children:["Built-In Templates: ",(0,n.jsx)(s.code,{children:"pushover"}),", ",(0,n.jsx)(s.code,{children:"telegram"}),", ",(0,n.jsx)(s.code,{children:"discord"}),", ",(0,n.jsx)(s.code,{children:"notifiarr"}),", ",(0,n.jsx)(s.code,{children:"slack"}),", ",(0,n.jsx)(s.code,{children:"gotify"}),"."]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"event-ids",children:"Event IDs"}),"\n",(0,n.jsx)(s.p,{children:"Event IDs are needed/used in command hooks and webhooks."}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"0"})," = all, ",(0,n.jsx)(s.code,{children:"1"})," = queued, ",(0,n.jsx)(s.code,{children:"2"})," = extracting,\n",(0,n.jsx)(s.code,{children:"3"})," = extract failed, ",(0,n.jsx)(s.code,{children:"4"})," = extracted, ",(0,n.jsx)(s.code,{children:"5"})," = imported,\n",(0,n.jsx)(s.code,{children:"6"})," = deleting, ",(0,n.jsx)(s.code,{children:"7"})," = delete failed, ",(0,n.jsx)(s.code,{children:"8"})," = deleted"]})]})}function a(e={}){const{wrapper:s}={...(0,d.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},8453:(e,s,r)=>{r.d(s,{R:()=>i,x:()=>t});var n=r(6540);const d={},l=n.createContext(d);function i(e){const s=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function t(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(d):e.components||d:i(e.components),n.createElement(l.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/43892b4c.ddd79ee2.js b/assets/js/43892b4c.ddd79ee2.js new file mode 100644 index 0000000..c37ae7c --- /dev/null +++ b/assets/js/43892b4c.ddd79ee2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkunpackerrdox=self.webpackChunkunpackerrdox||[]).push([[782],{4191:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>t,toc:()=>o});var n=r(4848),d=r(8453);const i={id:"configuration",title:"Application Configuration",pagination_prev:"install/choosemethod",pagination_next:"unpackerr/troubleshooting",description:"Unpackerr configurations explained."},l=void 0,t={id:"install/configuration",title:"Application Configuration",description:"Unpackerr configurations explained.",source:"@site/docs/install/configuration.md",sourceDirName:"install",slug:"/install/configuration",permalink:"/docs/install/configuration",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{id:"configuration",title:"Application Configuration",pagination_prev:"install/choosemethod",pagination_next:"unpackerr/troubleshooting",description:"Unpackerr configurations explained."},sidebar:"someSidebar",previous:{title:"Choose Install Method",permalink:"/docs/install/choosemethod"},next:{title:"Troubleshooting",permalink:"/docs/unpackerr/troubleshooting"}},c={},o=[{value:"Config",id:"config",level:2},{value:"Generator",id:"generator",level:3},{value:"Two+ Instances",id:"two-instances",level:3},{value:"Global Settings",id:"global-settings",level:2},{value:"Secrets and Passwords",id:"secrets-and-passwords",level:2},{value:"Webserver",id:"webserver",level:2},{value:"Sonarr",id:"sonarr",level:2},{value:"Radarr",id:"radarr",level:2},{value:"Lidarr",id:"lidarr",level:2},{value:"Readarr",id:"readarr",level:2},{value:"Whisparr",id:"whisparr",level:2},{value:"Folder",id:"folder",level:2},{value:"Command Hooks",id:"command-hooks",level:2},{value:"Webhooks",id:"webhooks",level:2},{value:"Webhook Notes",id:"webhook-notes",level:3},{value:"Event IDs",id:"event-ids",level:2}];function a(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,d.R)(),...e.components},{Details:r}=s;return r||function(e,s){throw new Error("Expected "+(s?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(s.p,{children:["This is where to learn what each config item is, the default\nvalues for each item, and the name to use in an environment variable.\nYou should use the data here along with the data in the\n",(0,n.jsx)(s.a,{href:"https://github.com/Unpackerr/unpackerr/blob/main/examples/unpackerr.conf.example",children:"example config file"}),"\nto paint the full picture of how to configure Unpackerr."]}),"\n",(0,n.jsx)(s.h2,{id:"config",children:"Config"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Setting a log file is strongly recommend. This makes it much easier to troubleshoot problems."}),"\n",(0,n.jsxs)(s.li,{children:["To use a config file in Docker, mount ",(0,n.jsx)(s.code,{children:"/config"})," to the container and Unpackerr will write a config file.","\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsxs)(s.li,{children:["Update the new file at ",(0,n.jsx)(s.code,{children:"/config/unpackerr.conf"})," and restart the container."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(s.li,{children:["When using a config file you must uncomment at minimum the ",(0,n.jsx)(s.code,{children:"[[header]]"})," ",(0,n.jsxs)("font",{color:"gray",children:["\nex. ",(0,n.jsx)(s.code,{children:"[[radarr]]"})]}),", ",(0,n.jsx)(s.code,{children:"url"})," and ",(0,n.jsx)(s.code,{children:"api_key"}),"."]}),"\n",(0,n.jsxs)(s.li,{children:["Uncomment means remove the hash ",(0,n.jsx)(s.code,{children:"#"})," at the beginning of the line."]}),"\n",(0,n.jsxs)(s.li,{children:["The config file format is ",(0,n.jsx)(s.a,{href:"https://toml.io",children:"TOML"}),".","\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Indentation is not important like YAML files, but it's used for ease of readability."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"generator",children:"Generator"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.a,{href:"https://notifiarr.com",children:"Notifiarr"})," hosts a configuration file maker.\nSimply fill in a web form, and click a button to get a working config file."]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsxs)(s.strong,{children:["Access the generator here: ",(0,n.jsx)(s.a,{href:"https://notifiarr.com/unpackerr.php",children:"https://notifiarr.com/unpackerr.php"})]})}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"two-instances",children:"Two+ Instances"}),"\n",(0,n.jsxs)(s.p,{children:["When adding a second (or third+) instance to the ",(0,n.jsx)(s.strong,{children:"config file"}),", you just\nadd another ",(0,n.jsx)(s.code,{children:"[[header]]"})," ",(0,n.jsxs)("font",{color:"gray",children:["ex. ",(0,n.jsx)(s.code,{children:"[[sonarr]]"})]})," and the\n",(0,n.jsx)(s.code,{children:"url"}),"/",(0,n.jsx)(s.code,{children:"api_key"}),"/etc under it. When adding a second instance to the ",(0,n.jsx)(s.strong,{children:"environment\nvariables"}),", you must increment the ",(0,n.jsx)(s.code,{children:"0"})," to a ",(0,n.jsx)(s.code,{children:"1"}),". And to a ",(0,n.jsx)(s.code,{children:"2"})," if you have 3\ninstances. There is no limit to the number of supported instances. This notation\nworks for all starr apps, folders, command hooks, and web hooks."]}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsx)("summary",{children:"Config examples with multiple instances."}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Config File example with two Radarrs and two Folders."}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",children:'[[radarr]]\n url = "http://radarr"\n api_key = "32characters"\n\n[[radarr]]\n url = "http://radarr4k"\n api_key = "32morecharacters"\n\n[[folder]]\n path = "/data/downloads/software/"\n\n[[folder]]\n path = "/data/downloads/games/"\n'})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Environment Variable example with two Radarrs and two Folders setting the same values as above."}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"UN_RADARR_0_URL=http://radarr\nUN_RADARR_0_API_KEY=32characters\nUN_RADARR_1_URL=http://radarr4k\nUN_RADARR_1_API_KEY=32morecharacters\nUN_FOLDER_0_PATH=/data/downloads/software/\nUN_FOLDER_1_PATH=/data/downloads/games/\n"})})]}),"\n",(0,n.jsxs)(s.p,{children:["Anything that ",(0,n.jsx)(s.a,{href:"https://github.com/Unpackerr/unpackerr/blob/main/examples/unpackerr.conf.example#L87",children:"has a header"}),"\nwith double brackets ",(0,n.jsx)(s.code,{children:"[[..]]"})," can be repeated as many times as you'd like."]}),"\n",(0,n.jsx)(s.h2,{id:"global-settings",children:"Global Settings"}),"\n",(0,n.jsxs)(s.p,{children:["These values must exist at the top of the config file.\nIf you put them anywhere else they may be attached to a ",(0,n.jsx)(s.code,{children:"[header]"})," inadvertently.\nWhen using environment variables, you can simply omit the ones you don't set or change from default."]}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsxs)("summary",{children:["Examples. Prefix: ",(0,n.jsx)("b",{children:"UN"})]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using the config file:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-json",children:'debug = false\nquiet = false\nerror_stderr = false\nactivity = false\nlog_queues = "1m"\nlog_file = ""\nlog_files = 10\nlog_file_mb = 10\ninterval = "2m"\nstart_delay = "1m"\nretry_delay = "5m"\nparallel = 1\nfile_mode = "0644"\ndir_mode = "0755"\n\n[folders]\n interval = "0s"\n'})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using environment variables:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-json",children:"TZ=America/New_York\nUN_DEBUG=false\nUN_QUIET=false\nUN_ERROR_STDERR=false\nUN_ACTIVITY=false\nUN_LOG_QUEUES=1m\nUN_LOG_FILE=\nUN_LOG_FILES=10\nUN_LOG_FILE_MB=10\nUN_INTERVAL=2m\nUN_START_DELAY=1m\nUN_RETRY_DELAY=5m\nUN_MAX_RETRIES=3\nUN_PARALLEL=1\nUN_FILE_MODE=0644\nUN_DIR_MODE=0755\nUN_FOLDERS_INTERVAL=0s\n"})})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Config Name"}),(0,n.jsx)(s.th,{children:"Variable Name"}),(0,n.jsx)(s.th,{children:"Default / Note"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"debug"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_DEBUG"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Turns on more logs"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"quiet"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_QUIIET"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Do not print logs to stdout or stderr"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"error_stderr"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_ERROR_STDERR"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Print ERROR lines to stderr instead of stdout."]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"activity"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_ACTIVITY"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Setting true will print only queue counts with activity."]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"log_queues"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LOG_QUEUES"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"1m"})," / Uses Go Duration. How often to print internal counters."]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"log_file"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LOG_FILE"})}),(0,n.jsx)(s.td,{children:"None by default. Optionally provide a file path to write logs"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"log_files"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LOG_FILES"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"10"})," / Log files to keep after rotating. ",(0,n.jsx)(s.code,{children:"0"})," disables rotation"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"log_file_mb"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LOG_FILE_MB"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"10"})," / Max size of log files in megabytes"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"interval"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_INTERVAL"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"2m"})," / How often apps are polled, recommend ",(0,n.jsx)(s.code,{children:"1m"})," to ",(0,n.jsx)(s.code,{children:"5m"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"start_delay"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_START_DELAY"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"1m"})," / Files are queued at least this long before extraction"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"retry_delay"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_RETRY_DELAY"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"5m"})," / Failed extractions are retried after at least this long"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"max_retries"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_MAX_RETRIES"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"3"})," / Times to retry failed extractions. ",(0,n.jsx)(s.code,{children:"0"})," = unlimited."]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"parallel"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_PARALLEL"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"1"})," / Concurrent extractions, only recommend ",(0,n.jsx)(s.code,{children:"1"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"file_mode"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_FILE_MODE"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"0644"})," / Extracted files are written with this mode"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"dir_mode"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_DIR_MODE"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"0755"})," / Extracted folders are written with this mode"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"passwords"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_PASSWORD_0"})}),(0,n.jsx)(s.td,{children:"No default; empty list. Provide a list of RAR passwords to try."})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"folders.interval"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_FOLDERS_INTERVAL"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"1s"})," / How often poller checks for new folders. Use ",(0,n.jsx)(s.code,{children:"1ms"})," to disable it."]})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"secrets-and-passwords",children:"Secrets and Passwords"}),"\n",(0,n.jsxs)(s.p,{children:['If a wrong password is provided, the entire archive must\nbe read before we know it\'s a bad password.\nProviding many passwords here can drastically slow down\nextractions and cause extra disk IO. You may also specify\na password file by providing a "password" in this format: ',(0,n.jsx)(s.code,{children:"filepath:/path/to/passwords.txt"}),".\nThe file must contain 1 password per line."]}),"\n",(0,n.jsxs)(s.admonition,{title:"Other Secrets",type:"info",children:[(0,n.jsxs)(s.p,{children:["You may store any string parameter (except time intervals) into a separate file\nby setting the value to ",(0,n.jsx)(s.code,{children:"filepath:/path/to/file.txt"}),". In other words, if you want\nyour Radarr API key to be read from a separate file, instead of storing it directly\nin the config file or environment variables you can do this:"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-json",children:'[[radarr]]\n url = "https://some.url/radarr"\n api_key = "filepath:/etc/secrets/radarr.txt"\n'})}),(0,n.jsx)(s.p,{children:"Or if using environment variables:"}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"UN_RADARR_0_API_KEY=filepath:/etc/secrets/radarr.txt\n"})}),(0,n.jsxs)(s.p,{children:["Then store the API key (and only the API key) in ",(0,n.jsx)(s.code,{children:"/etc/secrets/radarr.txt"}),"."]}),(0,n.jsx)(s.p,{children:(0,n.jsx)(s.em,{children:(0,n.jsx)("font",{color:"gray",children:"This feature was added in Unpackerr v0.14.0."})})})]}),"\n",(0,n.jsx)(s.h2,{id:"webserver",children:"Webserver"}),"\n",(0,n.jsx)(s.admonition,{title:"Metrics",type:"note",children:(0,n.jsxs)(s.p,{children:["The web server currently only provides prometheus metrics, which you can display in\n",(0,n.jsx)(s.a,{href:"https://grafana.com/grafana/dashboards/18817-unpackerr/",children:"Grafana"}),".\nIt provides no UI. This may change in the future. The web server was added in v0.12.0."]})}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsxs)("summary",{children:["Examples. Prefix: ",(0,n.jsx)("b",{children:"UN_WEBSERVER"}),", Header: ",(0,n.jsx)("b",{children:"[webserver]"})]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using the config file:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-json",children:'[webserver]\n metrics = true\n listen_addr = "0.0.0.0:5656"\n log_file = ""\n log_files = 10\n log_file_mb = 10\n ssl_cert_file = ""\n ssl_key_file = ""\n urlbase = "/"\n upstreams = [ "127.0.0.1/32", "10.1.2.0/24" ]\n'})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using environment variables:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"UN_WEBSERVER_METRICS=true\nUN_WEBSERVER_LISTEN_ADDR=0.0.0.0:5656\nUN_WEBSERVER_LOG_FILE=\nUN_WEBSERVER_LOG_FILES=10\nUN_WEBSERVER_LOG_FILE_MB=10\nUN_WEBSERVER_URLBASE=/\nUN_WEBSERVER_UPSTREAMS=127.0.0.1/32,10.1.2.0/24\n"})})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Config Name"}),(0,n.jsx)(s.th,{children:"Variable Name"}),(0,n.jsx)(s.th,{children:"Default / Note"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webserver.metrics"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBSERVER_METRICS"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Set this to true to enable the webserver, and metrics"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webserver.listen_addr"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBSERVER_LISTEN_ADDR"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"0.0.0.0:5656"})," / ip",":port"," to listen on. ",(0,n.jsx)(s.code,{children:"0.0.0.0"})," is all IPs"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webserver.log_file"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBSERVER_LOG_FILE"})}),(0,n.jsx)(s.td,{children:"No default. Optionally provide a file path to write HTTP logs"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webserver.log_files"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBSERVER_LOG_FILES"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"10"})," / Log files to keep after rotating. ",(0,n.jsx)(s.code,{children:"0"})," to disable"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webserver.log_file_mb"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBSERVER_LOG_FILE_MB"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"10"})," / Max size of HTTP log files in megabytes"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webserver.ssl_cert_file"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBSERVER_SSL_CERT_FILE"})}),(0,n.jsx)(s.td,{children:"No default. Path to SSL cert file to serve HTTPS"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webserver.ssl_key_file"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBSERVER_SSL_KEY_FILE"})}),(0,n.jsx)(s.td,{children:"No default. Path to SSL key file to serve HTTPS"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webserver.urlbase"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBSERVER_URLBASE"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"/"})," / Base URL path to serve HTTP content"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webserver.upstreams"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBSERVER_UPSTREAMS"})}),(0,n.jsx)(s.td,{children:"No default. List of upstream proxy CIDRs or IPs to trust"})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"sonarr",children:"Sonarr"}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsxs)("summary",{children:["Examples. Prefix: ",(0,n.jsx)("b",{children:"UN_SONARR_#"}),", Header: ",(0,n.jsx)("b",{children:"[[sonarr]]"})]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using the config file:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-json",children:'[[sonarr]]\n url = "http://127.0.0.1:8989"\n api_key = "0123456789abcdef0123456789abcdef"\n paths = [\'/downloads\']\n protocols = "torrent"\n timeout = "10s"\n delete_delay = "5m"\n delete_orig = false\n syncthing = false\n'})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using environment variables:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"UN_SONARR_0_URL=http://sonarr:8989\nUN_SONARR_0_API_KEY=\nUN_SONARR_0_PATHS_0=/downloads\nUN_SONARR_0_PROTOCOLS=torrent\nUN_SONARR_0_TIMEOUT=10s\nUN_SONARR_0_DELETE_ORIG=false\nUN_SONARR_0_DELETE_DELAY=5m\n"})})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Config Name"}),(0,n.jsx)(s.th,{children:"Variable Name"}),(0,n.jsx)(s.th,{children:"Default / Note"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonarr.url"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_SONARR_0_URL"})}),(0,n.jsxs)(s.td,{children:["No Default. Something like: ",(0,n.jsx)(s.code,{children:"http://localhost:8989"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonarr.api_key"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_SONARR_0_API_KEY"})}),(0,n.jsx)(s.td,{children:"No Default. Provide URL and API key if you use Sonarr"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonarr.paths"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_SONARR_0_PATHS_0"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"/downloads"})," List of paths where content is downloaded for Sonarr. Used as fallback if the path Sonarr reports does not exist or is not accessible."]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonarr.protocols"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_SONARR_0_PROTOCOLS"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"torrent"})," Protocols to process. Alt: ",(0,n.jsx)(s.code,{children:"torrent,usenet"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonarr.timeout"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_SONARR_0_TIMEOUT"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"10s"})," / How long to wait for the app to respond"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonarr.delete_orig"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_SONARR_0_DELETE_ORIG"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Delete archives after import? Recommend not setting this to true"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonarr.delete_delay"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_SONARR_0_DELETE_DELAY"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"5m"})," / Extracts are deleted this long after import, ",(0,n.jsx)(s.code,{children:"-1s"})," to disable"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"sonarr.syncthing"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_SONARR_0_SYNCTHING"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Setting this to true makes unpackerr wait for syncthing to finish"]})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"radarr",children:"Radarr"}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsxs)("summary",{children:["Examples. Prefix: ",(0,n.jsx)("b",{children:"UN_RADARR_#"}),", Header: ",(0,n.jsx)("b",{children:"[[radarr]]"})]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using the config file:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-json",children:'[[radarr]]\n url = "http://127.0.0.1:7878"\n api_key = "0123456789abcdef0123456789abcdef"\n paths = [\'/downloads\']\n protocols = "torrent"\n timeout = "10s"\n delete_delay = "5m"\n delete_orig = false\n syncthing = false\n'})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using environment variables:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"UN_RADARR_0_URL=http://radarr:7878\nUN_RADARR_0_API_KEY=0123456789abcdef0123456789abcdef\nUN_RADARR_0_PATHS_0=/downloads\nUN_RADARR_0_PROTOCOLS=torrent\nUN_RADARR_0_TIMEOUT=10s\nUN_RADARR_0_DELETE_ORIG=false\nUN_RADARR_0_DELETE_DELAY=5m\n"})})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Config Name"}),(0,n.jsx)(s.th,{children:"Variable Name"}),(0,n.jsx)(s.th,{children:"Default / Note"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"radarr.url"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_RADARR_0_URL"})}),(0,n.jsxs)(s.td,{children:["No Default. Something like: ",(0,n.jsx)(s.code,{children:"http://localhost:7878"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"radarr.api_key"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_RADARR_0_API_KEY"})}),(0,n.jsx)(s.td,{children:"No Default. Provide URL and API key if you use Radarr"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"radarr.paths"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_RADARR_0_PATHS_0"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"/downloads"})," List of paths where content is downloaded for Radarr. Used as fallback if the path Radarr reports does not exist or is not accessible"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"radarr.protocols"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_RADARR_0_PROTOCOLS"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"torrent"})," Protocols to process. Alt: ",(0,n.jsx)(s.code,{children:"torrent,usenet"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"radarr.timeout"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_RADARR_0_TIMEOUT"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"10s"})," / How long to wait for the app to respond"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"radarr.delete_orig"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_RADARR_0_DELETE_ORIG"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Delete archives after import? Recommend not setting this to true"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"radarr.delete_delay"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_RADARR_0_DELETE_DELAY"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"5m"})," / Extracts are deleted this long after import, ",(0,n.jsx)(s.code,{children:"-1s"})," to disable"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"radarr.syncthing"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_RADARR_0_SYNCTHING"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Setting this to true makes unpackerr wait for syncthing to finish"]})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"lidarr",children:"Lidarr"}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsxs)("summary",{children:["Examples. Prefix: ",(0,n.jsx)("b",{children:"UN_LIDARR_#"}),", Header: ",(0,n.jsx)("b",{children:"[[lidarr]]"})]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using the config file:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-json",children:'[[lidarr]]\n url = "http://127.0.0.1:8686"\n api_key = "0123456789abcdef0123456789abcdef"\n paths = [\'/downloads\']\n protocols = "torrent"\n timeout = "10s"\n delete_delay = "5m"\n delete_orig = false\n syncthing = false\n'})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using environment variables:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"UN_LIDARR_0_URL=http://lidarr:8686\nUN_LIDARR_0_API_KEY=0123456789abcdef0123456789abcdef\nUN_LIDARR_0_PATHS_0=/downloads\nUN_LIDARR_0_PROTOCOLS=torrent\nUN_LIDARR_0_TIMEOUT=10s\nUN_LIDARR_0_DELETE_ORIG=false\nUN_LIDARR_0_DELETE_DELAY=5m\n"})})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Config Name"}),(0,n.jsx)(s.th,{children:"Variable Name"}),(0,n.jsx)(s.th,{children:"Default / Note"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"lidarr.url"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LIDARR_0_URL"})}),(0,n.jsxs)(s.td,{children:["No Default. Something like: ",(0,n.jsx)(s.code,{children:"http://localhost:8686"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"lidarr.api_key"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LIDARR_0_API_KEY"})}),(0,n.jsx)(s.td,{children:"No Default. Provide URL and API key if you use Lidarr"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"lidarr.paths"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LIDARR_0_PATHS_0"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"/downloads"})," List of paths where content is downloaded for Lidarr. Used as fallback if the path Lidarr reports does not exist or is not accessible"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"lidarr.protocols"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LIDARR_0_PROTOCOLS"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"torrent"})," Protocols to process. Alt: ",(0,n.jsx)(s.code,{children:"torrent,usenet"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"lidarr.timeout"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LIDARR_0_TIMEOUT"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"10s"})," / How long to wait for the app to respond"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"lidarr.delete_orig"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LIDARR_0_DELETE_ORIG"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Delete archives after import? Recommend not setting this to true"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"lidarr.delete_delay"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LIDARR_0_DELETE_DELAY"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"5m"})," / Extracts are deleted this long after import, ",(0,n.jsx)(s.code,{children:"-1s"})," to disable"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"lidarr.syncthing"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_LIDARR_0_SYNCTHING"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Setting this to true makes unpackerr wait for syncthing to finish"]})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"readarr",children:"Readarr"}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsxs)("summary",{children:["Examples. Prefix: ",(0,n.jsx)("b",{children:"UN_READARR_#"}),", Header: ",(0,n.jsx)("b",{children:"[[readarr]]"})]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using the config file:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-json",children:'[[readarr]]\n url = "http://127.0.0.1:8787"\n api_key = "0123456789abcdef0123456789abcdef"\n paths = [\'/downloads\']\n protocols = "torrent"\n timeout = "10s"\n delete_delay = "5m"\n delete_orig = false\n syncthing = false\n'})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using environment variables:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"UN_READARR_0_URL=http://readarr:8787\nUN_READARR_0_API_KEY=0123456789abcdef0123456789abcdef\nUN_READARR_0_PATHS_0=/downloads\nUN_READARR_0_PROTOCOLS=torrent\nUN_READARR_0_TIMEOUT=10s\nUN_READARR_0_DELETE_ORIG=false\nUN_READARR_0_DELETE_DELAY=5m\n"})})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Config Name"}),(0,n.jsx)(s.th,{children:"Variable Name"}),(0,n.jsx)(s.th,{children:"Default / Note"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"readarr.url"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_READARR_0_URL"})}),(0,n.jsxs)(s.td,{children:["No Default. Something like: ",(0,n.jsx)(s.code,{children:"http://localhost:8787"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"readarr.api_key"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_READARR_0_API_KEY"})}),(0,n.jsx)(s.td,{children:"No Default. Provide URL and API key if you use Readarr"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"readarr.paths"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_READARR_0_PATHS_0"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"/downloads"})," List of paths where content is downloaded for Readarr. Used as fallback if the path Readarr reports does not exist or is not accessible"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"readarr.protocols"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_READARR_0_PROTOCOLS"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"torrent"})," Protocols to process. Alt: ",(0,n.jsx)(s.code,{children:"torrent,usenet"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"readarr.timeout"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_READARR_0_TIMEOUT"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"10s"})," / How long to wait for the app to respond"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"readarr.delete_orig"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_READARR_0_DELETE_ORIG"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Delete archives after import? Recommend not setting this to true"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"readarr.delete_delay"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_READARR_0_DELETE_DELAY"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"5m"})," / Extracts are deleted this long after import, ",(0,n.jsx)(s.code,{children:"-1s"})," to disable"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"readarr.syncthing"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_READARR_0_SYNCTHING"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Setting this to true makes unpackerr wait for syncthing to finish"]})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"whisparr",children:"Whisparr"}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsxs)("summary",{children:["Examples. Prefix: ",(0,n.jsx)("b",{children:"UN_WHISPARR_#"}),", Header: ",(0,n.jsx)("b",{children:"[[whisparr]]"})]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using the config file:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-json",children:'[[whisparr]]\n url = "http://127.0.0.1:6969"\n api_key = "0123456789abcdef0123456789abcdef"\n paths = [\'/downloads\']\n protocols = "torrent"\n timeout = "10s"\n delete_delay = "5m"\n delete_orig = false\n syncthing = false\n'})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using environment variables:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-shell",children:"UN_WHISPARR_0_URL=http://whisparr:6969\nUN_WHISPARR_0_API_KEY=0123456789abcdef0123456789abcdef\nUN_WHISPARR_0_PATHS_0=/downloads\nUN_WHISPARR_0_PROTOCOLS=torrent\nUN_WHISPARR_0_TIMEOUT=10s\nUN_WHISPARR_0_DELETE_ORIG=false\nUN_WHISPARR_0_DELETE_DELAY=5m\n"})})]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Config Name"}),(0,n.jsx)(s.th,{children:"Variable Name"}),(0,n.jsx)(s.th,{children:"Default / Note"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"whisparr.url"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WHISPARR_0_URL"})}),(0,n.jsxs)(s.td,{children:["No Default. Something like: ",(0,n.jsx)(s.code,{children:"http://localhost:8787"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"whisparr.api_key"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WHISPARR_0_API_KEY"})}),(0,n.jsx)(s.td,{children:"No Default. Provide URL and API key if you use Readarr"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"whisparr.paths"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WHISPARR_0_PATHS_0"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"/downloads"})," List of paths where content is downloaded for Readarr. Used as fallback if the path Readarr reports does not exist or is not accessible"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"whisparr.protocols"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WHISPARR_0_PROTOCOLS"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"torrent"})," Protocols to process. Alt: ",(0,n.jsx)(s.code,{children:"torrent,usenet"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"whisparr.timeout"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WHISPARR_0_TIMEOUT"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"10s"})," / How long to wait for the app to respond"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"whisparr.delete_orig"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WHISPARR_0_DELETE_ORIG"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Delete archives after import? Recommend not setting this to true"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"whisparr.delete_delay"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WHISPARR_0_DELETE_DELAY"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"5m"})," / Extracts are deleted this long after import, ",(0,n.jsx)(s.code,{children:"-1s"})," to disable"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"whisparr.syncthing"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WHISPARR_0_SYNCTHING"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Setting this to true makes unpackerr wait for syncthing to finish"]})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"folder",children:"Folder"}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsxs)("summary",{children:["Examples. Prefix: ",(0,n.jsx)("b",{children:"UN_FOLDER_#"}),", Header: ",(0,n.jsx)("b",{children:"[[folder]]"})]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using the config file:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-json",children:"[[folder]]\n path = '''/some/folder/to/watch'''\n extract_path = ''\n delete_after = \"10m\"\n disable_recursion = false\n delete_files = false\n delete_original = false\n disable_log = false\n move_back = false\n extract_isos = false\n"})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using environment variables:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-json",children:"UN_FOLDER_0_PATH=/some/folder/to/watch\nUN_FOLDER_0_EXTRACT_PATH=\nUN_FOLDER_0_DELETE_AFTER=10m\nUN_FOLDER_0_DELETE_ORIGINAL=false\nUN_FOLDER_0_DELETE_FILES=false\nUN_FOLDER_0_MOVE_BACK=false\n"})})]}),"\n",(0,n.jsx)(s.p,{children:"Folders are a way to watch a folder for things to extract. You can use this to\nmonitor your download client's \"move to\" path if you're not using it with an Starr app."}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Config Name"}),(0,n.jsx)(s.th,{children:"Variable Name"}),(0,n.jsx)(s.th,{children:"Default / Note"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"folder.path"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_FOLDER_0_PATH"})}),(0,n.jsxs)(s.td,{children:["No Default; folder to watch for archives. ",(0,n.jsx)(s.strong,{children:"Not for Starr apps"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"folder.extract_path"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_FOLDER_0_EXTRACT_PATH"})}),(0,n.jsxs)(s.td,{children:["Where to extract to. Default is the same as ",(0,n.jsx)(s.code,{children:"path"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"folder.delete_after"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_FOLDER_0_DELETE_AFTER"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"10m"})," Delete extracted files and/or archives after this duration; ",(0,n.jsx)(s.code,{children:"0"})," disables"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"folder.disable_log"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_FOLDER_0_DISABLE_LOG"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," Turns off creation of extraction logs files for this folder"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"folder.delete_original"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_FOLDER_0_DELETE_ORIGINAL"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," Delete archives after successful extraction"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"folder.delete_files"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_FOLDER_0_DELETE_FILES"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," Delete extracted files after successful extraction"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"folder.move_back"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_FOLDER_0_MOVE_BACK"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," Move extracted items back into original folder"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"folder.extract_isos"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_FOLDER_0_EXTRACT_ISOS"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," Setting this to true enables .iso file extraction"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"folder.disable_recursion"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_FOLDER_0_DISABLE_RECURSION"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," Setting this to true disables extracting archives inside archives"]})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"command-hooks",children:"Command Hooks"}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsxs)("summary",{children:["Examples. Prefix: ",(0,n.jsx)("b",{children:"UN_CMDHOOK_#"}),", Header: ",(0,n.jsx)("b",{children:"[[cmdhook]]"})]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using the config file:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-json",children:'[[cmdhook]]\n command = \'/my/cool/script\' # Path to command or script.\n shell = false # Runs the command inside /bin/sh (\'nix) or cmd.exe (Windows).\n name = "" # Provide an optional name for logging.\n silent = false # Hides command output from logs.\n events = [1,2,3,4] # list of event ids to include, [0] == all.\n exclude = ["lidarr"] # list of apps to exclude, ie. ["radarr", "lidarr"]\n timeout = "10s" # You can adjust how long to wait for a server response.\n'})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using environment variables:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-json",children:"UN_CMDHOOK_0_COMMAND=/usr/bin/env\nUN_CMDHOOK_0_NAME=\nUN_CMDHOOK_0_TIMEOUT=10s\nUN_CMDHOOK_0_SILENT=false\nUN_CMDHOOK_0_SHELL=true\nUN_CMDHOOK_0_EXCLUDE_0=lidarr\nUN_CMDHOOK_0_EXCLUDE_1=readarr\nUN_CMDHOOK_0_EVENTS_0=1\nUN_CMDHOOK_0_EVENTS_1=2\nUN_CMDHOOK_0_EVENTS_2=3\nUN_CMDHOOK_0_EVENTS_3=4\n"})})]}),"\n",(0,n.jsxs)(s.p,{children:["Unpackerr can execute commands (or scripts) before and after an archive extraction.\nThe only thing required is a command. Name is optional, and used in logs only.\nSetting ",(0,n.jsx)(s.code,{children:"shell"})," to ",(0,n.jsx)(s.code,{children:"true"})," executes your command after ",(0,n.jsx)(s.code,{children:"/bin/sh -c"})," or ",(0,n.jsx)(s.code,{children:"cmd.exe /c"}),"\non Windows."]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Config Name"}),(0,n.jsx)(s.th,{children:"Variable Name"}),(0,n.jsx)(s.th,{children:"Default / Note"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"cmdhook.command"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_CMDHOOK_0_COMMAND"})}),(0,n.jsx)(s.td,{children:"No Default; command to run"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"cmdhook.name"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_CMDHOOK_0_NAME"})}),(0,n.jsx)(s.td,{children:"Defaults to first word in command; provide an optional name for logs"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"cmdhook.timeout"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_CMDHOOK_0_TIMEOUT"})}),(0,n.jsxs)(s.td,{children:["Defaults to global timeout, usually ",(0,n.jsx)(s.code,{children:"10s"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"cmdhook.silent"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_CMDHOOK_0_SILENT"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Hide command output from logs"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"cmdhook.shell"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_CMDHOOK_0_SHELL"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Run command inside a shell"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"cmdhook.exclude"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_CMDHOOK_0_EXCLUDE"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"[]"})," / List of apps to exclude: radarr, sonarr, folders, etc"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"cmdhook.events"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_CMDHOOK_0_EVENTS"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"[0]"})," / List of event IDs to send (shown under Webhooks)"]})]})]})]}),"\n",(0,n.jsxs)(s.p,{children:["All extraction data is input to the command using environment variables, see example below.\nExtracted files variables names begin with ",(0,n.jsx)(s.code,{children:"UN_DATA_FILES_"}),".\nTry ",(0,n.jsx)(s.code,{children:"/usr/bin/env"})," as an example command to see what variables are available."]}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsx)("summary",{children:"Example Output Variables"}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-none",children:"UN_DATA_OUTPUT=folder/subfolder_unpackerred\nUN_PATH=folder/subfolder\nUN_DATA_START=2021-10-04T23:04:27.849216-07:00\nUN_REVISION=\nUN_EVENT=extracted\nUN_GO=go1.17\nUN_DATA_ARCHIVES=folder/subfolder_unpackerred/Funjetting.rar,folder/subfolder_unpackerred/Funjetting.r00,folder/subfolder/files.zip\nUN_DATA_ARCHIVE_2=folder/subfolder/files.zip\nUN_DATA_ARCHIVE_1=folder/subfolder_unpackerred/Funjetting.r00\nUN_DATA_ARCHIVE_0=folder/subfolder_unpackerred/Funjetting.rar\nUN_DATA_FILES=folder/subfolder/Funjetting.mp3,folder/subfolder/Funjetting.r00,folder/subfolder/Funjetting.rar,folder/subfolder/_unpackerred.subfolder.txt\nUN_DATA_FILE_1=folder/subfolder/Funjetting.r00\nUN_DATA_BYTES=2407624\nPWD=/Users/david/go/src/github.com/Unpackerr/unpackerr\nUN_DATA_FILE_0=folder/subfolder/Funjetting.mp3\nUN_OS=darwin\nUN_DATA_FILE_3=folder/subfolder/_unpackerred.subfolder.txt\nUN_DATA_FILE_2=folder/subfolder/Funjetting.rar\nUN_BRANCH=\nUN_TIME=2021-10-04T23:04:27.869613-07:00\nUN_VERSION=\nUN_DATA_QUEUE=0\nSHLVL=1\nUN_APP=Folder\nUN_STARTED=2021-10-04T23:03:22.849253-07:00\nUN_ARCH=amd64\nUN_DATA_ELAPSED=20.365752ms\nUN_DATA_ERROR=\n"})})]}),"\n",(0,n.jsx)(s.h2,{id:"webhooks",children:"Webhooks"}),"\n",(0,n.jsxs)(r,{children:[(0,n.jsxs)("summary",{children:["Examples. Prefix: ",(0,n.jsx)("b",{children:"UN_WEBHOOK_#"}),", Header: ",(0,n.jsx)("b",{children:"[[webhook]]"})]}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using the config file:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-json",children:'[[webhook]]\n url = "https://notifiarr.com/api/v1/notification/unpackerr/api_key_from_notifiarr_com"\n name = "" # Set this to hide the URL in logs.\n silent = false # Do not log success (less log spam).\n events = [1,2,3] # List of event ids to include, 0 == all.\n ## Advanced Optional Webhook Configuration\n nickname = "" # Used in Discord and Slack templates as bot name, in Telegram as chat_id.\n channel = "" # Passed into templates. Used in Slack templates for destination channel.\n template_path = "" # Override internal webhook template for discord.com or other hooks.\n template = "" # Values: notifiarr, discord, telegram, gotify, pushover, slack\n ignore_ssl = true # Set this to true to ignore the SSL certificate on the server.\n timeout = "9s" # You can adjust how long to wait for a server response.\n exclude = ["lidarr"] # List of apps to exclude, ie. ["radarr", "lidarr"]\n content_type = "application/json" # Set this if your template uses another MIME type.\n'})}),(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Using environment variables:"}),"\n"]}),(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-json",children:"UN_WEBHOOK_0_URL=https://a303739bc23bfcfa79b9cf36fd92833x.m.pipedream.net\nUN_WEBHOOK_0_NAME=\nUN_WEBHOOK_0_NICKNAME=Unpackerr\nUN_WEBHOOK_0_CHANNEL=\nUN_WEBHOOK_0_TIMEOUT=10s\nUN_WEBHOOK_0_SILENT=false\nUN_WEBHOOK_0_IGNORE_SSL=false\nUN_WEBHOOK_0_EXCLUDE_0=lidarr\nUN_WEBHOOK_0_EXCLUDE_1=readarr\nUN_WEBHOOK_0_EVENTS_0=1\nUN_WEBHOOK_0_EVENTS_1=2\nUN_WEBHOOK_0_EVENTS_2=3\nUN_WEBHOOK_0_TEMPLATE_PATH=\nUN_WEBHOOK_0_TEMPLATE=\nUN_WEBHOOK_0_CONTENT_TYPE=application/json\n"})})]}),"\n",(0,n.jsxs)(s.p,{children:["This application can send a ",(0,n.jsx)(s.code,{children:"POST"})," webhook to a URL when an extraction begins, and again\nwhen it finishes. Configure 1 or more webhook URLs with the parameters below.\nWorks great with ",(0,n.jsx)(s.a,{href:"https://notifiarr.com",children:"notifiarr.com"}),". You can use\n",(0,n.jsx)(s.a,{href:"https://requestbin.com/r/",children:"requestbin.com"})," to test and ",(0,n.jsx)(s.em,{children:"see"})," the payload."]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Config Name"}),(0,n.jsx)(s.th,{children:"Variable Name"}),(0,n.jsx)(s.th,{children:"Default / Note"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.url"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_URL"})}),(0,n.jsx)(s.td,{children:"No Default; URL to send POST webhook to"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.name"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_NAME"})}),(0,n.jsx)(s.td,{children:"Defaults to URL; provide an optional name to hide the URL in logs"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.nickname"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_NICKNAME"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"Unpackerr"})," / Passed into templates for telegram, discord and slack hooks"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.channel"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_CHANNEL"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:'""'})," / Passed into templates for slack.com webhooks"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.timeout"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_TIMEOUT"})}),(0,n.jsxs)(s.td,{children:["Defaults to global timeout, usually ",(0,n.jsx)(s.code,{children:"10s"})]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.silent"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_SILENT"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Hide successful POSTs from logs"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.ignore_ssl"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_IGNORE_SSL"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"false"})," / Ignore invalid SSL certificates"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.exclude"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_EXCLUDE"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"[]"})," / List of apps to exclude: radarr, sonarr, folders, etc"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.events"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_EVENTS"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"[0]"})," / List of event IDs to send (shown below)"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.template_path"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_TEMPLATE_PATH"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:'""'})," / Instead of an internal template, provide your own"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.template"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_TEMPLATE"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:'""'})," / Instead of auto template selection, force one; options below"]})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"webhook.content_type"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"UN_WEBHOOK_0_CONTENT_TYPE"})}),(0,n.jsxs)(s.td,{children:[(0,n.jsx)(s.code,{children:"application/json"})," / Content-Type header sent to webhook"]})]})]})]}),"\n",(0,n.jsx)(s.h3,{id:"webhook-notes",children:"Webhook Notes"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsxs)(s.em,{children:[(0,n.jsx)(s.code,{children:"Nickname"})," should equal the ",(0,n.jsx)(s.code,{children:"chat_id"})," value in Telegram webhooks."]})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsxs)(s.em,{children:[(0,n.jsx)(s.code,{children:"Channel"})," is used as destination channel for Slack. It's not used in others."]})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsxs)(s.em,{children:[(0,n.jsx)(s.code,{children:"Nickname"})," and ",(0,n.jsx)(s.code,{children:"Channel"})," may be used as custom values in custom templates."]})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsxs)(s.em,{children:[(0,n.jsx)(s.code,{children:"Name"})," is only used in logs, but it's also available as a template value as ",(0,n.jsx)(s.code,{children:"{{name}}"}),"."]})}),"\n",(0,n.jsxs)(s.li,{children:["Built-In Templates: ",(0,n.jsx)(s.code,{children:"pushover"}),", ",(0,n.jsx)(s.code,{children:"telegram"}),", ",(0,n.jsx)(s.code,{children:"discord"}),", ",(0,n.jsx)(s.code,{children:"notifiarr"}),", ",(0,n.jsx)(s.code,{children:"slack"}),", ",(0,n.jsx)(s.code,{children:"gotify"}),"."]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"event-ids",children:"Event IDs"}),"\n",(0,n.jsx)(s.p,{children:"Event IDs are needed/used in command hooks and webhooks."}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"0"})," = all, ",(0,n.jsx)(s.code,{children:"1"})," = queued, ",(0,n.jsx)(s.code,{children:"2"})," = extracting,\n",(0,n.jsx)(s.code,{children:"3"})," = extract failed, ",(0,n.jsx)(s.code,{children:"4"})," = extracted, ",(0,n.jsx)(s.code,{children:"5"})," = imported,\n",(0,n.jsx)(s.code,{children:"6"})," = deleting, ",(0,n.jsx)(s.code,{children:"7"})," = delete failed, ",(0,n.jsx)(s.code,{children:"8"})," = deleted"]})]})}function h(e={}){const{wrapper:s}={...(0,d.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},8453:(e,s,r)=>{r.d(s,{R:()=>l,x:()=>t});var n=r(6540);const d={},i=n.createContext(d);function l(e){const s=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function t(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(d):e.components||d:l(e.components),n.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.ac1cb423.js b/assets/js/runtime~main.1acb59fc.js similarity index 98% rename from assets/js/runtime~main.ac1cb423.js rename to assets/js/runtime~main.1acb59fc.js index 5d47bf1..605730f 100644 --- a/assets/js/runtime~main.ac1cb423.js +++ b/assets/js/runtime~main.1acb59fc.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,r,t,o,n={},c={};function d(e){var a=c[e];if(void 0!==a)return a.exports;var r=c[e]={id:e,loaded:!1,exports:{}};return n[e].call(r.exports,r,r.exports,d),r.loaded=!0,r.exports}d.m=n,d.c=c,e=[],d.O=(a,r,t,o)=>{if(!r){var n=1/0;for(b=0;b=o)&&Object.keys(d.O).every((e=>d.O[e](r[f])))?r.splice(f--,1):(c=!1,o0&&e[b-1][2]>o;b--)e[b]=e[b-1];e[b]=[r,t,o]},d.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return d.d(a,{a:a}),a},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var o=Object.create(null);d.r(o);var n={};a=a||[null,r({}),r([]),r(r)];for(var c=2&t&&e;"object"==typeof c&&!~a.indexOf(c);c=r(c))Object.getOwnPropertyNames(c).forEach((a=>n[a]=()=>e[a]));return n.default=()=>e,d.d(o,n),o},d.d=(e,a)=>{for(var r in a)d.o(a,r)&&!d.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:a[r]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((a,r)=>(d.f[r](e,a),a)),[])),d.u=e=>"assets/js/"+({48:"a94703ab",98:"a7bd4aaa",154:"aa8a3533",235:"a7456010",267:"78616857",282:"238f4925",326:"a035c0c6",401:"17896441",407:"5e4e568b",504:"91aaf6a8",520:"2e6ec07c",634:"c4f5d8e4",635:"14d479b9",647:"5e95c892",674:"e4349839",697:"e867472a",736:"8ad691b8",737:"ea8a5bd8",742:"aba21aa0",765:"7d42a442",782:"43892b4c",840:"e128280a",849:"0058b4c6",899:"a09c2993",940:"fd8bcec6",958:"5993bf36",969:"a22601d2"}[e]||e)+"."+{48:"31454a07",98:"25091422",154:"de6efa72",235:"46dd48b1",237:"2048eb5f",267:"b10e88ad",282:"60445e1e",326:"0c7c0a35",401:"1f41db7e",407:"b6742c80",504:"25db91c0",520:"3e2550e0",634:"5720f1ac",635:"09642028",647:"163d8c0f",674:"00893545",697:"cfa60343",736:"7f687f21",737:"d4ad9a61",742:"e11d0eaf",765:"f1649191",782:"d67167cb",840:"8fdfc7a1",849:"90e90219",899:"e7e9d57e",940:"2a47c95b",958:"2451636d",969:"39b9acbd"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),t={},o="unpackerrdox:",d.l=(e,a,r,n)=>{if(t[e])t[e].push(a);else{var c,f;if(void 0!==r)for(var i=document.getElementsByTagName("script"),b=0;b{c.onerror=c.onload=null,clearTimeout(s);var o=t[e];if(delete t[e],c.parentNode&&c.parentNode.removeChild(c),o&&o.forEach((e=>e(r))),a)return a(r)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=l.bind(null,c.onerror),c.onload=l.bind(null,c.onload),f&&document.head.appendChild(c)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/",d.gca=function(e){return e={17896441:"401",78616857:"267",a94703ab:"48",a7bd4aaa:"98",aa8a3533:"154",a7456010:"235","238f4925":"282",a035c0c6:"326","5e4e568b":"407","91aaf6a8":"504","2e6ec07c":"520",c4f5d8e4:"634","14d479b9":"635","5e95c892":"647",e4349839:"674",e867472a:"697","8ad691b8":"736",ea8a5bd8:"737",aba21aa0:"742","7d42a442":"765","43892b4c":"782",e128280a:"840","0058b4c6":"849",a09c2993:"899",fd8bcec6:"940","5993bf36":"958",a22601d2:"969"}[e]||e,d.p+d.u(e)},(()=>{var e={354:0,869:0};d.f.j=(a,r)=>{var t=d.o(e,a)?e[a]:void 0;if(0!==t)if(t)r.push(t[2]);else if(/^(354|869)$/.test(a))e[a]=0;else{var o=new Promise(((r,o)=>t=e[a]=[r,o]));r.push(t[2]=o);var n=d.p+d.u(a),c=new Error;d.l(n,(r=>{if(d.o(e,a)&&(0!==(t=e[a])&&(e[a]=void 0),t)){var o=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.src;c.message="Loading chunk "+a+" failed.\n("+o+": "+n+")",c.name="ChunkLoadError",c.type=o,c.request=n,t[1](c)}}),"chunk-"+a,a)}},d.O.j=a=>0===e[a];var a=(a,r)=>{var t,o,n=r[0],c=r[1],f=r[2],i=0;if(n.some((a=>0!==e[a]))){for(t in c)d.o(c,t)&&(d.m[t]=c[t]);if(f)var b=f(d)}for(a&&a(r);i{"use strict";var e,a,r,t,o,n={},c={};function d(e){var a=c[e];if(void 0!==a)return a.exports;var r=c[e]={id:e,loaded:!1,exports:{}};return n[e].call(r.exports,r,r.exports,d),r.loaded=!0,r.exports}d.m=n,d.c=c,e=[],d.O=(a,r,t,o)=>{if(!r){var n=1/0;for(b=0;b=o)&&Object.keys(d.O).every((e=>d.O[e](r[f])))?r.splice(f--,1):(c=!1,o0&&e[b-1][2]>o;b--)e[b]=e[b-1];e[b]=[r,t,o]},d.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return d.d(a,{a:a}),a},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var o=Object.create(null);d.r(o);var n={};a=a||[null,r({}),r([]),r(r)];for(var c=2&t&&e;"object"==typeof c&&!~a.indexOf(c);c=r(c))Object.getOwnPropertyNames(c).forEach((a=>n[a]=()=>e[a]));return n.default=()=>e,d.d(o,n),o},d.d=(e,a)=>{for(var r in a)d.o(a,r)&&!d.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:a[r]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((a,r)=>(d.f[r](e,a),a)),[])),d.u=e=>"assets/js/"+({48:"a94703ab",98:"a7bd4aaa",154:"aa8a3533",235:"a7456010",267:"78616857",282:"238f4925",326:"a035c0c6",401:"17896441",407:"5e4e568b",504:"91aaf6a8",520:"2e6ec07c",634:"c4f5d8e4",635:"14d479b9",647:"5e95c892",674:"e4349839",697:"e867472a",736:"8ad691b8",737:"ea8a5bd8",742:"aba21aa0",765:"7d42a442",782:"43892b4c",840:"e128280a",849:"0058b4c6",899:"a09c2993",940:"fd8bcec6",958:"5993bf36",969:"a22601d2"}[e]||e)+"."+{48:"31454a07",98:"25091422",154:"de6efa72",235:"46dd48b1",237:"2048eb5f",267:"b10e88ad",282:"60445e1e",326:"0c7c0a35",401:"1f41db7e",407:"b6742c80",504:"25db91c0",520:"3e2550e0",634:"5720f1ac",635:"09642028",647:"163d8c0f",674:"00893545",697:"cfa60343",736:"7f687f21",737:"d4ad9a61",742:"e11d0eaf",765:"f1649191",782:"ddd79ee2",840:"8fdfc7a1",849:"90e90219",899:"e7e9d57e",940:"2a47c95b",958:"2451636d",969:"39b9acbd"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),t={},o="unpackerrdox:",d.l=(e,a,r,n)=>{if(t[e])t[e].push(a);else{var c,f;if(void 0!==r)for(var i=document.getElementsByTagName("script"),b=0;b{c.onerror=c.onload=null,clearTimeout(s);var o=t[e];if(delete t[e],c.parentNode&&c.parentNode.removeChild(c),o&&o.forEach((e=>e(r))),a)return a(r)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=l.bind(null,c.onerror),c.onload=l.bind(null,c.onload),f&&document.head.appendChild(c)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/",d.gca=function(e){return e={17896441:"401",78616857:"267",a94703ab:"48",a7bd4aaa:"98",aa8a3533:"154",a7456010:"235","238f4925":"282",a035c0c6:"326","5e4e568b":"407","91aaf6a8":"504","2e6ec07c":"520",c4f5d8e4:"634","14d479b9":"635","5e95c892":"647",e4349839:"674",e867472a:"697","8ad691b8":"736",ea8a5bd8:"737",aba21aa0:"742","7d42a442":"765","43892b4c":"782",e128280a:"840","0058b4c6":"849",a09c2993:"899",fd8bcec6:"940","5993bf36":"958",a22601d2:"969"}[e]||e,d.p+d.u(e)},(()=>{var e={354:0,869:0};d.f.j=(a,r)=>{var t=d.o(e,a)?e[a]:void 0;if(0!==t)if(t)r.push(t[2]);else if(/^(354|869)$/.test(a))e[a]=0;else{var o=new Promise(((r,o)=>t=e[a]=[r,o]));r.push(t[2]=o);var n=d.p+d.u(a),c=new Error;d.l(n,(r=>{if(d.o(e,a)&&(0!==(t=e[a])&&(e[a]=void 0),t)){var o=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.src;c.message="Loading chunk "+a+" failed.\n("+o+": "+n+")",c.name="ChunkLoadError",c.type=o,c.request=n,t[1](c)}}),"chunk-"+a,a)}},d.O.j=a=>0===e[a];var a=(a,r)=>{var t,o,n=r[0],c=r[1],f=r[2],i=0;if(n.some((a=>0!==e[a]))){for(t in c)d.o(c,t)&&(d.m[t]=c[t]);if(f)var b=f(d)}for(a&&a(r);i Torrent Downloaders | Unpackerr Extracter - + diff --git a/docs/downloaders/usenet/index.html b/docs/downloaders/usenet/index.html index 33ad848..3c2476c 100644 --- a/docs/downloaders/usenet/index.html +++ b/docs/downloaders/usenet/index.html @@ -4,7 +4,7 @@ Usenet Downloaders | Unpackerr Extracter - + diff --git a/docs/install/choosemethod/index.html b/docs/install/choosemethod/index.html index 5863185..ce274e6 100644 --- a/docs/install/choosemethod/index.html +++ b/docs/install/choosemethod/index.html @@ -4,7 +4,7 @@ Choose Install Method | Unpackerr Extracter - + diff --git a/docs/install/compose/index.html b/docs/install/compose/index.html index 860bce7..b4426a5 100644 --- a/docs/install/compose/index.html +++ b/docs/install/compose/index.html @@ -4,7 +4,7 @@ Docker Compose | Unpackerr Extracter - + diff --git a/docs/install/configuration/index.html b/docs/install/configuration/index.html index 5fa888b..1dc9789 100644 --- a/docs/install/configuration/index.html +++ b/docs/install/configuration/index.html @@ -4,7 +4,7 @@ Application Configuration | Unpackerr Extracter - + @@ -18,7 +18,7 @@

Config @@ -56,9 +56,9 @@

Global Setti When using environment variables, you can simply omit the ones you don't set or change from default.

Examples. Prefix: UN
  • Using the config file:
  • -
debug        = false
quiet = false
error_stderr = false
activity = false
log_queues = "1m"
log_file = ""
log_files = 10
log_file_mb = 10
interval = "2m"
start_delay = "1m"
retry_delay = "5m"
parallel = 1
file_mode = "0644"
dir_mode = "0755"

[folders]
interval = "0s"
    +
debug        = false
quiet = false
error_stderr = false
activity = false
log_queues = "1m"
log_file = ""
log_files = 10
log_file_mb = 10
interval = "2m"
start_delay = "1m"
retry_delay = "5m"
parallel = 1
file_mode = "0644"
dir_mode = "0755"

[folders]
interval = "0s"
  • Using environment variables:
  • -
TZ=America/New_York
UN_DEBUG=false
UN_QUIET=false
UN_ERROR_STDERR=false
UN_ACTIVITY=false
UN_LOG_QUEUES=1m
UN_LOG_FILE=
UN_LOG_FILES=10
UN_LOG_FILE_MB=10
UN_INTERVAL=2m
UN_START_DELAY=1m
UN_RETRY_DELAY=5m
UN_MAX_RETRIES=3
UN_PARALLEL=1
UN_FILE_MODE=0644
UN_DIR_MODE=0755
UN_FOLDERS_INTERVAL=0s
+
TZ=America/New_York
UN_DEBUG=false
UN_QUIET=false
UN_ERROR_STDERR=false
UN_ACTIVITY=false
UN_LOG_QUEUES=1m
UN_LOG_FILE=
UN_LOG_FILES=10
UN_LOG_FILE_MB=10
UN_INTERVAL=2m
UN_START_DELAY=1m
UN_RETRY_DELAY=5m
UN_MAX_RETRIES=3
UN_PARALLEL=1
UN_FILE_MODE=0644
UN_DIR_MODE=0755
UN_FOLDERS_INTERVAL=0s
Config NameVariable NameDefault / Note
debugUN_DEBUGfalse / Turns on more logs
quietUN_QUIIETfalse / Do not print logs to stdout or stderr
error_stderrUN_ERROR_STDERRfalse / Print ERROR lines to stderr instead of stdout.
activityUN_ACTIVITYfalse / Setting true will print only queue counts with activity.
log_queuesUN_LOG_QUEUES1m / Uses Go Duration. How often to print internal counters.
log_fileUN_LOG_FILENone by default. Optionally provide a file path to write logs
log_filesUN_LOG_FILES10 / Log files to keep after rotating. 0 disables rotation
log_file_mbUN_LOG_FILE_MB10 / Max size of log files in megabytes
intervalUN_INTERVAL2m / How often apps are polled, recommend 1m to 5m
start_delayUN_START_DELAY1m / Files are queued at least this long before extraction
retry_delayUN_RETRY_DELAY5m / Failed extractions are retried after at least this long
max_retriesUN_MAX_RETRIES3 / Times to retry failed extractions. 0 = unlimited.
parallelUN_PARALLEL1 / Concurrent extractions, only recommend 1
file_modeUN_FILE_MODE0644 / Extracted files are written with this mode
dir_modeUN_DIR_MODE0755 / Extracted folders are written with this mode
passwordsUN_PASSWORD_0No default; empty list. Provide a list of RAR passwords to try.
folders.intervalUN_FOLDERS_INTERVAL1s / How often poller checks for new folders. Use 1ms to disable it.

Secrets and Passwords

If a wrong password is provided, the entire archive must @@ -70,67 +70,67 @@

Secret
Other Secrets

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.

+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.

Webserver

Metrics

The web server currently only provides prometheus metrics, which you can display in Grafana. It provides no UI. This may change in the future. The web server was added in v0.12.0.

Examples. Prefix: UN_WEBSERVER, Header: [webserver]
  • Using the config file:
  • -
[webserver]
metrics = true
listen_addr = "0.0.0.0:5656"
log_file = ""
log_files = 10
log_file_mb = 10
ssl_cert_file = ""
ssl_key_file = ""
urlbase = "/"
upstreams = [ "127.0.0.1/32", "10.1.2.0/24" ]
    +
[webserver]
metrics = true
listen_addr = "0.0.0.0:5656"
log_file = ""
log_files = 10
log_file_mb = 10
ssl_cert_file = ""
ssl_key_file = ""
urlbase = "/"
upstreams = [ "127.0.0.1/32", "10.1.2.0/24" ]
  • Using environment variables:
UN_WEBSERVER_METRICS=true
UN_WEBSERVER_LISTEN_ADDR=0.0.0.0:5656
UN_WEBSERVER_LOG_FILE=
UN_WEBSERVER_LOG_FILES=10
UN_WEBSERVER_LOG_FILE_MB=10
UN_WEBSERVER_URLBASE=/
UN_WEBSERVER_UPSTREAMS=127.0.0.1/32,10.1.2.0/24
Config NameVariable NameDefault / Note
webserver.metricsUN_WEBSERVER_METRICSfalse / Set this to true to enable the webserver, and metrics
webserver.listen_addrUN_WEBSERVER_LISTEN_ADDR0.0.0.0:5656 / ip:port to listen on. 0.0.0.0 is all IPs
webserver.log_fileUN_WEBSERVER_LOG_FILENo default. Optionally provide a file path to write HTTP logs
webserver.log_filesUN_WEBSERVER_LOG_FILES10 / Log files to keep after rotating. 0 to disable
webserver.log_file_mbUN_WEBSERVER_LOG_FILE_MB10 / Max size of HTTP log files in megabytes
webserver.ssl_cert_fileUN_WEBSERVER_SSL_CERT_FILENo default. Path to SSL cert file to serve HTTPS
webserver.ssl_key_fileUN_WEBSERVER_SSL_KEY_FILENo default. Path to SSL key file to serve HTTPS
webserver.urlbaseUN_WEBSERVER_URLBASE/ / Base URL path to serve HTTP content
webserver.upstreamsUN_WEBSERVER_UPSTREAMSNo default. List of upstream proxy CIDRs or IPs to trust

Sonarr

Examples. Prefix: UN_SONARR_#, Header: [[sonarr]]
  • Using the config file:
  • -
[[sonarr]]
url = "http://127.0.0.1:8989"
api_key = "0123456789abcdef0123456789abcdef"
paths = ['/downloads']
protocols = "torrent"
timeout = "10s"
delete_delay = "5m"
delete_orig = false
syncthing = false
    +
[[sonarr]]
url = "http://127.0.0.1:8989"
api_key = "0123456789abcdef0123456789abcdef"
paths = ['/downloads']
protocols = "torrent"
timeout = "10s"
delete_delay = "5m"
delete_orig = false
syncthing = false
  • Using environment variables:
UN_SONARR_0_URL=http://sonarr:8989
UN_SONARR_0_API_KEY=
UN_SONARR_0_PATHS_0=/downloads
UN_SONARR_0_PROTOCOLS=torrent
UN_SONARR_0_TIMEOUT=10s
UN_SONARR_0_DELETE_ORIG=false
UN_SONARR_0_DELETE_DELAY=5m
Config NameVariable NameDefault / Note
sonarr.urlUN_SONARR_0_URLNo Default. Something like: http://localhost:8989
sonarr.api_keyUN_SONARR_0_API_KEYNo Default. Provide URL and API key if you use Sonarr
sonarr.pathsUN_SONARR_0_PATHS_0/downloads List of paths where content is downloaded for Sonarr. Used as fallback if the path Sonarr reports does not exist or is not accessible.
sonarr.protocolsUN_SONARR_0_PROTOCOLStorrent Protocols to process. Alt: torrent,usenet
sonarr.timeoutUN_SONARR_0_TIMEOUT10s / How long to wait for the app to respond
sonarr.delete_origUN_SONARR_0_DELETE_ORIGfalse / Delete archives after import? Recommend not setting this to true
sonarr.delete_delayUN_SONARR_0_DELETE_DELAY5m / Extracts are deleted this long after import, -1s to disable
sonarr.syncthingUN_SONARR_0_SYNCTHINGfalse / Setting this to true makes unpackerr wait for syncthing to finish

Radarr

Examples. Prefix: UN_RADARR_#, Header: [[radarr]]
  • Using the config file:
  • -
[[radarr]]
url = "http://127.0.0.1:7878"
api_key = "0123456789abcdef0123456789abcdef"
paths = ['/downloads']
protocols = "torrent"
timeout = "10s"
delete_delay = "5m"
delete_orig = false
syncthing = false
    +
[[radarr]]
url = "http://127.0.0.1:7878"
api_key = "0123456789abcdef0123456789abcdef"
paths = ['/downloads']
protocols = "torrent"
timeout = "10s"
delete_delay = "5m"
delete_orig = false
syncthing = false
  • Using environment variables:
UN_RADARR_0_URL=http://radarr:7878
UN_RADARR_0_API_KEY=0123456789abcdef0123456789abcdef
UN_RADARR_0_PATHS_0=/downloads
UN_RADARR_0_PROTOCOLS=torrent
UN_RADARR_0_TIMEOUT=10s
UN_RADARR_0_DELETE_ORIG=false
UN_RADARR_0_DELETE_DELAY=5m
Config NameVariable NameDefault / Note
radarr.urlUN_RADARR_0_URLNo Default. Something like: http://localhost:7878
radarr.api_keyUN_RADARR_0_API_KEYNo Default. Provide URL and API key if you use Radarr
radarr.pathsUN_RADARR_0_PATHS_0/downloads List of paths where content is downloaded for Radarr. Used as fallback if the path Radarr reports does not exist or is not accessible
radarr.protocolsUN_RADARR_0_PROTOCOLStorrent Protocols to process. Alt: torrent,usenet
radarr.timeoutUN_RADARR_0_TIMEOUT10s / How long to wait for the app to respond
radarr.delete_origUN_RADARR_0_DELETE_ORIGfalse / Delete archives after import? Recommend not setting this to true
radarr.delete_delayUN_RADARR_0_DELETE_DELAY5m / Extracts are deleted this long after import, -1s to disable
radarr.syncthingUN_RADARR_0_SYNCTHINGfalse / Setting this to true makes unpackerr wait for syncthing to finish

Lidarr

Examples. Prefix: UN_LIDARR_#, Header: [[lidarr]]
  • Using the config file:
  • -
[[lidarr]]
url = "http://127.0.0.1:8686"
api_key = "0123456789abcdef0123456789abcdef"
paths = ['/downloads']
protocols = "torrent"
timeout = "10s"
delete_delay = "5m"
delete_orig = false
syncthing = false
    +
[[lidarr]]
url = "http://127.0.0.1:8686"
api_key = "0123456789abcdef0123456789abcdef"
paths = ['/downloads']
protocols = "torrent"
timeout = "10s"
delete_delay = "5m"
delete_orig = false
syncthing = false
  • Using environment variables:
UN_LIDARR_0_URL=http://lidarr:8686
UN_LIDARR_0_API_KEY=0123456789abcdef0123456789abcdef
UN_LIDARR_0_PATHS_0=/downloads
UN_LIDARR_0_PROTOCOLS=torrent
UN_LIDARR_0_TIMEOUT=10s
UN_LIDARR_0_DELETE_ORIG=false
UN_LIDARR_0_DELETE_DELAY=5m
Config NameVariable NameDefault / Note
lidarr.urlUN_LIDARR_0_URLNo Default. Something like: http://localhost:8686
lidarr.api_keyUN_LIDARR_0_API_KEYNo Default. Provide URL and API key if you use Lidarr
lidarr.pathsUN_LIDARR_0_PATHS_0/downloads List of paths where content is downloaded for Lidarr. Used as fallback if the path Lidarr reports does not exist or is not accessible
lidarr.protocolsUN_LIDARR_0_PROTOCOLStorrent Protocols to process. Alt: torrent,usenet
lidarr.timeoutUN_LIDARR_0_TIMEOUT10s / How long to wait for the app to respond
lidarr.delete_origUN_LIDARR_0_DELETE_ORIGfalse / Delete archives after import? Recommend not setting this to true
lidarr.delete_delayUN_LIDARR_0_DELETE_DELAY5m / Extracts are deleted this long after import, -1s to disable
lidarr.syncthingUN_LIDARR_0_SYNCTHINGfalse / Setting this to true makes unpackerr wait for syncthing to finish

Readarr

Examples. Prefix: UN_READARR_#, Header: [[readarr]]
  • Using the config file:
  • -
[[readarr]]
url = "http://127.0.0.1:8787"
api_key = "0123456789abcdef0123456789abcdef"
paths = ['/downloads']
protocols = "torrent"
timeout = "10s"
delete_delay = "5m"
delete_orig = false
syncthing = false
    +
[[readarr]]
url = "http://127.0.0.1:8787"
api_key = "0123456789abcdef0123456789abcdef"
paths = ['/downloads']
protocols = "torrent"
timeout = "10s"
delete_delay = "5m"
delete_orig = false
syncthing = false
  • Using environment variables:
UN_READARR_0_URL=http://readarr:8787
UN_READARR_0_API_KEY=0123456789abcdef0123456789abcdef
UN_READARR_0_PATHS_0=/downloads
UN_READARR_0_PROTOCOLS=torrent
UN_READARR_0_TIMEOUT=10s
UN_READARR_0_DELETE_ORIG=false
UN_READARR_0_DELETE_DELAY=5m
Config NameVariable NameDefault / Note
readarr.urlUN_READARR_0_URLNo Default. Something like: http://localhost:8787
readarr.api_keyUN_READARR_0_API_KEYNo Default. Provide URL and API key if you use Readarr
readarr.pathsUN_READARR_0_PATHS_0/downloads List of paths where content is downloaded for Readarr. Used as fallback if the path Readarr reports does not exist or is not accessible
readarr.protocolsUN_READARR_0_PROTOCOLStorrent Protocols to process. Alt: torrent,usenet
readarr.timeoutUN_READARR_0_TIMEOUT10s / How long to wait for the app to respond
readarr.delete_origUN_READARR_0_DELETE_ORIGfalse / Delete archives after import? Recommend not setting this to true
readarr.delete_delayUN_READARR_0_DELETE_DELAY5m / Extracts are deleted this long after import, -1s to disable
readarr.syncthingUN_READARR_0_SYNCTHINGfalse / Setting this to true makes unpackerr wait for syncthing to finish

Whisparr

Examples. Prefix: UN_WHISPARR_#, Header: [[whisparr]]
  • Using the config file:
  • -
[[whisparr]]
url = "http://127.0.0.1:6969"
api_key = "0123456789abcdef0123456789abcdef"
paths = ['/downloads']
protocols = "torrent"
timeout = "10s"
delete_delay = "5m"
delete_orig = false
syncthing = false
    +
[[whisparr]]
url = "http://127.0.0.1:6969"
api_key = "0123456789abcdef0123456789abcdef"
paths = ['/downloads']
protocols = "torrent"
timeout = "10s"
delete_delay = "5m"
delete_orig = false
syncthing = false
  • Using environment variables:
UN_WHISPARR_0_URL=http://whisparr:6969
UN_WHISPARR_0_API_KEY=0123456789abcdef0123456789abcdef
UN_WHISPARR_0_PATHS_0=/downloads
UN_WHISPARR_0_PROTOCOLS=torrent
UN_WHISPARR_0_TIMEOUT=10s
UN_WHISPARR_0_DELETE_ORIG=false
UN_WHISPARR_0_DELETE_DELAY=5m
Config NameVariable NameDefault / Note
whisparr.urlUN_WHISPARR_0_URLNo Default. Something like: http://localhost:8787
whisparr.api_keyUN_WHISPARR_0_API_KEYNo Default. Provide URL and API key if you use Readarr
whisparr.pathsUN_WHISPARR_0_PATHS_0/downloads List of paths where content is downloaded for Readarr. Used as fallback if the path Readarr reports does not exist or is not accessible
whisparr.protocolsUN_WHISPARR_0_PROTOCOLStorrent Protocols to process. Alt: torrent,usenet
whisparr.timeoutUN_WHISPARR_0_TIMEOUT10s / How long to wait for the app to respond
whisparr.delete_origUN_WHISPARR_0_DELETE_ORIGfalse / Delete archives after import? Recommend not setting this to true
whisparr.delete_delayUN_WHISPARR_0_DELETE_DELAY5m / Extracts are deleted this long after import, -1s to disable
whisparr.syncthingUN_WHISPARR_0_SYNCTHINGfalse / Setting this to true makes unpackerr wait for syncthing to finish

Folder

Examples. Prefix: UN_FOLDER_#, Header: [[folder]]
  • Using the config file:
  • -
[[folder]]
path = '''/some/folder/to/watch'''
extract_path = ''
delete_after = "10m"
disable_recursion = false
delete_files = false
delete_original = false
disable_log = false
move_back = false
extract_isos = false
    +
[[folder]]
path = '''/some/folder/to/watch'''
extract_path = ''
delete_after = "10m"
disable_recursion = false
delete_files = false
delete_original = false
disable_log = false
move_back = false
extract_isos = false
  • Using environment variables:
  • -
UN_FOLDER_0_PATH=/some/folder/to/watch
UN_FOLDER_0_EXTRACT_PATH=
UN_FOLDER_0_DELETE_AFTER=10m
UN_FOLDER_0_DELETE_ORIGINAL=false
UN_FOLDER_0_DELETE_FILES=false
UN_FOLDER_0_MOVE_BACK=false
+
UN_FOLDER_0_PATH=/some/folder/to/watch
UN_FOLDER_0_EXTRACT_PATH=
UN_FOLDER_0_DELETE_AFTER=10m
UN_FOLDER_0_DELETE_ORIGINAL=false
UN_FOLDER_0_DELETE_FILES=false
UN_FOLDER_0_MOVE_BACK=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 an Starr app.

Config NameVariable NameDefault / Note
folder.pathUN_FOLDER_0_PATHNo Default; folder to watch for archives. Not for Starr apps
folder.extract_pathUN_FOLDER_0_EXTRACT_PATHWhere to extract to. Default is the same as path
folder.delete_afterUN_FOLDER_0_DELETE_AFTER10m Delete extracted files and/or archives after this duration; 0 disables
folder.disable_logUN_FOLDER_0_DISABLE_LOGfalse Turns off creation of extraction logs files for this folder
folder.delete_originalUN_FOLDER_0_DELETE_ORIGINALfalse Delete archives after successful extraction
folder.delete_filesUN_FOLDER_0_DELETE_FILESfalse Delete extracted files after successful extraction
folder.move_backUN_FOLDER_0_MOVE_BACKfalse Move extracted items back into original folder
folder.extract_isosUN_FOLDER_0_EXTRACT_ISOSfalse Setting this to true enables .iso file extraction
folder.disable_recursionUN_FOLDER_0_DISABLE_RECURSIONfalse Setting this to true disables extracting archives inside archives

Command Hooks

Examples. Prefix: UN_CMDHOOK_#, Header: [[cmdhook]]
  • Using the config file:
  • -
[[cmdhook]]
command = '/my/cool/script' # Path to command or script.
shell = false # Runs the command inside /bin/sh ('nix) or cmd.exe (Windows).
name = "" # Provide an optional name for logging.
silent = false # Hides command output from logs.
events = [1,2,3,4] # list of event ids to include, [0] == all.
exclude = ["lidarr"] # list of apps to exclude, ie. ["radarr", "lidarr"]
timeout = "10s" # You can adjust how long to wait for a server response.
    +
[[cmdhook]]
command = '/my/cool/script' # Path to command or script.
shell = false # Runs the command inside /bin/sh ('nix) or cmd.exe (Windows).
name = "" # Provide an optional name for logging.
silent = false # Hides command output from logs.
events = [1,2,3,4] # list of event ids to include, [0] == all.
exclude = ["lidarr"] # list of apps to exclude, ie. ["radarr", "lidarr"]
timeout = "10s" # You can adjust how long to wait for a server response.
  • Using environment variables:
  • -
UN_CMDHOOK_0_COMMAND=/usr/bin/env
UN_CMDHOOK_0_NAME=
UN_CMDHOOK_0_TIMEOUT=10s
UN_CMDHOOK_0_SILENT=false
UN_CMDHOOK_0_SHELL=true
UN_CMDHOOK_0_EXCLUDE_0=lidarr
UN_CMDHOOK_0_EXCLUDE_1=readarr
UN_CMDHOOK_0_EVENTS_0=1
UN_CMDHOOK_0_EVENTS_1=2
UN_CMDHOOK_0_EVENTS_2=3
UN_CMDHOOK_0_EVENTS_3=4
+
UN_CMDHOOK_0_COMMAND=/usr/bin/env
UN_CMDHOOK_0_NAME=
UN_CMDHOOK_0_TIMEOUT=10s
UN_CMDHOOK_0_SILENT=false
UN_CMDHOOK_0_SHELL=true
UN_CMDHOOK_0_EXCLUDE_0=lidarr
UN_CMDHOOK_0_EXCLUDE_1=readarr
UN_CMDHOOK_0_EVENTS_0=1
UN_CMDHOOK_0_EVENTS_1=2
UN_CMDHOOK_0_EVENTS_2=3
UN_CMDHOOK_0_EVENTS_3=4

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 @@ -143,9 +143,9 @@

Command Hooks<

Webhooks

Examples. Prefix: UN_WEBHOOK_#, Header: [[webhook]]
  • Using the config file:
  • -
[[webhook]]
url = "https://notifiarr.com/api/v1/notification/unpackerr/api_key_from_notifiarr_com"
name = "" # Set this to hide the URL in logs.
silent = false # Do not log success (less log spam).
events = [1,2,3] # List of event ids to include, 0 == all.
## Advanced Optional Webhook Configuration
nickname = "" # Used in Discord and Slack templates as bot name, in Telegram as chat_id.
channel = "" # Passed into templates. Used in Slack templates for destination channel.
template_path = "" # Override internal webhook template for discord.com or other hooks.
template = "" # Values: notifiarr, discord, telegram, gotify, pushover, slack
ignore_ssl = true # Set this to true to ignore the SSL certificate on the server.
timeout = "9s" # You can adjust how long to wait for a server response.
exclude = ["lidarr"] # List of apps to exclude, ie. ["radarr", "lidarr"]
content_type = "application/json" # Set this if your template uses another MIME type.
    +
[[webhook]]
url = "https://notifiarr.com/api/v1/notification/unpackerr/api_key_from_notifiarr_com"
name = "" # Set this to hide the URL in logs.
silent = false # Do not log success (less log spam).
events = [1,2,3] # List of event ids to include, 0 == all.
## Advanced Optional Webhook Configuration
nickname = "" # Used in Discord and Slack templates as bot name, in Telegram as chat_id.
channel = "" # Passed into templates. Used in Slack templates for destination channel.
template_path = "" # Override internal webhook template for discord.com or other hooks.
template = "" # Values: notifiarr, discord, telegram, gotify, pushover, slack
ignore_ssl = true # Set this to true to ignore the SSL certificate on the server.
timeout = "9s" # You can adjust how long to wait for a server response.
exclude = ["lidarr"] # List of apps to exclude, ie. ["radarr", "lidarr"]
content_type = "application/json" # Set this if your template uses another MIME type.
  • Using environment variables:
  • -
UN_WEBHOOK_0_URL=https://a303739bc23bfcfa79b9cf36fd92833x.m.pipedream.net
UN_WEBHOOK_0_NAME=
UN_WEBHOOK_0_NICKNAME=Unpackerr
UN_WEBHOOK_0_CHANNEL=
UN_WEBHOOK_0_TIMEOUT=10s
UN_WEBHOOK_0_SILENT=false
UN_WEBHOOK_0_IGNORE_SSL=false
UN_WEBHOOK_0_EXCLUDE_0=lidarr
UN_WEBHOOK_0_EXCLUDE_1=readarr
UN_WEBHOOK_0_EVENTS_0=1
UN_WEBHOOK_0_EVENTS_1=2
UN_WEBHOOK_0_EVENTS_2=3
UN_WEBHOOK_0_TEMPLATE_PATH=
UN_WEBHOOK_0_TEMPLATE=
UN_WEBHOOK_0_CONTENT_TYPE=application/json
+
UN_WEBHOOK_0_URL=https://a303739bc23bfcfa79b9cf36fd92833x.m.pipedream.net
UN_WEBHOOK_0_NAME=
UN_WEBHOOK_0_NICKNAME=Unpackerr
UN_WEBHOOK_0_CHANNEL=
UN_WEBHOOK_0_TIMEOUT=10s
UN_WEBHOOK_0_SILENT=false
UN_WEBHOOK_0_IGNORE_SSL=false
UN_WEBHOOK_0_EXCLUDE_0=lidarr
UN_WEBHOOK_0_EXCLUDE_1=readarr
UN_WEBHOOK_0_EVENTS_0=1
UN_WEBHOOK_0_EVENTS_1=2
UN_WEBHOOK_0_EVENTS_2=3
UN_WEBHOOK_0_TEMPLATE_PATH=
UN_WEBHOOK_0_TEMPLATE=
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 diff --git a/docs/install/docker/index.html b/docs/install/docker/index.html index 801d7de..df6d356 100644 --- a/docs/install/docker/index.html +++ b/docs/install/docker/index.html @@ -4,7 +4,7 @@ Docker Basics | Unpackerr Extracter - + diff --git a/docs/install/freebsd/index.html b/docs/install/freebsd/index.html index e9f14b1..2efa37a 100644 --- a/docs/install/freebsd/index.html +++ b/docs/install/freebsd/index.html @@ -4,7 +4,7 @@ FreeBSD | Unpackerr Extracter - + diff --git a/docs/install/includes/archiveaccess/index.html b/docs/install/includes/archiveaccess/index.html index 84272d1..4764fca 100644 --- a/docs/install/includes/archiveaccess/index.html +++ b/docs/install/includes/archiveaccess/index.html @@ -4,7 +4,7 @@ archiveaccess | Unpackerr Extracter - + diff --git a/docs/install/linux/index.html b/docs/install/linux/index.html index 9dd58d7..1fbe0a4 100644 --- a/docs/install/linux/index.html +++ b/docs/install/linux/index.html @@ -4,7 +4,7 @@ Repository | Unpackerr Extracter - + diff --git a/docs/install/macos/index.html b/docs/install/macos/index.html index e6ee040..d0b1b8e 100644 --- a/docs/install/macos/index.html +++ b/docs/install/macos/index.html @@ -4,7 +4,7 @@ MacOS | Unpackerr Extracter - + diff --git a/docs/install/seedbox/index.html b/docs/install/seedbox/index.html index 96e04d0..fe025a3 100644 --- a/docs/install/seedbox/index.html +++ b/docs/install/seedbox/index.html @@ -4,7 +4,7 @@ Seedbox | Unpackerr Extracter - + diff --git a/docs/install/truenas-scale/index.html b/docs/install/truenas-scale/index.html index 8c419bd..e021049 100644 --- a/docs/install/truenas-scale/index.html +++ b/docs/install/truenas-scale/index.html @@ -4,7 +4,7 @@ TrueNAS Scale | Unpackerr Extracter - + diff --git a/docs/install/unraid/index.html b/docs/install/unraid/index.html index 87731c7..b31bb71 100644 --- a/docs/install/unraid/index.html +++ b/docs/install/unraid/index.html @@ -4,7 +4,7 @@ unRAID | Unpackerr Extracter - + diff --git a/docs/install/windows/index.html b/docs/install/windows/index.html index 5aa675c..35b85cb 100644 --- a/docs/install/windows/index.html +++ b/docs/install/windows/index.html @@ -4,7 +4,7 @@ Windows | Unpackerr Extracter - + diff --git a/docs/introduction/index.html b/docs/introduction/index.html index 624c101..5ca549f 100644 --- a/docs/introduction/index.html +++ b/docs/introduction/index.html @@ -4,7 +4,7 @@ Introduction | Unpackerr Extracter - + diff --git a/docs/unpackerr/faq/index.html b/docs/unpackerr/faq/index.html index 8c6e4b2..86ee3cb 100644 --- a/docs/unpackerr/faq/index.html +++ b/docs/unpackerr/faq/index.html @@ -4,7 +4,7 @@ FAQs | Unpackerr Extracter - + diff --git a/docs/unpackerr/license/index.html b/docs/unpackerr/license/index.html index abf9dc0..ff28eb7 100644 --- a/docs/unpackerr/license/index.html +++ b/docs/unpackerr/license/index.html @@ -4,7 +4,7 @@ Unpackerr License and Copyright | Unpackerr Extracter - + diff --git a/docs/unpackerr/troubleshooting/index.html b/docs/unpackerr/troubleshooting/index.html index ce8ad3f..9313153 100644 --- a/docs/unpackerr/troubleshooting/index.html +++ b/docs/unpackerr/troubleshooting/index.html @@ -4,7 +4,7 @@ Troubleshooting | Unpackerr Extracter - + diff --git a/docs/xt/index.html b/docs/xt/index.html index 11130b6..32fbd38 100644 --- a/docs/xt/index.html +++ b/docs/xt/index.html @@ -4,7 +4,7 @@ eXtractor Tool | Unpackerr Extracter - + diff --git a/index.html b/index.html index 97fbfd3..25a33a3 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ Unpackerr | Unpackerr Extracter - +