Reasons to Split
Security isolation
The Ethereum keystore lives only on the Orchestrator machine. GPU worker machines have no wallet access. A compromised worker cannot drain funds or perform on-chain actions.
Independent scaling
Add or remove Transcoder machines without touching the Orchestrator. Scale GPU capacity by connecting more Transcoder nodes - each reports its own capacity to the Orchestrator.
Stable reward calling
The Orchestrator machine can be a small stable VPS with no GPU. Reward calls come from this machine, independent of GPU machine availability.
Role-optimised hardware
Optimise the Orchestrator for fast CPU, reliable network, and stable uptime. Optimise Transcoder machines purely for GPU throughput.
Architecture
Data flow:- A Gateway connects to the Orchestrator on port 8935 (the public service URI)
- The Orchestrator receives the job and dispatches it to an available connected Transcoder via gRPC
- The Transcoder processes the segment and returns results to the Orchestrator
- The Orchestrator returns results to the Gateway
Part 1 - Orchestrator Machine
The Orchestrator machine needs: a publicly accessible IP or hostname, an Ethereum keystore, and outbound access to an Arbitrum RPC endpoint. It does not need a GPU.-transcoder, go-livepeer runs in standalone Orchestrator mode - it routes jobs to
connected Transcoders but performs no local transcoding. It will refuse job assignments until at
least one Transcoder connects.
Pass
-orchSecret as a file path for production setups - secrets passed as plaintext values are
visible in the process list via ps aux.Part 2 - Transcoder Machines
Each Transcoder machine needs: an NVIDIA GPU with drivers installed, and network connectivity to the Orchestrator on port 8935. It does not need an Ethereum account, LPT stake, or Arbitrum RPC.Verifying the connection
When the Transcoder connects successfully, the Orchestrator logs show:capacity field reflects the Transcoder’s -maxSessions value. Once this line appears, the
Orchestrator begins routing jobs to the connected Transcoder.
Connecting Multiple Transcoders
Any number of Transcoders can connect to a single Orchestrator using the same-orchSecret. Each
connection appears in Orchestrator logs:
Relationship to Pool Operations
The O-T split and a worker pool are the same architecture. The difference is operational scope: For pool operations - accepting external worker connections and managing off-chain fee distribution - see .Security Considerations
Protect the orchSecret
Protect the orchSecret
The
orchSecret is the only authentication between Orchestrator and Transcoder. Any node
with this secret can connect as a Transcoder and receive job assignments. Keep it private:
do not embed it in public Docker images, public configuration files, or version control.
Use file-based secrets with restricted permissions.Transcoders hold no wallet
Transcoders hold no wallet
In a correctly configured split setup, Transcoder machines do not have the Ethereum keystore
and are not passed
-ethUrl or -ethAcctAddr. This is intentional: Transcoders have no
ability to submit on-chain transactions. Keep it this way - do not copy keystores to GPU
worker machines.Port 8935 on the Orchestrator
Port 8935 on the Orchestrator
Port 8935 must be publicly accessible for both Gateway and Transcoder connections. Gateways
connect inbound to route jobs; Transcoders connect inbound to register and receive work.
Open port 8935 for all inbound TCP if behind a firewall.
Rotating the orchSecret
Rotating the orchSecret
If the
-orchSecret is compromised: generate a new secret, update the Orchestrator launch
command, communicate the new secret to all Transcoder operators, then restart the Orchestrator.
All existing Transcoder connections drop; they reconnect automatically with the new secret.
There is no zero-downtime rotation mechanism.Troubleshooting
Transcoder not connecting - no log line on Orchestrator
Transcoder not connecting - no log line on Orchestrator
Check in order:
- Verify port 8935 is reachable from the Transcoder:
curl -v https://<orchestrator-host>:8935/status - Confirm
-orchSecretmatches exactly on both sides (case-sensitive) - Check for a TLS certificate issue if the Orchestrator uses HTTPS - the Transcoder will fail if the cert is self-signed and not trusted
- Check Transcoder startup logs for the GPU test result - a GPU test failure causes the process to exit before connecting
Transcoder connected but not receiving jobs
Transcoder connected but not receiving jobs
Once
Got a RegisterTranscoder request appears in Orchestrator logs, the Transcoder is
connected and will receive jobs as they arrive. If jobs arrive at the Orchestrator but the
Transcoder is idle:- Check whether the Transcoder’s
-maxSessionscapacity is already reported as fully used - Verify the Orchestrator is receiving jobs from Gateways (check session metrics at
http://localhost:7935/metrics) - If the Orchestrator itself is idle, the issue is Gateway routing - see
Cannot allocate memory at Transcoder startup
Cannot allocate memory at Transcoder startup
The Transcoder’s GPU startup test failed - typically because the NVENC session cap has been
reached on that GPU. See the GPU and memory errors section of the
.
Related Pages
Alternate Deployments
Overview of all three alternate deployment options and how to choose between them.
Siphon Setup
Combine the split architecture with OrchestratorSiphon for keystore isolation and reward safety.
Run a Pool
Extend this architecture to accept external worker connections.
Large-Scale Operations
Fleet architecture and multi-Orchestrator operations.