Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,15 @@
- Added mxl-avsync (now released) and more complementary projects (MXL
docs and awesome-mxl, EASY MXL, mxl-k8s, BCP-007-03).
- States that this is an independent community project.
- The Compose examples are unchanged (same pinned images as 0.2.0).
- Compose examples: current releases. mxl-test-player 1.3.1, mxl-scopes 1.2.1,
mxl-audio-mixer 1.6.0, mxl-replay 1.8.7, mxl-browser-source 1.4.0,
mxl-srt-gateway 1.5.1, mxl-fabrics-agent 1.7.4 (the others are unchanged).
The single-host set was run together on one host with an NVIDIA GPU, every
function routed over IS-05. The two-host example passes `docker compose
config` only.
- Single host: the replay could not open its database, because its image runs
as uid 1000 and the named volumes for `/config` and `/data/replay` were
owned by root. `volume-owner` now hands them to uid 1000 as well.

## 0.2.0 - 2026-10-24

Expand Down
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,15 @@ flowchart LR
- Browser previews are low-rate H.264 published to MediaMTX and played over
WebRTC (WHEP).

<p>
<a href="https://github.com/LeeO86/mxl-multiviewer"><img src="docs/images/multiviewer.png" alt="mxl-multiviewer web UI: a 3x3 multiviewer of MXL flows" width="32%"></a>
<a href="https://github.com/firesh0ot/FlowXer"><img src="docs/images/flowxer.png" alt="FlowXer vision mixer web UI" width="32%"></a>
<a href="https://github.com/LeeO86/mxl-audio-mixer"><img src="docs/images/audio-mixer.png" alt="mxl-audio-mixer console" width="32%"></a>
</p>

The single-host example running: multiviewer, FlowXer vision mixer and audio
mixer. Every function README has a screenshot of its web UI.

## What you can build

Examples of chains made from these functions. Each arrow is an IS-05
Expand Down
2 changes: 1 addition & 1 deletion compose/multi-host-rdma/fabrics-agent.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# when a local NMOS receiver is connected (IS-05) to a flow of the other host.
services:
fabrics-agent:
image: ghcr.io/leeo86/mxl-fabrics-agent:1.7.3
image: ghcr.io/leeo86/mxl-fabrics-agent:1.7.4
network_mode: host # RDMA and the fabric addresses need the host network
pid: host # mirror cleanup checks /proc/<pid>/maps of every reader
cap_add:
Expand Down
2 changes: 1 addition & 1 deletion compose/multi-host-rdma/host-a/compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ services:
restart: unless-stopped

test-player:
image: ghcr.io/leeo86/mxl-test-player:1.2.4
image: ghcr.io/leeo86/mxl-test-player:1.3.1
network_mode: host
user: "1000:1000"
depends_on: [registry]
Expand Down
24 changes: 16 additions & 8 deletions compose/single-host/compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ services:
restart: unless-stopped

test-player:
image: ghcr.io/leeo86/mxl-test-player:1.2.4
image: ghcr.io/leeo86/mxl-test-player:1.3.1
network_mode: host
user: "1000:1000"
depends_on: [registry]
Expand Down Expand Up @@ -137,7 +137,7 @@ services:
restart: unless-stopped

scopes:
image: ghcr.io/leeo86/mxl-scopes:1.1.0
image: ghcr.io/leeo86/mxl-scopes:1.2.1
network_mode: host
user: "1000:1000"
depends_on: [registry, mediamtx]
Expand All @@ -157,7 +157,7 @@ services:
restart: unless-stopped

audio-mixer:
image: ghcr.io/leeo86/mxl-audio-mixer:1.4.3
image: ghcr.io/leeo86/mxl-audio-mixer:1.6.0
network_mode: host
user: "1000:1000"
depends_on: [registry, mediamtx]
Expand All @@ -182,9 +182,15 @@ services:
restart: unless-stopped

replay:
image: ghcr.io/leeo86/mxl-replay:1.8.1
image: ghcr.io/leeo86/mxl-replay:1.8.7
network_mode: host
depends_on: [registry, mediamtx]
depends_on:
registry:
condition: service_started
mediamtx:
condition: service_started
volume-owner: # the image runs as uid 1000 and has no /config or /data
condition: service_completed_successfully
environment:
<<: [*nmos, *preview]
NMOS_SEED: ${STACK_ID:-stack}-replay
Expand All @@ -210,7 +216,7 @@ services:
restart: unless-stopped

browser-source:
image: ghcr.io/leeo86/mxl-browser-source:1.3.3
image: ghcr.io/leeo86/mxl-browser-source:1.4.0
network_mode: host
user: "1000:1000"
depends_on: [registry]
Expand All @@ -237,9 +243,11 @@ services:
volume-owner:
image: ghcr.io/leeo86/mxl-webrtc-monitor:1.4.2
user: "0:0"
entrypoint: ["chown", "1000:1000", "/v/monitor-config", "/v/flowxer-storage", "/v/flowxer-config"]
entrypoint: ["chown", "1000:1000", "/v/monitor-config", "/v/flowxer-storage", "/v/flowxer-config", "/v/replay-data", "/v/replay-config"]
volumes:
- monitor-config:/v/monitor-config
- replay-data:/v/replay-data
- replay-config:/v/replay-config
- flowxer-storage:/v/flowxer-storage
- flowxer-config:/v/flowxer-config

Expand Down Expand Up @@ -344,7 +352,7 @@ services:

srt-gateway:
profiles: [extras]
image: ghcr.io/leeo86/mxl-srt-gateway:1.4.4
image: ghcr.io/leeo86/mxl-srt-gateway:1.5.1
network_mode: host
depends_on: [registry]
environment:
Expand Down
Binary file added docs/images/audio-mixer.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/flowxer.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/multiviewer.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading