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-headlessdriver 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: hostis recommended when running WHEP/WHIP, SRT, or NDI — these protocols are simpler to operate without Docker NAT. The$$inSTROM_ADMIN_PASSWORD_HASHescapes the literal$characters in the bcrypt hash fordocker 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
- Strom on GitHub
- Full Docker deployment guide — reverse proxy, TLS, production tips
- Authentication guide
- GPU setup details
- DeckLink SDI setup
- Open Live Setup Guide