A hardware-accelerated, multi-protocol video multiviewer built in Rust. Drag, resize, and snap video sources on an interactive canvas with real-time compositing.
- Multi-Protocol Video Sources — ingest from many video protocols or test patterns.
- Hardware-Accelerated Compositor — wgpu-based pipeline with YUV→RGB conversion on the GPU, minimal CPU↔GPU copies.
- Interactive Canvas — drag, resize, snap, and zoom layers intuitively.
- Per-Source Settings — configure each source individually with persistent session state.
- Real-Time Output — broadcast the composed view.
- Cross-Platform — native desktop applications for macOS, Windows, and Linux.
| Protocol | Source | Output | Platforms | Notes |
|---|---|---|---|---|
| Test Patterns | ✅ | — | macOS, Windows, Linux | SMPTE color bars and generative patterns |
| NDI | ✅ | ✅ | macOS, Windows, Linux | |
| OMT | ✅ | ✅ | macOS, Windows, Linux | Open Media Transport |
| Blackmagic DeckLink | ✅ | ✅ | macOS, Windows, Linux | Requires DeckLink Desktop Video installed |
| Syphon | ✅ | ✅ | macOS only | GPU-only, zero-copy texture sharing |
| Spout | ✅ | ✅ | Windows only | GPU-only, zero-copy texture sharing |
| AVFoundation | ✅ | — | macOS only | Webcams and capture devices |
| MediaFoundation | ✅ | — | Windows only | Webcams and capture devices |
| DirectShow | ✅ | — | Windows only | Webcams and WDM capture devices |
| macOS Screen Capture | ✅ | — | macOS only | Display and window screen capture |
| Windows Screen Capture | ✅ | — | Windows only | Display and window screen capture |
| VNC | ✅ | — | macOS, Windows, Linux | Remote Desktop over VNC/RFB |
| RDP | ✅ | — | macOS, Windows, Linux | Microsoft Remote Desktop |
Multiviewer is built with:
- Rust (Edition 2024) — systems programming language with fearless concurrency
- egui / eframe — immediate-mode GUI toolkit
- wgpu — safe, portable WebGPU implementation for GPU compute and rendering
Download ready-to-use binaries for macOS, Windows, and Linux from the Releases page.
brew install patopesto/tap/multiviewergit clone https://gitlab.com/patopest/multiviewer.git
cd multiviewer
cargo build --releaseNote: The NDI SDK is required for NDI support. Run Setup environment first; the build uses the project-local SDK and fails if it is missing.
Using go-task
task setupNote: This downloads the NDI SDK to a local project directory (vendor/ndi/<os>/sdk), which is the only SDK the build uses; the build fails if it is missing. Get the SDK itself from NDI's website
task runtask packagecargo testMultiviewer ingests video from multiple protocols, composites them on a shared GPU canvas, and can broadcast the result back out over NDI, DeckLink, or Syphon.
- Source Threads — each protocol runs on its own thread, decoding frames and handing them off to the main thread via lock-free
Arcswaps. - GPU Compositing — a single WGSL shader handles passthrough (RGBA/BGRA) and UYVY→RGB conversion (BT.601 for SD, BT.709 for HD) directly on the GPU.
- Zero-Copy Paths — Syphon/Spout sources feed GPU textures directly with no CPU copy; NDI and DeckLink use shared CPU buffers uploaded via
queue.write_texture(). - Interactive UI — the egui canvas lets you arrange sources freely, with snap-to-grid, zoom, and per-layer controls.
- NDI SDK — NDI, proprietary with attribution requirements
- Blackmagic DeckLink SDK — BSD-style license (see header files)
- Syphon — BSD 3-clause
- Spout — BSD 2-clause
Contributions are welcome! Whether it's bug reports, feature requests, or code contributions:
- Fork the repository
- Create a feature branch
- Commit your changes
- Push to the branch
- Open a Pull Request
This project is licensed under the MIT License. See the LICENSE file for details.
