Tdarr
v1.0.0Distributed media transcoding with a bundled CPU worker.
x-arcane:
icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/tdarr.png
urls:
- https://docs.tdarr.io/docs/installation/docker/run-compose/
services:
tdarr:
image: ghcr.io/haveagitgat/tdarr:latest
restart: unless-stopped
ports:
- "${APP_PORT:-8265}:8265"
- "${SERVER_PORT:-8266}:8266"
environment:
TZ: ${TZ:-Etc/UTC}
PUID: ${PUID:-1000}
PGID: ${PGID:-1000}
serverIP: 0.0.0.0
serverPort: "8266"
webUIPort: "8265"
internalNode: "true"
inContainer: "true"
nodeName: CpuNode
transcodecpuWorkers: "1"
healthcheckcpuWorkers: "1"
transcodegpuWorkers: "0"
healthcheckgpuWorkers: "0"
ffmpegVersion: "7"
auth: "true"
seededApiKey: ${TDARR_API_KEY:?Set TDARR_API_KEY}
apiKey: ${TDARR_API_KEY:?Set TDARR_API_KEY}
volumes:
- ${BASE_PATH}/server:/app/server
- ${BASE_PATH}/configs:/app/configs
- ${BASE_PATH}/logs:/app/logs
- ${BASE_PATH}/cache:/temp
- ${DATA_PATH}:/data
labels:
com.getarcaneapp.arcane.icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/tdarr.png
APP_PORT=8265
SERVER_PORT=8266
BASE_PATH=/data/compose/tdarr
DATA_PATH=/data/media
PUID=1000
PGID=1000
TZ=Etc/UTC
# Must start with tapi_ and contain at least 14 alphanumeric/underscore characters.
TDARR_API_KEY=tapi_replace_with_random_key_12345
README
Distributed media transcoding with a bundled CPU worker.
Deployment
Copy .env.example to .env (or enter its values in Arcane), set paths and credentials, and deploy compose.yaml. Open http://HOST:APP_PORT (default 8265). Use reachable hostnames or host IPs for services in other Compose projects; localhost inside a container refers to that container.
The server includes an internal node (internalNode=true); no GPU devices or GPU runtime are required. Add a library under /data and review the configured CPU transcode/health-check workers in the Nodes page. Review plugins and test on copies before processing the library. Server state, configuration, logs, and transcode cache persist under BASE_PATH. SERVER_PORT (default 8266) exposes the server API for external nodes; the Web UI uses APP_PORT (default 8265). Authentication is enabled. Before deploying, set TDARR_API_KEY to tapi_ followed by at least 32 random letters or digits. The same key authenticates the bundled node and seeds the initial admin password; change the password after signing in.
Shared media paths
DATA_PATH=/data/media mounts the same host directory at /data. Use /data/downloads for downloads, /data/tv, /data/movies, and /data/music for libraries. Create these directories and grant the configured UID/GID access before deployment. Keep every participating application on the same host and container paths so imports and hardlinks work.
The existing Sonarr and Radarr templates use /tv or /movies and /downloads, and their default downloads host directory is /data/downloads. To adopt this layout, add ${DATA_PATH}:/data to those deployments and update their root folders and download client paths. Alternatively, change this deployment's media mounts to exactly match their existing host and container paths. Do not point two different host directories at what appears to be the same downloads path. Bazarr needs matching library paths or explicit path mappings.