Standalone home for the Livepeer video transcode runners. This repo ships three Go HTTP runners plus shared FFmpeg/transcode logic, vendor-specific runtime images for NVIDIA, Intel, and AMD, and direct-runner smoke tooling.
For agents: start at
AGENTS.md.
| Image | Purpose | Default endpoint |
|---|---|---|
transcode-runner-nvidia / -intel / -amd |
Single-rendition VOD transcode | POST /v1/video/transcode |
abr-runner-nvidia / -intel / -amd |
Multi-rendition ABR ladder transcode | POST /v1/video/transcode/abr |
live-runner-nvidia / -intel / -amd |
Live session runner for gateway-ingest RTMP and HLS push output | POST /v1/video/live/sessions |
transcode-tester |
Node integration smoke harness | n/a |
Shared code lives in transcode-core/. Build and runtime
infrastructure lives in infra/.
Every gesture is Docker-first.
./build-images.sh build
./build-images.sh build transcode-runner-nvidia abr-runner-nvidia live-runner-nvidia
./build-images.sh validate
./build-images.sh cleanNo host Go or host Node required.
For vendor-generic local bring-up, use:
docker compose -f infra/compose/docker-compose.runners.yml --profile nvidia up -dFor a production-oriented NVIDIA node, use:
cp infra/env/nvidia-prod.env.example .env.nvidia-prod
docker compose --env-file .env.nvidia-prod -f infra/compose/docker-compose.nvidia-prod.yml up -dThat production stack defaults to the GTX 1080 tuned preset pack in
infra/presets/nvidia-gtx1080-transcode.yaml
and
infra/presets/nvidia-gtx1080-abr.yaml.
The live runner uses infra/presets/live.yaml by
default.
live-runner uses a single gateway-ingest shape:
- shared RTMP ingest on one port
- direct FFmpeg ingest through a local FIFO
- HLS upload to caller-supplied S3-compatible storage
The broker must include output_credential and ingest_accept.stream_key in
the session-open request.
.
├── AGENTS.md, CLAUDE.md
├── README.md, DESIGN.md, BUILD.md, API.md
├── OPERATIONS.md, TESTING.md, SECURITY.md
├── build-images.sh
├── go.mod, go.sum
├── abr-runner/ # ABR ladder runner source + embedded defaults
├── live-runner/ # remote live session runtime
├── transcode-runner/ # single-rendition runner source + embedded defaults
├── transcode-core/ # shared FFmpeg / GPU / preset / HLS logic
├── transcode-tester/ # Node smoke harness
├── infra/
│ ├── compose/ # docker-compose overlays
│ ├── dockerfiles/ # all Dockerfiles; build context is repo root
│ ├── env/ # .env.example templates
│ ├── offerings/ # runner offering manifests
│ └── presets/ # operator-editable preset YAMLs
└── docs/
├── exec-plans/
└── references/
All three vendor families are in scope:
- NVIDIA NVENC/NVDEC via CUDA 13 runtime images
- Intel QSV / VAAPI
- AMD VAAPI
Strict hardware mode is the default policy across vendors:
- jobs fail closed when the requested path would require CPU-only processing
- startup filters presets against the actual usable hardware/runtime path
- visible GPU hardware is not enough; the runner requires a working decode+encode runtime path
Current NVIDIA build note:
- CUDA
13.2.1is supported - FFmpeg is built without
libnppon this CUDA line due upstream API incompatibility with FFmpeg7.1.3
- No broker, gateway, or payment-layer code
- No checked-in secrets, keystores, or operator-local state
- No copied historical plan/doc tree from the source monorepo