Skip to content

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 parallel
  • healthcheckcpuWorkers=1 — 1 CPU health check verify
  • No GPU workers

First-Time Setup (UI)

1. Access UI

http://<unraid-ip>:8265

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

Tdarr_Plugin_075a_FFMPEG_HEVC_Generic
- Codec: HEVC (h265) - CRF: 23 (sweet spot for quality/size) - Preset: medium (balance speed/quality) - Auto-skips files already h265

Plugin 2: Verify Duration

Tdarr_Plugin_a9he_New_file_duration_check
- Tolerance: 5% - Fails if output duration differs >5% from source - Catches: truncated files, missing segments

Plugin 3: Verify Size Savings

Tdarr_Plugin_a9hf_New_file_size_check
- Max ratio: 0.9 (output must be <90% of source) - Fails if transcode didn't actually save space - Catches: ineffective transcode, bloated output

4. Enable Health Check

Library → Settings → Health Check
  ✅ Enable health check after transcode

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

  1. FFmpeg exit code — must be 0 (built-in, always on)
  2. File size ratio — output < 90% source (Plugin 3)
  3. Duration match — within 5% tolerance (Plugin 2)
  4. 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