- A go-livepeer Orchestrator running locally accepting BYOC jobs
- A go-livepeer Gateway running in off-chain mode pointed at a community remote signer
- A simple CPU Docker container registered as a BYOC pipeline
- A verified end-to-end job sent from your Gateway through your Orchestrator and back
- A clear path to taking this setup to production on-chain
Prerequisites
Docker
docker --version.go-livepeer binary
Python 3.10+
Free ports
7935 (Orchestrator HTTP), 8935 (Gateway AI API), 9090 (Orchestrator metrics - optional).- A GPU
- An Ethereum wallet or ETH
- An Arbitrum RPC endpoint
- On-chain registration
https://signer.eliteencoder.net/ handles all Ethereum operations for you during testing.
Architecture overview
Part 1: Build the CPU BYOC container
We will use a minimal Python image that echoes video frames back - a CPU-only passthrough pipeline useful for testing the full job flow without any GPU or model inference.Part 2: Run the Orchestrator
The Orchestrator accepts jobs from the Gateway and routes them to the BYOC container.Start the BYOC container
Start the orchestrator
-orchestrator mode, advertising the BYOC capability and pointing at the running Docker container:-orchestrator- run in Orchestrator mode-serviceAddr- the address the Gateway will connect to-cliAddr- local CLI management port-byoc- enable BYOC mode-byocContainerURL- URL of the running BYOC Docker container-byocModelID- must match thenamein your pipeline’sPipelineSpec-pricePerUnit 1- set a nominal price (1 wei equivalent) for testing-network offchain- no Ethereum dependency, local registration only-datadir- separate data directory from the Gateway
Part 3: Run the Gateway (off-chain mode)
Start the gateway with remote signer
-gateway- run in Gateway mode-cliAddr- separate CLI port from the Orchestrator (must differ)-httpAddr- AI API port that your applications will call-orchAddr- point directly at your local Orchestrator-remoteSignerAddr- the community-hosted remote signer (provides free ETH for testing)-network offchain- no Arbitrum RPC required-datadir- separate data directory
signer.eliteencoder.net is a community-hosted service maintained by John (Elite Encoder). It provides free ETH for testing off-chain Gateway setups. Confirm availability in #local-Gateways on Discord if you encounter connection errors.Part 4: Send a test job
Install the Python gateway SDK (optional but recommended)
Alternative: Test via curl (gateway HTTP API)
Part 5: Troubleshooting
Gateway cannot connect to remote signer
Gateway cannot connect to remote signer
-remoteSigner flag with your own Ethereum key.Orchestrator not registering the BYOC capability
Orchestrator not registering the BYOC capability
Port conflict errors
Port conflict errors
-serviceAddr, -cliAddr, and -httpAddr flags accordingly. Make sure -orchAddr on the Gateway matches the Orchestrator’s -serviceAddr.Gateway cannot find the orchestrator
Gateway cannot find the orchestrator
-serviceAddr is reachable from the Gateway process:-orchAddr to use the correct IP. For a same-machine setup, localhost or 127.0.0.1 should always work.BYOC container exits immediately
BYOC container exits immediately
ai-runner base image (pull it first with docker pull livepeer/ai-runner:live-base), or a Python import error in your pipeline code.Part 6: Graduate to on-chain production
Once your off-chain smoke test passes, follow this path to move to a production on-chain deployment.Acquire ETH on Arbitrum One
- Bridge from Ethereum mainnet via the official Arbitrum bridge
- Buy directly on Arbitrum via exchanges listed at the Arbitrum Exchanges reference
- Buy on a CEX (Coinbase, Binance) and withdraw directly to Arbitrum One
Create an Ethereum wallet for your gateway
Set up an Arbitrum RPC endpoint
- Infura -
https://arbitrum-mainnet.infura.io/v3/YOUR_KEY - Alchemy -
https://arb-mainnet.g.alchemy.com/v2/YOUR_KEY - Community Arbitrum RPC (see Arbitrum RPC reference)
Deposit PM funds on-chain
livepeer_cli to make your PM deposit and reserve:- Deposit broadcasting funds (ETH) - deposit approximately 0.065 ETH
- Request unlock broadcasting funds is not needed yet; this is for withdrawal
Register your orchestrator on-chain
Switch the gateway to on-chain mode
-network offchain and -remoteSignerAddr, and add your Arbitrum RPC and on-chain flags:Verify on-chain operation
- Visit explorer.livepeer.org and search for your Gateway address
- Check that PM tickets are being sent via the Gateway logs: look for
Ticket sentlines - Monitor your ETH balance - it should decrease slowly as PM deposits fund tickets
- Use tools.Livepeer.cloud to check your Orchestrator’s visibility and performance