Configuration Variables
Tdarr can be configured using either JSON configuration files or environment variables. This page covers all available configuration options for both Tdarr Server and Tdarr Node.
Configuration Priority
Understanding how Tdarr reads configuration is important:
- Environment Variables (highest priority) - Always override other settings
- JSON Configuration Files (medium priority) - Used if no environment variable is set
- Default Values (lowest priority) - Used when no other configuration exists
If you set serverPort=9000
as an environment variable and "serverPort": "8266"
in your JSON config, Tdarr will use port 9000.
Tdarr Server Variables
Variable | Default | Description |
---|---|---|
serverPort | 8266 | Port for server communication |
webUIPort | 8265 | Port for the web UI interface |
serverIP | 0.0.0.0 | IP address the server binds to |
serverBindIP | false | Whether to bind to a specific IP |
serverDualStack | false | Enable dual-stack (IPv4/IPv6) networking support - binds to :: when enabled and IPv6 is available |
handbrakePath | "" | Path to Handbrake executable |
ffmpegPath | "" | Path to FFmpeg executable |
mkvpropeditPath | "" | Path to mkvpropedit executable |
ccextractorPath | "" | Path to CCExtractor executable |
openBrowser | true | Auto-open browser on startup |
cronPluginUpdate | "" | Cron schedule for automatic plugin updates |
auth | false | Enable authentication |
authSecretKey | Auto-generated | Secret key for authentication |
seededApiKey | "" | Pre-create an API key on startup for automated deployments (must start with 'tapi_', be at least 14 characters, and contain only alphanumeric characters and underscores) |
maxLogSizeMB | 10 | Maximum log file size in MB |
Tdarr Node Variables
Variable | Default | Description |
---|---|---|
nodeName | Auto-generated | Unique name for this node |
serverURL | Auto-generated | Full URL to the Tdarr server (e.g., http://192.168.1.100:8266 ) |
serverIP | 0.0.0.0 | IP address of the Tdarr server |
serverPort | 8266 | Port of the Tdarr server |
handbrakePath | "" | Path to Handbrake executable |
ffmpegPath | "" | Path to FFmpeg executable |
mkvpropeditPath | "" | Path to mkvpropedit executable |
pathTranslators | [] | Path mappings for cross-platform access |
nodeType | mapped | Node type: mapped or unmapped |
unmappedNodeCache | Auto-generated | Cache directory for unmapped nodes, defaults to next to the Tdarr_Node application folder |
priority | -1 | Node priority (-1 is no priority, 0 is the highest priority, 1 is the next highest priority etc) |
cronPluginUpdate | "" | Cron schedule for automatic plugin updates |
apiKey | "" | API key for server authentication |
maxLogSizeMB | 10 | Maximum log file size in MB |
pollInterval | 2000 | How often to check server (milliseconds) |
startPaused | false | Start node in paused state |
Worker Configuration (Environment Variables Only)
These variables are useful for automated environments where you want a node to start up with a certain number of workers already available. These variables can ONLY be set as environment variables and can be overridden in the web UI after startup:
Variable | Description |
---|---|
transcodegpuWorkers | Number of GPU workers for transcoding |
transcodecpuWorkers | Number of CPU workers for transcoding |
healthcheckgpuWorkers | Number of GPU workers for health checks |
healthcheckcpuWorkers | Number of CPU workers for health checks |
Special Configuration Notes
Dual-Stack Networking
The serverDualStack
configuration enables dual-stack (IPv4/IPv6) networking support:
- When enabled: Server binds to
::
(IPv6 wildcard) if IPv6 is available, allowing both IPv4 and IPv6 connections - When disabled: Server uses the standard IPv4 binding behavior (
0.0.0.0
or specific IP based onserverBindIP
) - IPv6 Detection: Automatically detects IPv6 availability on the system before enabling dual-stack mode
- Use Cases: Particularly useful for Kubernetes environments and modern networking setups that require IPv6 support
This setting is especially useful in Kubernetes environments where dual-stack networking is configured, allowing Tdarr to accept connections from both IPv4 and IPv6 clients.
Server URL Configuration
The serverURL
variable has special behavior:
- Recommended: Set
serverURL
directly (e.g.,http://192.168.1.100:8266
) - Auto-generation: If not set, created from
serverIP
+serverPort
- Environment variable behavior: If you set
serverIP
as env var but notserverURL
, it will auto-generate
Once serverURL
is saved to JSON config, changing serverIP
won't update it automatically. You must:
- Set
serverURL
as environment variable, OR - Manually update the JSON config, OR
- Delete
serverURL
from JSON to allow auto-generation
Path Translators
For cross-platform file access, use pathTranslators
to map server paths to node paths:
In JSON config:
{
"pathTranslators": [
{
"server": "/media",
"node": "W:/media"
}
]
}
As environment variable (must be base64-encoded JSON):
# First create the JSON array
echo '[{"server":"/media","node":"W:/media"}]' | base64
# Then set as environment variable
export pathTranslators="W3sic2VydmVyIjoiL21lZGlhIiwibm9kZSI6IlcvbWVkaWEifV0="
Setting Environment Variables
Docker
Single container:
docker run -ti \
-e "serverPort=8266" \
-e "webUIPort=8265" \
-e "auth=true" \
ghcr.io/haveagitgat/tdarr
Docker Compose:
services:
tdarr:
image: ghcr.io/haveagitgat/tdarr
environment:
- serverPort=8266
- webUIPort=8265
- auth=true
Native Installation
Windows (Command Prompt):
set serverPort=8266
set auth=true
Windows (PowerShell):
$env:serverPort="8266"
$env:auth="true"
Linux/macOS:
export serverPort=8266
export auth=true
JSON Configuration Examples
Server Configuration
Create /configs/Tdarr_Server_Config.json
:
{
"serverPort": "8266",
"webUIPort": "8265",
"serverIP": "0.0.0.0",
"auth": false,
"openBrowser": true,
"maxLogSizeMB": 10,
"handbrakePath": "",
"ffmpegPath": ""
}
Node Configuration
Create /configs/Tdarr_Node_Config.json
:
{
"nodeName": "MyNode",
"serverURL": "http://192.168.1.100:8266",
"nodeType": "mapped",
"priority": 0,
"pathTranslators": [
{
"server": "/media",
"node": "/mnt/media"
}
]
}
Use forward slashes /
or double backslashes \\\\
in JSON paths to avoid corruption.
authSecretKey
is automatically generated when Tdarr startsnodeName
gets a random name if not specifiedserverURL
is auto-generated fromserverIP
+serverPort
if not set