Repository navigation
Document Unpackerr v1 upgrades #54
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
8452a10
f4033d1
95039f9
4e3cccf
516b9b1
e4f0b1b
735237a
2a41ec3
4789bc4
522817c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -14,52 +14,65 @@ Expand the blue sections to see excerpts from the | |
| [example docker-compose.yml](https://github.com/Unpackerr/unpackerr/blob/main/examples/docker-compose.yml) | ||
| and [example config](https://github.com/Unpackerr/unpackerr/blob/main/examples/unpackerr.conf.example) files. | ||
|
|
||
| ## Web UI | ||
|
|
||
| :::danger[Web UI] | ||
|
|
||
| - Added in v1.0.0 (October 2026). | ||
|
|
||
| Most users should use the Web UI to configure Unpackerr. | ||
| While you can use this page for reference, you should avoid editing the config file. | ||
|
|
||
| - See [Web UI page](web-ui). | ||
|
|
||
| ::: | ||
|
|
||
| Unpackerr has a built in Web UI where you can configure all the settings using a validated form. | ||
| The Web UI also makes it easy to see what Unpackerr is doing live and to view the extraction history. | ||
| This page exists from a time when configuration required editing a file. Now it's for power users. | ||
|
|
||
| **Use the web interface. Don't edit the config file.** | ||
|
|
||
| ## Config | ||
|
|
||
| - Setting a log file is strongly recommended. This makes it much easier to troubleshoot problems. | ||
| - To use a config file in Docker, mount `/config` to the container and Unpackerr will write a config file. | ||
| - Update the new file at `/config/unpackerr.conf` and restart the container. | ||
| - When using a config file you must uncomment at minimum the `[[header]]` <font color="gray"> | ||
| ex. `[[radarr]]`</font>, `url` and `api_key`. | ||
| - When using a config file you must uncomment at minimum the `[header.key]` <font color="gray"> | ||
| ex. `[radarr.radarr]`</font>, `url` and `api_key`. | ||
| - Uncomment means remove the hash `#` at the beginning of the line. | ||
| - The config file format is [TOML](https://toml.io). | ||
| - Indentation is not important like YAML files, but it's used for ease of readability. | ||
| - You may use `"` or `'` or `'''` or `"""` to wrap strings. Recommend `'` for paths. | ||
|
|
||
| ### Generator | ||
|
|
||
| [Notifiarr](https://notifiarr.com) hosts a configuration file maker. | ||
| Simply fill in a web form, and click a button to get a working config file. | ||
|
|
||
| - **Access the generator here: https://notifiarr.com/unpackerr** | ||
|
|
||
| ### Two+ Instances | ||
|
|
||
| When adding a second (or third+) instance to the __config file__, you just | ||
| add another `[[header]]` <font color="gray">ex. `[[sonarr]]`</font> and the | ||
| `url`/`api_key`/etc under it. When adding a second instance to the __environment | ||
| variables__, you must increment the `0` to a `1`. And to a `2` if you have 3 | ||
| instances. There is no limit to the number of supported instances. This notation | ||
| works for all Starr apps, folders, command hooks, and webhooks. | ||
| When adding a second (or third+) instance to the __config file__, use another | ||
| named table <font color="gray">ex. `[sonarr.0]`, `[sonarr.uhd]`</font> and the | ||
| `url`/`api_key`/etc under it. Environment variables use that same key: | ||
| `UN_SONARR_0_URL` or `UN_SONARR_uhd_URL`. Array rows from older configs load as | ||
| keys `0`, `1`, …. There is no limit to the number of supported instances. This | ||
| notation works for all Starr apps, folders, command hooks, and webhooks. | ||
|
|
||
| <details> | ||
| <summary>Config examples with multiple instances.</summary> | ||
|
|
||
| - Config File example with two Radarrs and two Folders. | ||
|
|
||
| ```yaml | ||
| [[radarr]] | ||
| ```toml | ||
| [radarr.0] | ||
| url = "http://radarr" | ||
| api_key = "32characters" | ||
|
|
||
| [[radarr]] | ||
| [radarr.uhd] | ||
| name = "4K" | ||
| url = "http://radarr4k" | ||
| api_key = "32morecharacters" | ||
|
|
||
| [[folder]] | ||
| [folder.0] | ||
| path = "/data/downloads/software/" | ||
|
|
||
| [[folder]] | ||
| [folder.games] | ||
| path = "/data/downloads/games/" | ||
| ``` | ||
|
|
||
|
|
@@ -68,16 +81,81 @@ works for all Starr apps, folders, command hooks, and webhooks. | |
| ```shell | ||
| UN_RADARR_0_URL=http://radarr | ||
| UN_RADARR_0_API_KEY=32characters | ||
| UN_RADARR_1_URL=http://radarr4k | ||
| UN_RADARR_1_API_KEY=32morecharacters | ||
| UN_RADARR_uhd_URL=http://radarr4k | ||
| UN_RADARR_uhd_API_KEY=32morecharacters | ||
| UN_FOLDER_0_PATH=/data/downloads/software/ | ||
| UN_FOLDER_1_PATH=/data/downloads/games/ | ||
| UN_FOLDER_games_PATH=/data/downloads/games/ | ||
| ``` | ||
|
|
||
| </details> | ||
|
|
||
| Anything that [has a header](https://github.com/Unpackerr/unpackerr/blob/main/examples/unpackerr.conf.example#L99) | ||
| with double brackets `[[..]]` can be repeated as many times as you'd like. | ||
| Anything that has a header like `[sonarr.0]` or `[folder.software]` can be repeated with a unique key. | ||
|
|
||
| ### Whisparr | ||
|
|
||
| - Changed in v1.0.0 (October 2026). | ||
|
|
||
| Whisparr uses the Radarr API. Configure it as `[radarr.whisparr]` (env `UN_RADARR_whisparr_*`). | ||
| Set `name = "Whisparr"` if logs and hooks should keep that label. | ||
|
|
||
| ### Named instances | ||
|
|
||
| - Added in v1.0.0 (October 2026). | ||
|
|
||
| Starr apps, folders, webhooks, and command hooks are identified by a short key, not by list position. | ||
| In the config file use `[sonarr.uhd]`, `[folder.software]`, `[webhook.discord]`; in env use `UN_SONARR_uhd_URL`, | ||
| `UN_FOLDER_software_PATH`, `UN_WEBHOOK_discord_URL`. The optional `name` on Starr and hooks is only a label | ||
| (`name = "Starrs & Stripes"`). Existing `[[sonarr]]` / `[[folder]]` / `[[webhook]]` tables still load as keys | ||
| `0`, `1`, …. Open that section in the web UI and click Save: Unpackerr rewrites the file to named tables automatically. | ||
|
|
||
| ### Watch folders | ||
|
|
||
| - Changed in v1.0.0 (October 2026). | ||
|
|
||
| Folder watch is not Starr. Each `[folder.<key>]` is a path Unpackerr extracts | ||
| on its own. The generated tables below list every option. | ||
|
|
||
| **Poll interval** is per folder (`interval`, env `UN_FOLDER_<key>_INTERVAL`). | ||
| Default `0s` uses filesystem events. Set `1s` (or similar) on Docker and CIFS | ||
| when new archives never show in the queue. Global `folders.interval` / | ||
| `UN_FOLDERS_INTERVAL` is gone; leftover `[folders] interval` is ignored. | ||
| Details: [Docker Folder Watcher](docker#folder-watcher). | ||
|
|
||
| **After a restart**, recent folder history returns to the live queue the same | ||
| way Starr items do: EXTRACTED still waiting on `delete_after`, EXTRACTFAILED | ||
| retries, interrupted EXTRACTING, QUEUED, and WAITING after a retry. A path | ||
| you removed from config is not restored. Windows matches watch paths without | ||
| regard to drive-letter case. | ||
|
|
||
| **Incomplete downloads:** `wait_extensions` keeps the item WAITING while a | ||
| matching file exists in that item's top folder (`.part`, `.crdownload`, …). | ||
| Nested paths are not scanned. The queue shows the blocking filename. | ||
| Recheck is every 5s and does not enable the poller. | ||
| Env: `UN_FOLDER_<key>_WAIT_EXTENSION_0=.part`. | ||
|
|
||
| **Empty folders:** `skip_empty` (env `UN_FOLDER_<key>_SKIP_EMPTY`) drops | ||
| archive-free folders after `start_delay` with no history row and no webhook. | ||
|
|
||
| ### Lidarr cue sheets | ||
|
|
||
| Lidarr only. `split_flac` splits a completed download that has a CUE sheet. | ||
| It splits both FLAC and APE images into one file per track, then asks Lidarr | ||
| to import those tracks. Sonarr, Radarr, and Readarr ignore this setting. | ||
| A watched folder does not split cue sheets. | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Still open from last round: I reproduced it again just now against xtractr v0.7.0 in extractTrackedItem's exact call shape, and a watched folder with album.flac plus album.cue splits into 01/02/03 track files. folder.go and the xtractr pin haven't changed since my note. Something like "A watched folder splits a cue sheet and its audio on its own; split_flac only affects completed downloads before Lidarr import" would be accurate. |
||
|
|
||
| When the image is APE, `ape_format` chooses the files those tracks become: | ||
|
|
||
| - `ape` keeps Monkey's Audio. This is the default, and an empty value means the same. | ||
| - `wav` and `flac` decode the audio. FLAC cannot store 32-bit or float PCM. | ||
|
|
||
| `ape_compression` applies only when the format is APE. The choices are `1000`, | ||
| `2000`, `3000`, `4000`, and `5000`. A default of `0` is set to `2000` (normal). | ||
| WAV and FLAC ignore compression. | ||
|
|
||
| A lone `.ape` file that has no cue sheet is left for Lidarr to import as-is. | ||
|
|
||
| Environment variables use the instance key: `UN_LIDARR_<key>_SPLIT_FLAC`, | ||
| `UN_LIDARR_<key>_APE_FORMAT`, and `UN_LIDARR_<key>_APE_COMPRESSION`. | ||
|
|
||
| {/* The Global content is generated from here: https://github.com/Unpackerr/unpackerr/tree/main/init/config */} | ||
| <Global /> | ||
|
|
@@ -97,8 +175,8 @@ by setting the value to `filepath:/path/to/file.txt`. In other words, if you wan | |
| 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: | ||
|
|
||
| ```json | ||
| [[radarr]] | ||
| ```toml | ||
| [radarr.0] | ||
| url = "https://some.url/radarr" | ||
| api_key = "filepath:/etc/secrets/radarr.txt" | ||
| ``` | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This sentence doesn't hold up against the code. The folder watcher's extract call uses xtractr's full archive recognition, and
.cueis in that list (IsArchiveFile), so a watched folder containing album.flac plus album.cue gets its tracks split today. I reproduced it with a throwaway harness running xtractr v0.7.0 in extractTrackedItem's exact call shape, and it split into 01/02/03 tracks. Either correct the sentence (the folder watcher does extract cue sheets, it just has no split_flac/ape_format toggle), or, if folders are supposed to leave cue sheets alone, that's an app change to extractTrackedItem's suffix list, not a docs one.