-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
118 lines (110 loc) · 6.92 KB
/
Copy pathdocker-compose.yml
File metadata and controls
118 lines (110 loc) · 6.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
services:
transcodarr:
build:
context: .
args:
GPU_TYPE: nvidia # nvidia, intel, or cpu
container_name: transcodarr
restart: unless-stopped
# ── GPU Runtime ──────────────────────────────────────────
# NVIDIA: use nvidia runtime
runtime: nvidia
# Intel: uncomment below, remove runtime: nvidia above
# devices:
# - /dev/dri:/dev/dri
# CPU: remove runtime: nvidia, no devices needed
entrypoint: ["/bin/bash", "/scripts/transcodarr-config.sh"]
environment:
TZ: America/New_York
# NVIDIA only (remove for Intel/CPU)
NVIDIA_VISIBLE_DEVICES: all
NVIDIA_DRIVER_CAPABILITIES: all
# ── Paths ──────────────────────────────────────────────────
TRANSCODARR_STATE_DIR: /state
TRANSCODARR_QUEUE_DIR: /queue
TRANSCODARR_TMP_DIR_ENABLED: "false" # true enables optional SSD tmp pool
# TRANSCODARR_TMP_DIR: "/tmp-transcode" # Also mount the volume below when enabled
# ── Startup ────────────────────────────────────────────────
# false = start paused (default), true = start processing immediately
TRANSCODARR_AUTO_START: "false"
TRANSCODARR_DRY_RUN: "false" # true logs intended actions without replacing files
TRANSCODARR_STDERR_LOGGING: "true" # Write ffmpeg stderr logs for failed encodes
# ── Workers ────────────────────────────────────────────────
TRANSCODARR_GPU_WORKERS: "2" # Video encode workers
TRANSCODARR_CPU_WORKERS: "2" # Audio-only workers
TRANSCODARR_VALIDATE_WORKERS: "16" # ffprobe pool size
TRANSCODARR_WRANGLER_WORKERS: "16" # Disk resolver pool size
TRANSCODARR_STREAMS_PER_DISK: "2" # Max concurrent encodes per disk
TRANSCODARR_TIMEOUT: "14400" # Per-file timeout (4 hours)
# ── Output / Video ─────────────────────────────────────────
TRANSCODARR_OUTPUT_CONTAINER: "auto" # auto, mkv, mp4, or source
TRANSCODARR_SUBTITLE_MODE: "copy_matching" # copy_matching, strip, or copy_all
TRANSCODARR_PRESET: "balanced" # balanced, quality, small, or custom
TRANSCODARR_TARGET_CODEC: "h264" # h264, hevc, or av1
TRANSCODARR_QUALITY_TIER: "excellent" # economy, good, excellent, or archive
TRANSCODARR_ENCODER_SPEED: "medium" # slow, medium, or fast
TRANSCODARR_HW_DECODING: "cuda" # cuda (NVIDIA), qsv (Intel), none (CPU)
TRANSCODARR_NVENC_EXTRAS: "false" # Extra NVIDIA tuning when supported
TRANSCODARR_QSV_EXTRAS: "false" # Extra Intel QSV tuning when supported
TRANSCODARR_AV1_FILM_GRAIN: "8" # AV1 film grain synthesis, 0 disables
TRANSCODARR_HDR_HANDLING: "auto" # auto, tonemap, preserve, or refuse
TRANSCODARR_HEVC_UHQ_TUNE: "false" # NVIDIA HEVC ultra-high-quality tune
TRANSCODARR_MAX_WIDTH: "1920" # Downscale if wider
TRANSCODARR_MAX_HEIGHT: "1080" # Downscale if taller
# ── Audio ──────────────────────────────────────────────────
TRANSCODARR_AUDIO_CODEC: "aac" # Target audio codec
TRANSCODARR_AUDIO_LANG: "eng" # Keep this language track
TRANSCODARR_MAX_CHANNELS: "6" # Max audio channels (6 = 5.1)
TRANSCODARR_AUDIO_BITRATE_MONO: "" # Optional kbps override
TRANSCODARR_AUDIO_BITRATE_STEREO: "" # Optional kbps override
TRANSCODARR_AUDIO_BITRATE_SURROUND_51: "" # Optional kbps override
TRANSCODARR_AUDIO_BITRATE_SURROUND_71: "" # Optional kbps override
TRANSCODARR_SUB_LANG: "eng" # Subtitle language to keep
TRANSCODARR_FLAG_SHORT_RADARR_RUNTIME: "false" # Flag Radarr movies under 1 hour
# ── Disk Policy ────────────────────────────────────────────
TRANSCODARR_IGNORED_DISKS: "" # CSV of slugs to ignore, e.g. "disk3,disk7"
# ── Space Management ───────────────────────────────────────
TRANSCODARR_DISK_WARN_KB: "10485760" # 10 GB min free per disk
TRANSCODARR_SPACE_CHECK_INTERVAL: "30" # Space poll interval (seconds)
TRANSCODARR_DEST_SPACE_RETRY_TIMEOUT: "0" # Destination disk retry cap; 0 = retry forever
TRANSCODARR_SSD_SPACE_RETRY_TIMEOUT: "0" # SSD temp pool retry cap; 0 = retry forever
TRANSCODARR_TMP_MAX_KB: "1048576000" # SSD temp pool max (~1 TB)
# ── Secrets (from .env) ────────────────────────────────────
PLEX_URL: ${PLEX_URL}
PLEX_TOKEN: ${PLEX_TOKEN}
SONARR_URL: ${SONARR_URL}
SONARR_API_KEY: ${SONARR_API_KEY}
RADARR_URL: ${RADARR_URL}
RADARR_API_KEY: ${RADARR_API_KEY}
volumes:
# Media libraries (FUSE paths)
- /path/to/movies:/movies
- /path/to/tv:/tv
# Direct disk mounts (bypass FUSE for read + write performance)
# Add one per physical disk that holds media:
# - /mnt/disk1/Media:/disk1
# - /mnt/disk2/Media:/disk2
# Tmp dir for SSD pool (optional, uncomment TRANSCODARR_TMP_DIR above)
# - /path/to/ssd/tmp:/tmp-transcode
# Persistent state (config, processed.tsv, failed-files.tsv)
- ./data:/state
# Import queue (arr webhook job files)
- ./queue:/queue
# Scripts (read-only bind mount)
- ./scripts:/scripts:ro
# ── Access ───────────────────────────────────────────────────
# Option 1: Direct port (simple, no reverse proxy)
ports:
- "7879:7879"
# Option 2: Behind Traefik (HTTPS, recommended)
# Remove the ports section above and uncomment these labels:
# labels:
# - traefik.enable=true
# - traefik.docker.network=your-traefik-network
# - traefik.http.routers.transcodarr.rule=Host(`transcodarr.yourdomain.com`)
# - traefik.http.routers.transcodarr.entrypoints=websecure
# - traefik.http.routers.transcodarr.tls=true
# - traefik.http.routers.transcodarr.tls.certresolver=your-cert-resolver
# - traefik.http.services.transcodarr.loadbalancer.server.port=7879
# networks:
# - your-traefik-network