Tdarr — Setup & Safe Profile Guide¶
Overview¶
Distributed transcode automation. CPU only. H264→H265 (HEVC).
aria2 download → /mnt/user/video/onejav (source)
→ Tdarr Folder Watcher detects new file
→ Transcode h264→h265 (CRF 23, preset medium, CPU)
→ Health Check (FFmpeg full decode)
→ Output → /mnt/user/video/h265
→ Emby/Jellyfin scan /mnt/user/video/h265
Volume Mapping¶
| Container Path | Host Path | Purpose |
|---|---|---|
/media/video |
/mnt/user/video |
Source (scan, read) |
/media/downloads |
/mnt/user/downloads |
Additional source |
/media/output |
/mnt/user/video/h265 |
H265 output (write) |
/temp |
/mnt/user/appdata/tdarr/transcode-cache |
Transcode cache (SSD) |
/app/server |
/mnt/user/appdata/tdarr/server |
DB, plugins |
/app/configs |
/mnt/user/appdata/tdarr/configs |
Config JSON |
/app/logs |
/mnt/user/appdata/tdarr/logs |
Logs |
Workers¶
transcodecpuWorkers=2— 2 CPU transcode parallelhealthcheckcpuWorkers=1— 1 CPU health check verify- No GPU workers
First-Time Setup (UI)¶
1. Access UI¶
2. Create Library¶
Libraries → Add Library
Name: onejav-h265
Source path: /media/video/onejav
Transcode mode: ✅ Copy to output directory
Output path: /media/output
Folder Watcher: ✅ Enabled
Why "Copy to output" not "Replace original": - Keeps source files intact in /onejav - Emby/Jellyfin continue serving originals until h265 ready - Safe — if transcode has issues, originals untouched - Can manually delete originals later after verifying h265
3. Plugin Stack (Safe Profile)¶
Add these plugins IN ORDER in the Transcode tab:
Plugin 1: Transcode h264→h265¶
- Codec: HEVC (h265) - CRF: 23 (sweet spot for quality/size) - Preset: medium (balance speed/quality) - Auto-skips files already h265Plugin 2: Verify Duration¶
- Tolerance: 5% - Fails if output duration differs >5% from source - Catches: truncated files, missing segmentsPlugin 3: Verify Size Savings¶
- Max ratio: 0.9 (output must be <90% of source) - Fails if transcode didn't actually save space - Catches: ineffective transcode, bloated output4. Enable Health Check¶
Health check runs ffmpeg -v error -i file -f null - (full decode).
Detects: corruption, missing frames, decode errors.
CRF Reference (Quality Guide)¶
| Content | CRF | Quality | Notes |
|---|---|---|---|
| Anime/Animation | 20-22 | Excellent | Avoid banding in gradients |
| 1080p general | 23 | Good | Default sweet spot |
| 720p general | 24-26 | OK | Less critical content |
| 4K HDR | 22-24 | Good | Should preserve HDR metadata |
Safety: Preventing Corrupted Output¶
4-Layer Verification¶
- FFmpeg exit code — must be 0 (built-in, always on)
- File size ratio — output < 90% source (Plugin 3)
- Duration match — within 5% tolerance (Plugin 2)
- Health Check worker — FFmpeg full decode (separate worker)
If any check fails:¶
- Original file kept untouched
- Failed output deleted from cache
- Error logged in Job Reports (UI → Job Reports tab)
Safety: Aria2 Integration (Torrent Files)¶
Problem: Transcode file being downloaded/seeded¶
| Risk | Protection |
|---|---|
| File being written by aria2 | Tdarr file lock detection — skips locked files |
| Torrent seeding | File in use — Tdarr skips |
| .part files | Tdarr only processes .mkv/.mp4/.avi extensions |
Optional: Modified Date Filter¶
Add plugin Tdarr_Plugin_tsld_filter_modified_date before transcode plugins:
- Only process files older than 1 day
- Extra safety margin for downloads to complete
Emby/Jellyfin Integration¶
Both already mount /mnt/user/video/h265:
- Emby: /data/h265
- Jellyfin: /data/h265
After deploy, add library in Emby/Jellyfin UI pointing to the h265 path.
Monitoring¶
- Job Reports tab: every file pass/fail with details
- Worker verdict history: transcode outcomes over time
- Library stats: total files, transcode progress, space saved
- Logs:
/mnt/user/appdata/tdarr/logs/
Troubleshooting¶
| Issue | Cause | Fix |
|---|---|---|
| File skipped | Already h265 | Normal — plugin auto-detects |
| Transcode very slow | CPU bottleneck | Reduce transcodecpuWorkers to 1 |
| Output larger than source | CRF too low or source already compressed | Increase CRF or skip already-small files |
| Artifact/blocky video | CRF too high or preset too fast | Lower CRF (20-22), use preset medium/slow |
| Vỡ hình trên dark scenes | 8-bit output from 10-bit source | Add HDR/10-bit filter → skip or preserve 10-bit |