Skip to content

Commit 2a41ec3

Browse files
Document v1 folder watch: per-path poll, restore, wait/skip.
Docker no longer auto-polls via folders.interval; call out wait_extensions, skip_empty, and history restore so upgrades do not leave an empty queue. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 735237a commit 2a41ec3

7 files changed

Lines changed: 137 additions & 13 deletions

File tree

‎docs/install/compose.md‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,21 @@ And if you're trying to watch a folder, add this `environment:` variable with _y
5454
- UN_FOLDER_0_PATH=/downloads/autoxtract
5555
```
5656

57+
On Docker, filesystem events are often missing. Add a poll interval on that
58+
same key if nothing shows in the queue:
59+
60+
```yaml
61+
- UN_FOLDER_0_INTERVAL=1s
62+
```
63+
64+
Incomplete downloads can wait on a suffix instead of polling:
65+
66+
```yaml
67+
- UN_FOLDER_0_WAIT_EXTENSION_0=.part
68+
```
69+
70+
See [Folder Watcher](docker#folder-watcher).
71+
5772
## Data Mount
5873

5974
<DataMount />

‎docs/install/configuration.md‎

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,34 @@ In the config file use `[sonarr.uhd]`, `[folder.software]`, `[webhook.discord]`;
108108
(`name = "Starrs & Stripes"`). Existing `[[sonarr]]` / `[[folder]]` / `[[webhook]]` tables still load as keys
109109
`0`, `1`, …. Open that section in the web UI and click Save: Unpackerr rewrites the file to named tables automatically.
110110

111+
### Watch folders
112+
113+
- Changed in v1.0.0 (September 2026).
114+
115+
Folder watch is not Starr. Each `[folder.<key>]` is a path Unpackerr extracts
116+
on its own. The generated tables below list every option.
117+
118+
**Poll interval** is per folder (`interval`, env `UN_FOLDER_<key>_INTERVAL`).
119+
Default `0s` uses filesystem events. Set `1s` (or similar) on Docker and CIFS
120+
when new archives never show in the queue. Global `folders.interval` /
121+
`UN_FOLDERS_INTERVAL` is gone; leftover `[folders] interval` is ignored.
122+
Details: [Docker Folder Watcher](docker#folder-watcher).
123+
124+
**After a restart**, recent folder history returns to the live queue the same
125+
way Starr items do: EXTRACTED still waiting on `delete_after`, EXTRACTFAILED
126+
retries, interrupted EXTRACTING, QUEUED, and WAITING after a retry. A path
127+
you removed from config is not restored. Windows matches watch paths without
128+
regard to drive-letter case.
129+
130+
**Incomplete downloads:** `wait_extensions` keeps the item WAITING while a
131+
matching file exists in that item's top folder (`.part`, `.crdownload`, …).
132+
Nested paths are not scanned. The queue shows the blocking filename.
133+
Recheck is every 5s and does not enable the poller.
134+
Env: `UN_FOLDER_<key>_WAIT_EXTENSION_0=.part`.
135+
136+
**Empty folders:** `skip_empty` (env `UN_FOLDER_<key>_SKIP_EMPTY`) drops
137+
archive-free folders after `start_delay` with no history row and no webhook.
138+
111139
{/* The Global content is generated from here: https://github.com/Unpackerr/unpackerr/tree/main/init/config */}
112140
<Global />
113141

‎docs/install/docker.md‎

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -106,16 +106,28 @@ docker run -e PUID=1000 -e PGID=100 -d -v /mnt/data:/data -v /mnt/config:/config
106106

107107
## Folder Watcher
108108

109-
Watching folders in Docker will cause Unpackerr to constantly poll the
110-
watched-folder for changes at a default rate of `1s` (1 second).
109+
The Folder Watch feature uses `inotify` (a.k.a. `fsnotify`) to notice new
110+
archives. Each watch path has its own `interval`. The default is `0s`, which
111+
means filesystem events only — Unpackerr does **not** poll.
111112

112-
The Folder Watch feature uses `inotify` (a.k.a. `fsnotify`) to identify changes to the
113-
watched folder. A folder-poller is automatically started when run in Docker because
114-
`inotify` is unreliable. Disable the folder poller (and rely on `inotify` only) by
115-
setting `folders.interval` (`UN_FOLDERS_INTERVAL`) to `1ms`.
113+
Docker bind mounts and CIFS often drop or delay those events, so items never
114+
appear in the queue. Turn polling on for that path:
116115

117-
If Unpackerr has trouble determining when downloads are finished, set
118-
`start_delay` high enough to avoid beginning extracting files that are
119-
still being transferred.
116+
- Web UI: **Settings → Folders** → **Poll interval** (try `1s`).
117+
- Config: `interval = "1s"` under `[folder.downloads]`.
118+
- Env: `UN_FOLDER_downloads_INTERVAL=1s` (same key as the table).
119+
120+
Leave `interval` at `0s` when native fsnotify works. Polling increases disk
121+
reads. A folder with a poll interval uses the poller only; other folders keep
122+
fsnotify.
123+
124+
v0.x Docker installs auto-polled every 1s via global `folders.interval`
125+
(`UN_FOLDERS_INTERVAL`). That setting is gone. An old `[folders] interval`
126+
line in the file is ignored.
127+
128+
If Unpackerr starts extracting files that are still downloading, raise
129+
`start_delay`, or set `wait_extensions` (for example `.part`, `.crdownload`)
130+
on that folder. Waiting items are rechecked every 5 seconds without turning
131+
the poller on. See [Watch folders](configuration#watch-folders).
120132

121133
**Alternatively, run Unpackerr as a native service instead of in Docker.**

‎docs/install/upgrading.md‎

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,18 @@ If you are on 0.16.x or earlier today, read this page before you pull `latest`.
3030
`system:metrics:read` (`Authorization: Bearer` or `X-Api-Key`).
3131
- Docker: mount `/config` if you want the UI to persist settings. Unpackerr
3232
writes `/config/unpackerr.conf` when that directory exists.
33-
34-
The extractor, Starr polling, and folder watch behave as they did. This release
35-
is mostly about operating the app from a browser instead of a pile of `UN_*`
36-
variables.
33+
- Folder poll interval is per watch path (`interval` on `[folder.foo]`, env
34+
`UN_FOLDER_foo_INTERVAL`). Default `0s` is fsnotify only. Docker no longer
35+
auto-polls every second. Global `folders.interval` / `UN_FOLDERS_INTERVAL`
36+
is ignored.
37+
- Watched-folder extracts resume from history after a restart. Incomplete
38+
downloads can wait on `wait_extensions`; archive-free folders can be
39+
skipped with `skip_empty`.
40+
41+
The extractor and Starr polling work as they did. Folder watch picked up a
42+
few v1 changes (per-path poll, restore after restart, wait/skip). See
43+
[Watched folders](#watched-folders). This release is still mostly about
44+
operating the app from a browser instead of a pile of `UN_*` variables.
3745

3846
## Config file permissions
3947

@@ -169,6 +177,45 @@ Environment variables: `UN_WHISPARR_*` becomes `UN_RADARR_whisparr_*`
169177
(for example `UN_RADARR_whisparr_URL`). Prefer putting this in the file and
170178
dropping the env vars.
171179

180+
## Watched folders
181+
182+
v0.x Docker set a global `folders.interval` (default 1s in the container).
183+
That knob is gone. Each watch path has its own `interval`, default **off**.
184+
185+
If you watched folders in Docker and items stop appearing after upgrade:
186+
187+
1. Open **Settings → Folders**.
188+
2. Set **Poll interval** to `1s` on each path that lives on a bind mount or
189+
CIFS share.
190+
3. Save.
191+
192+
Config equivalent:
193+
194+
```toml
195+
[folder.downloads]
196+
path = "/downloads/extract"
197+
interval = "1s"
198+
```
199+
200+
Env: `UN_FOLDER_downloads_INTERVAL=1s`. Native installs that already saw
201+
fsnotify events can leave the default.
202+
203+
Other folder behavior that changed in v1:
204+
205+
- **Restart:** folder queue rows restore from history (delete-after,
206+
retries, interrupted extracts, waiting after retry). Starr WAITING is
207+
still not restored; the next poll recreates it. Removing a watch path
208+
drops those rows.
209+
- **`wait_extensions`:** stay WAITING while `.part` / `.crdownload` (or
210+
whatever you list) exists in the item's top folder.
211+
- **`skip_empty`:** after `start_delay`, folders with no archives leave the
212+
queue silently.
213+
- Named tables: `[folder.software]` / `UN_FOLDER_software_PATH`. Old
214+
`[[folder]]` rows load as `0`, `1`, ….
215+
216+
Details: [Watch folders](/docs/install/configuration#watch-folders) and
217+
[Docker Folder Watcher](/docs/install/docker#folder-watcher).
218+
172219
## After upgrade
173220

174221
1. Confirm the UI loads and you can Save a harmless setting (or a Starr
@@ -177,6 +224,8 @@ dropping the env vars.
177224
3. If you scrape Prometheus, add an API key with `system:metrics:read`.
178225
4. Optional: open the Starr (or folder/hook) page and Save once so named
179226
tables replace leftover `[[sonarr]]` arrays.
227+
5. If you watch folders in Docker, set a poll interval on each path. See
228+
[Watched folders](#watched-folders).
180229

181230
Day-to-day use after that is on the [Web UI](/docs/install/web-ui) page
182231
(password reset, log lines, reverse proxy).

‎docs/install/web-ui.md‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ locked in the form until you remove that variable.
1616
## What you get
1717

1818
- **Dashboard** — live extract queue (retry / forget) and Starr poll counts.
19+
Progress shows archive index, speed/ETA, and countdowns (start delay,
20+
retry, folder cleanup). Folder WAITING rows show the blocking filename
21+
when `wait_extensions` is set.
1922
- **History** — completed extracts, with delete and clear.
2023
- **Logs** — follow the app log in the browser (and download rotated files).
2124
- **Settings** — general, Starr, folders, webhooks, command hooks, web server.

‎docs/unpackerr/faq.md‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,10 @@ If hard links don't work **at all** it could indicate another problem
6565
with your Starr app setup. See [TRaSH's Guides](https://trash-guides.info/Hardlinks/Hardlinks-and-Instant-Moves/)
6666
and the [Servarr Team's Docker Guide](https://wiki.servarr.com/docker-guide)
6767
for details on Docker path best-practices.
68+
69+
## 6. Why don't watched folders show up in Docker?
70+
71+
v1 watches with filesystem events by default. Docker (and CIFS) often hide
72+
those events, so the queue stays empty. Set that folder's poll `interval`
73+
to `1s` in the UI or `UN_FOLDER_<key>_INTERVAL=1s`. See
74+
[Folder Watcher](/docs/install/docker#folder-watcher).

‎docs/unpackerr/troubleshooting.md‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,16 @@ If transfers are in an Error state they will not be extracted.
3535
**Permissions** tend to mess things up too, so make sure the user Unpackerr runs as can read
3636
and write to your download location.
3737

38+
## Folder watch never queues anything
39+
40+
On Docker bind mounts and CIFS, `inotify` often never fires. v1 does not
41+
poll unless you set a per-folder `interval` (try `1s`). The old global
42+
`UN_FOLDERS_INTERVAL` does nothing.
43+
44+
If extracts start while a download is still writing, set `wait_extensions`
45+
(`.part`, `.crdownload`) or raise `start_delay`. See
46+
[Watch folders](/docs/install/configuration#watch-folders).
47+
3848
## Log files
3949

4050
If you set `log_file`, that path is where Unpackerr writes. The Windows tray install

0 commit comments

Comments
 (0)