Files
TDarr-Auto-Requeue/README.md

97 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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_SIZE` of these files (sorted by Tdarrs internal logic) are requeued.
This selection ensures that:
* You dont 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-files` endpoint exists since 2024)
* Node 18+ (ESM support)
## Installation
```bash
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):
```dotenv
# 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
```bash
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!**