Tdarr Media Transcoding
Tdarr distributed transcoding system for media libraries.
[i]Overview
Tdarr is a distributed media transcoding system designed to automate the optimization of video libraries across multiple nodes. The tdarr-server component acts as the central orchestrator, managing transcoding jobs, monitoring media libraries, and providing a web-based interface for configuration and monitoring. It coordinates with worker nodes to distribute processing loads and maintains a database of transcoding operations and media file metadata. The tdarr-node components serve as distributed workers that execute the actual transcoding operations using tools like FFmpeg and HandBrake. This architecture allows media libraries to be processed efficiently across multiple machines, whether they're running on the same host or distributed across a network. The server component scans media directories, applies user-defined rules and plugins, and queues files for transcoding based on criteria like codec, resolution, or file size. This distributed transcoding setup is ideal for homelab enthusiasts, content creators, and media server administrators who need to optimize large video collections for storage efficiency or compatibility across different devices. The combination of centralized management with distributed processing power makes it possible to tackle massive transcoding jobs that would overwhelm a single machine, while the plugin system allows for highly customized transcoding workflows tailored to specific media requirements.
[*]Key Features
- [+]Distributed transcoding architecture with centralized job management and multiple worker nodes
- [+]Plugin-based transcoding system with pre-built and custom workflow options
- [+]Real-time media library scanning with automatic file detection and metadata extraction
- [+]Web-based dashboard showing transcoding progress, queue status, and system statistics
- [+]Hardware acceleration support for GPU-based transcoding using NVENC, QuickSync, and VAAPI
- [+]Conditional transcoding rules based on file properties like codec, bitrate, resolution, and age
- [+]Built-in support for popular transcoding engines including FFmpeg and HandBrake
- [+]Health checking system that validates transcoded files and rolls back failed operations
[#]Common Use Cases
- [1]Home media server optimization to reduce Plex or Jellyfin storage requirements
- [2]Content preparation for streaming services requiring specific codec and resolution standards
- [3]Legacy video archive modernization to convert old formats to contemporary codecs
- [4]Multi-location media processing across home lab environments with distributed compute resources
- [5]Automated video optimization for mobile device compatibility and bandwidth constraints
- [6]Batch processing of recorded TV content to remove commercials and optimize file sizes
- [7]Professional media workflow automation for content creators managing large video libraries
[!]Prerequisites
- [!]Minimum 4GB RAM per transcoding node, with 8GB recommended for 4K content processing
- [!]Sufficient storage space for transcoding cache, typically 2-3x the size of largest video files
- [!]Available ports 8265 (web UI) and 8266 (server communication) not conflicting with other services
- [!]Understanding of video codecs, containers, and transcoding concepts for effective plugin configuration
- [!]Fast storage or SSD recommended for temporary transcoding files to avoid I/O bottlenecks
- [!]Basic knowledge of FFmpeg parameters and video encoding settings for custom workflows
[!]
WARNING: For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms
[$]docker-compose.yml
[docker-compose.yml]
1services: 2 tdarr: 3 image: ghcr.io/haveagitgat/tdarr:latest4 container_name: tdarr5 environment: 6 - PUID=10007 - PGID=10008 - TZ=${TZ}9 - serverIP=0.0.0.010 - serverPort=826611 - webUIPort=826512 - internalNode=true13 - inContainer=true14 volumes: 15 - tdarr_server:/app/server16 - tdarr_configs:/app/configs17 - tdarr_logs:/app/logs18 - /path/to/media:/media19 - /path/to/transcode_cache:/temp20 ports: 21 - "8265:8265"22 - "8266:8266"23 networks: 24 - tdarr-network2526 tdarr-node: 27 image: ghcr.io/haveagitgat/tdarr_node:latest28 container_name: tdarr-node29 environment: 30 - PUID=100031 - PGID=100032 - TZ=${TZ}33 - serverIP=tdarr34 - serverPort=826635 - inContainer=true36 volumes: 37 - tdarr_configs:/app/configs38 - tdarr_logs:/app/logs39 - /path/to/media:/media40 - /path/to/transcode_cache:/temp41 networks: 42 - tdarr-network4344volumes: 45 tdarr_server: 46 tdarr_configs: 47 tdarr_logs: 4849networks: 50 tdarr-network: 51 driver: bridge[$].env Template
[.env]
1# Tdarr2TZ=UTC[i]Usage Notes
- [1]Web UI at http://localhost:8265
- [2]Add libraries and configure
- [3]Create processing plugins
- [4]Scale with additional nodes
- [5]GPU transcoding supported
Individual Services(2 services)
Copy individual services to mix and match with your existing compose files.
tdarr
tdarr:
image: ghcr.io/haveagitgat/tdarr:latest
container_name: tdarr
environment:
- PUID=1000
- PGID=1000
- TZ=${TZ}
- serverIP=0.0.0.0
- serverPort=8266
- webUIPort=8265
- internalNode=true
- inContainer=true
volumes:
- tdarr_server:/app/server
- tdarr_configs:/app/configs
- tdarr_logs:/app/logs
- /path/to/media:/media
- /path/to/transcode_cache:/temp
ports:
- "8265:8265"
- "8266:8266"
networks:
- tdarr-network
tdarr-node
tdarr-node:
image: ghcr.io/haveagitgat/tdarr_node:latest
container_name: tdarr-node
environment:
- PUID=1000
- PGID=1000
- TZ=${TZ}
- serverIP=tdarr
- serverPort=8266
- inContainer=true
volumes:
- tdarr_configs:/app/configs
- tdarr_logs:/app/logs
- /path/to/media:/media
- /path/to/transcode_cache:/temp
networks:
- tdarr-network
[>]Quick Start
[terminal]
1# 1. Create the compose file2cat > docker-compose.yml << 'EOF'3services:4 tdarr:5 image: ghcr.io/haveagitgat/tdarr:latest6 container_name: tdarr7 environment:8 - PUID=10009 - PGID=100010 - TZ=${TZ}11 - serverIP=0.0.0.012 - serverPort=826613 - webUIPort=826514 - internalNode=true15 - inContainer=true16 volumes:17 - tdarr_server:/app/server18 - tdarr_configs:/app/configs19 - tdarr_logs:/app/logs20 - /path/to/media:/media21 - /path/to/transcode_cache:/temp22 ports:23 - "8265:8265"24 - "8266:8266"25 networks:26 - tdarr-network2728 tdarr-node:29 image: ghcr.io/haveagitgat/tdarr_node:latest30 container_name: tdarr-node31 environment:32 - PUID=100033 - PGID=100034 - TZ=${TZ}35 - serverIP=tdarr36 - serverPort=826637 - inContainer=true38 volumes:39 - tdarr_configs:/app/configs40 - tdarr_logs:/app/logs41 - /path/to/media:/media42 - /path/to/transcode_cache:/temp43 networks:44 - tdarr-network4546volumes:47 tdarr_server:48 tdarr_configs:49 tdarr_logs:5051networks:52 tdarr-network:53 driver: bridge54EOF5556# 2. Create the .env file57cat > .env << 'EOF'58# Tdarr59TZ=UTC60EOF6162# 3. Start the services63docker compose up -d6465# 4. View logs66docker compose logs -f[>]One-Liner
Run this command to download and set up the recipe in one step:
[terminal]
1curl -fsSL https://docker.recipes/api/recipes/tdarr-transcode/run | bash[?]Troubleshooting
- [!]Node shows as offline in web UI: Verify serverIP environment variable matches tdarr service name and network connectivity between containers
- [!]Transcoding jobs fail with 'file not found' errors: Ensure media volume mounts are identical between tdarr-server and tdarr-node containers
- [!]High memory usage during transcoding: Reduce concurrent transcoding jobs in node settings or increase available RAM allocation
- [!]GPU transcoding not working: Install nvidia-docker runtime and add device mappings for GPU access to transcoding nodes
- [!]Files stuck in processing queue: Check transcoding cache volume has sufficient free space and proper write permissions
- [!]Web UI shows 'server connection lost': Verify tdarr-server container is running and port 8266 is accessible within the docker network
Community Notes
Loading...
Loading notes...
## Download Recipe Kit
Get all files in a ready-to-deploy package
Includes docker-compose.yml, .env template, README, and license
## Components
tdarr-servertdarr-node
## Tags
#tdarr#transcoding#ffmpeg#handbrake#media
## Category
Media & EntertainmentShortcuts: C CopyF FavoriteD Download