Skip to main content
Bring Your Own Container (BYOC) lets you run any custom AI model on the Livepeer network inside your own Docker container. Your container receives a live video (or audio) stream, processes it with your model, and returns the processed output – all over the Livepeer network’s trickle streaming protocol. BYOC was hardened to production-grade in Phase 4 (January 2026). The Embody SPE and Streamplace are currently running production BYOC workloads. If you are building with ComfyUI workflows specifically, see Build with ComfyStream – ComfyStream is already BYOC-compatible and may be all you need.

When to Use BYOC

Prerequisites

  • Docker installed on a Linux machine with NVIDIA GPU
  • Your AI model or processing function implemented and tested locally
  • go-livepeer – to register your container as a worker on the network
  • Familiarity with the trickle streaming protocol (you do not need to implement it directly – PyTrickle handles this)

How BYOC Works

Your BYOC container does two things:
  1. Exposes a REST API that the Livepeer gateway calls to start, stop, and update your processing session
  2. Connects to the trickle streaming layer – subscribes to an input stream URL and publishes to an output stream URL
PyTrickle handles both of these for you. You implement one Python class (FrameProcessor), and PyTrickle handles the streaming, encoding, decoding, and API surface.

Step 1 – Implement Your Processor

Install PyTrickle:
Create your processor class:

Step 2 – Define the REST API Contract

PyTrickle automatically exposes these endpoints on your container. The Livepeer gateway calls them to manage your processing session. You do not need to implement these – PyTrickle’s StreamServer provides them. /api/stream/start body:

Step 3 – Build Your Docker Container

Build and test locally:

Step 4 – Test Locally

Before deploying to the Livepeer network, verify your container processes a stream end-to-end. Prerequisites for local testing:
  1. Install http-trickle (the trickle protocol server):
Test sequence:
1

Start a local trickle server

2

Start your container

3

Start a test input stream

4

Send a start request

5

View processed output

Check GET /api/stream/status to confirm the session is active:

Step 5 – Push to a Container Registry

The image must be accessible to your orchestrator. Public Docker Hub or any registry your orchestrator can pull from works.

Step 6 – Deploy to the Livepeer Network

Your BYOC container runs on an orchestrator. The orchestrator pulls your image, starts it, and routes live-video-to-video jobs to it. To register your container with an orchestrator, you (or the orchestrator you are working with) configure go-livepeer to use BYOC mode and point to your container image:
For current orchestrators accepting BYOC workloads, see the MuxionLabs BYOC example apps – these include working deployment configurations that other orchestrators have used.
BYOC orchestrator onboarding is actively scaling as of Phase 4 (January 2026). If you cannot find a willing orchestrator, reach out in the Livepeer Discord #developers channel.

Building a Client Application on Top of BYOC

Once your BYOC container is live on the network, applications connect to it through a Livepeer gateway using the @muxionlabs/byoc-sdk:
The SDK handles WebRTC streaming from the browser directly to your gateway without requiring a custom backend.

Variants

ComfyStream as a BYOC container

ComfyStream is already integrated with PyTrickle (Phase 4). To run ComfyStream as a BYOC worker, use the muxionlabs/comfystream image instead of building from scratch:
See Build with ComfyStream for ComfyStream-specific configuration.

Python-native processing (no Docker)

For development and testing, PyTrickle can run without Docker:
This does not register with the Livepeer network but is useful for local development.

Build with ComfyStream

Use ComfyStream’s node-based pipeline system instead of implementing a FrameProcessor from scratch.

PyTrickle documentation

Full PyTrickle reference – FrameProcessor API, TrickleClient, advanced usage patterns.
Last modified on May 18, 2026