Tdarr - Auto-Requeue Script
Automatically refills the Tdarr staging section whenever the number of actively processed files drops below a configurable threshold.
Features
| Feature | What it does |
|---|---|
| Staging guard | Checks how many files are currently being processed. |
| Smart picker | Pulls up to BATCH_SIZE items from Status ▪ Processed (table2) whose New Size is "-". |
| GUI-identical requeue | Re-queues the files with one bulk-update-files call (same payload the web UI sends). |
| Retry + back-off | Network errors or timeouts are retried with exponential back-off. |
| Timeout-resilient | If bulk-update-files times out, the script checks if the operation succeeded anyway. |
| Internal scheduler | No cron needed – the script runs continuously and checks every TDARR_INTERVAL_MIN. |
| JSON / pretty logging | Toggle pretty output with LOG_PRETTY=1. |
All settings via .env |
No hard-coded values; perfect for CI or Docker. |
File Selection Criteria
The script selects files based on the following logic:
-
It queries the internal
table2(equivalent to the Status ▪ Processed tab in the Tdarr UI). -
It filters for files that have the “New Size” field set to
"-", meaning:- The file was either skipped by a plugin decision or
- The file was marked as “Transcode Success / Not Required”
- And no new output file was produced (Tdarr left the file untouched).
-
The top
BATCH_SIZEof these files (sorted by Tdarr’s internal logic) are requeued.
This selection ensures that:
- You don’t accidentally requeue already optimized/transcoded files
- Only skipped or pass-through candidates get another chance (e.g., after plugin changes)
Requirements
- Tdarr Server ≥ 2.40 (the
bulk-update-filesendpoint exists since 2024) - Node 18+ (ESM support)
Installation
git clone https://github.com/your-org/tdarr-auto-requeue.git
cd tdarr-auto-requeue
npm i axios, pino, minimist, dotenv
Configuration
Create a .env file in the project root (or set the variables in your CI /
container manager):
# Tdarr connection
TDARR_URL=https://encode.computerliebe.org/api/v2
TDARR_API_KEY=tapi_XXXXXXXXXXXX
# Behaviour
TDARR_STAGING_LIMIT=50 # refill if staging count < 50
TDARR_BATCH_SIZE=50 # requeue at most 50 files per cycle
TDARR_INTERVAL_MIN=60 # how often the script runs (minutes)
TDARR_RETRIES=4 # API retries
TDARR_BACKOFF_MS=2000 # initial back-off in ms
BULK_TIMEOUT_MS=120000 # max wait time for bulk-update-files in ms
# Logging
LOG_LEVEL=info # or debug / warn / error
LOG_PRETTY=1 # pretty-printed logs
Tip: create a dedicated API key in Tdarr ▪ Tools ▪ API keys with Server write permissions only.
Usage
node tdarr_requeue.mjs # runs once, or in interval mode if TDARR_INTERVAL_MIN is set
The script will automatically re-run every TDARR_INTERVAL_MIN minutes.
No cron, systemd, or external timers needed.
Troubleshooting
| Symptom | Fix |
|---|---|
401 Unauthorized |
API key wrong or missing. |
FST_ERR_VALIDATION |
Your server expects a different payload – update Tdarr or open an issue with the error JSON. |
| Files not visible after requeue | Refresh the Status ▪ Queued / Staging view; workers may take a few seconds to pick them up. |
ECONNABORTED timeout |
This is handled gracefully. If the staging count increased, the script proceeds. |
| “Too many open files” | Increase ulimit -n on the host; Tdarr can be I/O intensive. |
Happy transcoding!