Strom — Local Setup Guide

This guide walks through running a self-hosted Strom instance using Docker. Strom is the GStreamer-based media pipeline engine used by Open Live for video mixing and audio routing.

Linux + Docker is the primary supported target. Native Linux binaries, macOS, and Windows builds exist, but this guide assumes Docker.


Prerequisites

A Linux host (Ubuntu 22.04+ or equivalent) with:

  • Docker Engine and docker compose
  • Network reachability from the machine running Open Live to this host on port 8080
  • An NVIDIA GPU — highly preferred for hardware-accelerated encode/decode and compositing. A CPU-only setup works for testing but does not scale for production.
  • Optional: a Blackmagic DeckLink card for SDI I/O

1. Run Strom

Two images are published on Docker Hub:

Image When to use
eyevinntechnology/strom-full:latest Recommended — includes CEF/Chromium for HTML-based graphics and overlays
eyevinntechnology/strom:latest Smaller image without HTML rendering

Minimal run:

mkdir -p data
docker run -d \
  --name strom \
  --restart unless-stopped \
  -p 8080:8080 \
  -v "$(pwd)/data:/data" \
  eyevinntechnology/strom-full:latest

Open http://<host>:8080 to confirm the web UI loads. The /data volume persists flows and configuration across restarts.


2. NVIDIA GPU Setup (Highly Preferred)

Strom uses NVENC/NVDEC and CUDA-GL interop for hardware video encoding, decoding, and compositing. Without a GPU, Strom falls back to software encoding — fine for a quick test, not suitable for production.

The helper scripts are bundled inside the Docker image. Extract them:

docker pull eyevinntechnology/strom-full:latest
id=$(docker create eyevinntechnology/strom-full:latest)
docker cp "$id":/app/scripts/setup ./strom-setup
docker rm "$id"
chmod +x ./strom-setup/nvidia/*.sh

Then install the driver and container toolkit:

# Install the NVIDIA driver (requires reboot)
sudo ./strom-setup/nvidia/install-nvidia-driver.sh

# After reboot, verify
nvidia-smi

# Install the NVIDIA Container Toolkit
sudo ./strom-setup/nvidia/install-nvidia-container-toolkit.sh

# Sanity check
docker run --rm --gpus all ubuntu nvidia-smi

Note: Do not install the nvidia-headless driver variant — it lacks the OpenGL/EGL bits needed for CUDA-GL interop.

Run Strom with GPU access:

docker run -d \
  --name strom \
  --gpus all \
  -e NVIDIA_DRIVER_CAPABILITIES=all \
  -p 8080:8080 \
  -v "$(pwd)/data:/data" \
  eyevinntechnology/strom-full:latest

Strom logs whether GPU interop succeeded at startup:

INFO  CUDA-GL interop works - using GPU-accelerated video conversion

3. Authentication

Strom runs unauthenticated by default. If the Strom port is reachable from any network you don't fully trust, enable authentication.

Generate a bcrypt password hash:

docker run --rm -it eyevinntechnology/strom-full:latest hash-password

Set these environment variables when running Strom:

STROM_ADMIN_USER=admin
STROM_ADMIN_PASSWORD_HASH='$2b$12$...'   # hash from above
STROM_API_KEY='a-long-random-string'     # used by Open Live

Generate a strong API key:

openssl rand -base64 32

Once set, all API endpoints require either a valid session cookie or Authorization: Bearer <STROM_API_KEY>. This API key is what you provide as StromAccessToken in Open Live.


4. Docker Compose

A docker-compose.yml for a typical production deployment with GPU and authentication:

services:
  strom:
    image: eyevinntechnology/strom-full:latest
    container_name: strom
    network_mode: host
    restart: unless-stopped
    environment:
      - TZ=Europe/Stockholm
      - STROM_ADMIN_USER=admin
      - STROM_ADMIN_PASSWORD_HASH=$$2b$$12$$REPLACE_WITH_YOUR_OWN_BCRYPT_HASH
      - STROM_API_KEY=REPLACE_WITH_A_LONG_RANDOM_KEY
      - NVIDIA_VISIBLE_DEVICES=all
      - NVIDIA_DRIVER_CAPABILITIES=all
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    cap_add:
      - SYS_NICE
    logging:
      driver: json-file
      options:
        max-size: "50m"
        max-file: "5"
    volumes:
      - ./data:/data

Note: network_mode: host is recommended when running WHEP/WHIP, SRT, or NDI — these protocols are simpler to operate without Docker NAT. The $$ in STROM_ADMIN_PASSWORD_HASH escapes the literal $ characters in the bcrypt hash for docker compose.

docker compose up -d
docker compose logs -f strom

5. Networking

Strom exposes a single port:

Port Protocol Purpose
8080 HTTP(S) Web UI, REST API, WebSocket, OpenAPI

This is the port Open Live connects to. Override it with STROM_PORT if 8080 is taken.

Media ports (SRT, WHIP/WHEP, RTP) are determined by the flows you build inside Strom — open those on your firewall as needed.


6. Verify the Installation

# Health check — no auth required
curl http://<host>:8080/health

# Authenticated check
curl -H "Authorization: Bearer $STROM_API_KEY" http://<host>:8080/api/flows

Open the web UI at http://<host>:8080. Confirm:

  • The element palette loads
  • The topbar shows CPU / memory / GPU usage (GPU row appears only if NVIDIA is wired up correctly)

Open Live can now be pointed at http://<host>:8080 with the configured API key as StromAccessToken.


Further Reading