Queue¶
Queue settings control how many NZBs can wait and process at once, plus the provider connections available to active imports.
Headless ENV
Map config keys below to NZBDAV_CONFIG__... with the
naming algorithm
(queue.worker-count → NZBDAV_CONFIG__QUEUE__WORKER_COUNT).
Processing capacity¶
| Control | Config key | Default | Effect |
|---|---|---|---|
| Concurrent Queue Downloads since 0.9.0 | queue.worker-count |
1 |
Process 1–10 NZBs concurrently; the oldest active item is preferred |
| Queue Download Connections | usenet.max-queue-connections |
blank = all | Provider connections shared by queue workers and background health checks |
Adding workers does not add provider capacity. Additional workers use spare connections from the same queue budget, so raising concurrency primarily lets independent jobs make progress while the oldest item retains preferred access.
The headless-only usenet.max-queue-connections-preset supports
low/medium/high/max (25/50/75/100% of pooled provider connections).
An explicit usenet.max-queue-connections value takes precedence.
Playback has a separate connection budget and priority policy under Streaming.
Queue admission¶
| Control | Config key | Default | Effect |
|---|---|---|---|
| Maximum queued jobs since 0.10.0 | queue.max-items |
0 (unlimited) |
Reject new SAB submissions at this queue depth |
| Resume threshold since 0.10.0 | queue.resume-threshold |
0 |
Resume admission at or below this depth |
At the maximum, InfiniDysk returns the standard SAB-compatible
{"status": false, "error": "..."} response without storing the NZB. Sonarr
and Radarr treat this as a temporarily unavailable download client and keep
automatic-search releases pending for a later retry.
The resume threshold adds hysteresis after the maximum is reached. Set it to
0 to resume as soon as the queue drops below the maximum. Duplicate
submissions that replace an existing queue item remain allowed because they do
not increase queue depth.
Download schedule since 1.3.0¶
| Control | Config key | Default | Effect |
|---|---|---|---|
| Download schedule | queue.processing-schedule |
empty (always on) | JSON weekly windows that admit new queue downloads |
Empty or disabled JSON is today's unrestricted behavior. Enabled schedules need at least one window. Weekdays are 0 (Sunday) through 6 (Saturday). Minutes are half-open [start, end) in the host's local timezone (container TZ). end before start is overnight. Active imports finish if a window closes; WebDAV playback is never gated. The scheduler never writes queue.paused — SAB mode=pause|resume remains the manual override. When only the schedule is closed, SAB queue.paused is true and pause_int is whole seconds until the next open window. Manual pause reports pause_int as 0.
Reordering since 1.2.0¶
Use the Queue page's up, down, or top controls to change waiting-job order. Controls work across page boundaries and preserve the selected job while the list refreshes. Queue priority remains the primary ordering rule: placing a job beside a different priority adopts that priority. Moving a paused job into a non-paused priority resumes it.
Active downloads remain pinned and are never interrupted by reordering. A job can be promoted to the first waiting position, but cannot displace an active worker.
Stuck-item watchdog since 1.1.0¶
Each active queue worker runs a progress watchdog. A worker is treated as stuck
only when it makes no visible progress and fetches no segments for
QUEUE_ITEM_STUCK_MINUTES (default 5) — long silent phases that keep
fetching (large PAR2 walks, archive header scans) are not penalized.
When an item stalls, InfiniDysk pauses it (PauseUntil ≈ 15–20 minutes with
jitter) and cancels the worker so the queue can move on; the item retries after
the pause expires. After a download stalls 3 times in total the item is
failed into history with a clear error, so Sonarr/Radarr can blocklist the
release and grab another one instead of waiting forever. The stall count is
cumulative for that enqueue (not reset by a later successful fetch), so a
release that wedges after a brief burst of progress still fails over.
Tune the stall budget with QUEUE_ITEM_STUCK_MINUTES when long phases legitimately
hold progress (large archives, full article-existence health checks).