Linux 安装器要求系统已有带 venv 支持的兼容 Python(3.11-3.14)及 GTK4、Libadwaita、GStreamer 绑定;macOS 需先装 /opt/homebrew 的 Homebrew 并以普通用户运行 install_macos.sh;macOS 虚拟摄像头需先打开 OBS 启停一次虚拟摄像头以注册后端。
nvidia-broadcast-linux
Hkshoonya活跃维护给 Linux 和 macOS 用的开源 AI 摄像头与麦克风增强工具,能实现背景虚化、自动取景、降噪、录制和本地会议转写,相当于把 NVIDIA Broadcast 那套效果搬到了非 Windows 平台。
Open-source AI camera and microphone effects for Linux and macOS: background effects, auto framing, noise removal, recording, and local meeting transcription.
git clone https://github.com/Hkshoonya/nvidia-broadcast-linux.git
cd nvidia-broadcast-linux
./install.shGPU 模式(Killer/Zeus/DocZeus/CUDA)仅限 Linux 且需 NVIDIA GPU;CPU 模式无需 CUDA。macOS 需 Apple Silicon 与 macOS 15+,Intel Mac 不支持。README 未给出具体显存要求。
Linux 和 macOS 上的开源 AI 摄像头与麦克风特效工具,用来替代 NVIDIA Broadcast
给 Linux 和 macOS 用的开源 AI 摄像头与麦克风增强工具,能实现背景虚化、自动取景、降噪、录制和本地会议转写,相当于把 NVIDIA Broadcast 那套效果搬到了非 Windows 平台。
核心能力
- 用 AI 实现背景虚化、替换、绿幕和自动取景
- 支持 RVM、IS-Net、BiRefNet 多模型分割
- 麦克风降噪与 6 种语音预设
- 本地 Whisper 会议转录与 AI 摘要
- 提供虚拟摄像头,兼容 Zoom、OBS、Discord
容易踩的坑
- v1.5.4最新正式版2026-10-31 · 2026-10-31 00:14 UTC
NV Broadcast v1.5.4
Publication status: Published after the recorded observation review and verified Store stable promotion. Frozen source and artifact identities remain unchanged.
The release cut remains frozen at source 755ee61384583303cf0ab469d02600c85f1e2b3b. Its native packages and tag-built Snaps retain their own accepted checksums, signatures and provenance.
Store build set: separately qualified AMD64 revision 192 / ARM64 revision 191 came from review run 40900894012, then candidate promotion 40911670939. Their own artifact, provenance and full runtime comparisons passed. Stable promotion 41148615635 completed successfully on 31 October 2026: promotion completed at 00:11:36 UTC and metadata updated at 00:11:48 UTC. Independent public Store readback matched stable and candidate AMD64 revision 192 / ARM64 revision 191 to the accepted exact sizes and SHA3-384 digests.
What changes in v1.5.4
- Refreshed Python dependencies and certificate bundles. Reviewed locked inputs include certifi 2026.10.19, Pillow 13.0.0, filelock 4.2.1, setuptools 84.1.0 and pip 26.2.2. CI audits both locked and resolved Python versions; the actual supplier inventories are checked for each package.
- Eye Contact follows current frames. Tracking now follows actual frame lifetime, fixing stale eye positions caused by Python object-ID reuse while retaining existing blink, occlusion and intensity behavior.
- Arch CUDA detection. CUDA-enabled packages such as
python-onnxruntime-opt-cudaare recognized when their Python distribution is namedonnxruntime; competing runtime owners are rejected. - Clearer source and native runtime setup. Managed protobuf remains discoverable despite Fedora’s legacy namespace hook. Setup reports failed prerequisites and combined CUDA/CPU-fallback failures. Linux virtual-microphone setup handles sink descriptions containing spaces.
- Fresh Homebrew compatibility. The Mac PKG can build pinned PyGObject/Pycairo privately for Python 3.13 when current Homebrew bindings target a newer ABI. Compatible patched Python 3.11–3.13 bindings remain usable, and required native plugins are checked.
- Tray recovery. A failed or unavailable tray watcher no longer leaves the app treating an unusable tray as active.
Verification completed
- Source tests, release smoke and dependency audits passed. Both strict Snap architectures passed dependency closure and confined synthetic recording.
- Default DEB/RPM installation, reinstall, upgrade, failure recovery and removal passed 108 checks on disposable Ubuntu 24.04 and Fedora 44 fixtures with documented cached prerequisites. The final tag packages preserve the qualified inputs.
- The tag-built package run passed RPM signing and actual Apple Silicon installation, private binding compilation/imports, CPU inference and synthetic media decode. The PKG was signed by WeMakeSense LLC (T39RXSKKZ6), notarized, stapled and Gatekeeper-accepted; independent readback verified its identity.
- The native checksum manifest matches the DEB, signed RPM, upgrade helper, project public key and Mac PKG. All six actual subjects, including the manifest itself, passed cryptographic verification against the exact release tag, source, workflow, hosted runner and run/attempt.
- The tag-built Snaps passed source/bytecode, supplier, closure, notices, RECORD, architecture, bundled-certificate and provenance checks. Recorded Python advisory snapshots reported zero vulnerabilities and zero lookup errors. All 572 AMD64 and 479 ARM64 packaged ELF files matched accepted
- infra-native-builders-20261011Native builder infrastructure — 2026-10-11pre-release2026-10-11 · 2026-10-11 21:02 UTC
查看更新说明
This prerelease holds build infrastructure for the native-package work in #60. It is not an application update and must not be installed as Broadcast. The public v1.5.3 release is unchanged.
The archive preserves the three historical Linux amd64 builder snapshots pinned in
packaging/native-runtime/builders.json, including their OCI index identities. Qualification and promotion are controlled by the reviewed main-branch workflows. A candidate archive or its checksum alone does not establish authenticated delivery; consumers must use the committed promotion policy and verify the GitHub historical-import attestation before loading builders.- Asset:
nvbroadcast-native-builders-linux-amd64-20261011.oci.tar - Bytes:
620776960 - SHA-256:
7b9579055f63c7f63516060c545c7d8207d07fb04ea8c038bc1c8185f790e3d4 - Scope of any promotion attestation: adoption and delivery of these exact historical snapshots. It does not authenticate the original apt/dnf dependency builds or claim a reproducible source rebuild.
This infrastructure asset is separate from application release assets and is not the latest application release.
- Asset:
- v1.5.32026-10-09 · 2026-10-09 18:35 UTC
查看更新说明
v1.5.3 brings together the camera, recording, compact-window, background-edge and runtime-recovery fixes since v1.5.2. The immutable tag points to
048d4f4005a56e6a7b235739f0176e0264bc3fa7. The frozen package metadata retains its originally planned 10 October release date; actual GitHub and Store publication is on 9 October. The verified tag and package bytes were preserved.v1.5.3 is available from this release and the Snap stable channel: AMD64 revision 190 and ARM64 revision 189. The package checks below and installed candidate CPU/CUDA/CuPy checks passed. The maintainer requested publication on 9 October after more than 21 hours of candidate observation, shortening the originally planned 48-hour feedback window; a complete 48-hour observation period is not claimed.
What improved
- Camera and Audio controls remain reachable in small windows. Show Preview restores the camera picture at the minimum size. Tray Start/Stop follows the actual broadcast state.
- Cameras connected after a no-camera startup appear automatically. Discovery respects the user's broadcast startup preference.
- MP4 recording keeps receiving video with effects disabled, while effects change and while the preview is hidden. The selected microphone is preserved, codec/audio failures are reported, and the Recordings menu opens saved files in the configured desktop video folder.
- Meeting capture reports audio failures and finalizes media asynchronously. Transcription model downloads use pinned revisions and verified file hashes.
- CPU modes use CPU inference. GPU checks distinguish temporary memory pressure from an unavailable runtime and allow cold-cache compilation to finish.
- Blur/Remove preserve more moving finger gaps and reduce bright body-edge contamination. Dilate and Softness work across background modes; broader fine-hair, white-clothing and extreme-setting checks remain tracked in #91.
- Linux source updates verify the replacement runtime before activation and preserve the working runtime after failure. Native upgrade helpers are bound to the exact release package hashes.
Signed macOS package
NVBroadcast-1.5.3-1.pkgis Developer ID Installer-signed by WeMakeSense LLC (T39RXSKKZ6), notarized, stapled and accepted by Gatekeeper. The tag build verified unchanged payloads and attested the final signed bytes. Apple Silicon with the supported macOS 15+ Homebrew stack uses CPU processing and OBS Virtual Camera.Installer places protected package files. After Installer finishes, run these as your regular user, with Apple Silicon Homebrew already installed:
/opt/homebrew/bin/brew install [email protected] pygobject3 gtk4 libadwaita gstreamer && /opt/nvbroadcast/scripts/setup_macos_runtime.sh && /usr/local/bin/nvbroadcastDo not run Homebrew or user runtime setup with sudo. Follow signed-package setup and verification.
The maintainer's MacBook Air M2 test passed camera, compact controls, CPU Blur/Remove, built-in-microphone Mic Test, complete speech recording, processed OBS video in another app, and microphone-only Meeting recording/transcription. A second physical microphone was unavailable. Numeric FPS, physical upgrade/uninstall, Intel/macOS 13–14 and CoreML acceleration were not qualified. System-audio loopback, processed virtual-microphone output and the proprietary Camera Extension are outside this package's supported scope.
Package checks and upgrades
Final tag Build Packages and tag Snap builds passed. Final assets were independently compared with source, notices, checksums and hosted-runner/tag-bound attestations. Fresh public v1.5.2 → final v1.5.3 CPU upgrades passed on Ubuntu 24.04 and Fedora 44, prese
- v1.5.2NV Broadcast v1.5.22026-09-04 · 2026-09-04 18:03 UTC
查看更新说明
NV Broadcast v1.5.2
NV Broadcast v1.5.2 is the first public release in the v1.5 series. v1.5.0 was withdrawn before stable rollout, and v1.5.1 remained a GitHub draft and Snap candidate while its native-upgrade, runtime, and packaging corrections were validated. v1.5.2 preserves all of that work and adds the reviewed changes merged afterward, so users do not need to install either intermediate build.
Camera startup recovery
Some V4L2 cameras advertise an MJPEG mode that fails only when GStreamer asks the driver to allocate capture buffers. Earlier builds stopped the camera pipeline at that point even when the same camera advertised a working raw mode at the requested geometry.
v1.5.2 now:
- builds an ordered list of advertised formats for the exact requested resolution and frame rate;
- retries the next advertised encoding when the physical source fails before producing its first valid frame;
- preserves the requested frame rate, resolution, and output geometry;
- ignores delayed errors from retired pipeline generations;
- remembers a format only after a valid frame arrives, using a bounded process-local cache; and
- retains the complete GStreamer diagnostic when every advertised candidate fails.
This recovery was contributed by Cédric Prezelin (
@Tenshock) in PR #76.Source installation reliability
The source installer now discovers supported CPython interpreters in the order 3.13, 3.12, then 3.11, or accepts an explicit
--pythonpath. It verifiesvenvandensurepip, then checks that GTK4, Libadwaita, and GStreamer Python bindings match the selected interpreter after distro packages are installed.Only the project-owned
.venvis recreated when its base interpreter or CPU/CUDA runtime owner is incompatible. The installer does not replace the system Python or add a third-party package repository, and unsupported setups stop with package-manager-specific recovery guidance instead of reporting a partially working installation.Snap meeting transcription
The strict Snap now gives its isolated Whisper worker a private shared-memory namespace. This lets Python create the semaphore used by the transcription worker without exposing that IPC namespace to other snaps, so local meeting transcription can initialize under strict confinement.
Included v1.5 improvements
v1.5.2 includes the complete v1.5.1 candidate and its corrected v1.5 runtime:
- one managed CPU or CUDA ONNX Runtime distribution owner per environment;
- pinned fresh-process CPU, CUDA, and TensorRT execution probes that reject silent CPU fallback where GPU execution is required;
- saved microphone restoration and live audio-pipeline rebuilding;
- clean GUI and headless handling when no physical camera is available;
- explicit per-profile auto-start with failure-safe visible controls;
- MediaPipe 1.0.0 face effects on Linux arm64;
- enforced OpenCV, Protobuf, Pillow, pip 26.2, and development dependency security floors;
- clean final DEB and RPM removal of installer-generated runtime and build files; and
- package checksums plus GitHub provenance attestations for tag-built release artifacts.
Required native-package upgrade path
Public DEB and RPM releases through v1.4.0 contain legacy pre-removal scripts that can terminate their own package transaction. Those scripts run before a new package can replace them. For that reason, users upgrading an existing native v1.4.0 or older installation must use the release asset named
nvbroadcast-native-upgrade.- Download the v1.5.2 DEB or RPM,
nvbroadcast-native-upgrade, andSHA256SUMS.packagesfrom the same GitHub Release. - Verify both downloaded files against
SHA256SUMS.packagesand, where the GitHub CLI is available, verify their build attestations as described in [Verifying Release Artifacts](https://github.com/Hkshoonya/nvidia-broadcast-linux/blob/v1.5.2/docs/RE
- v1.4.0NV Broadcast v1.4.02026-08-04 · 2026-08-04 23:06 UTC
查看更新说明
NV Broadcast v1.4.0
NV Broadcast v1.4.0 adds global effect controls, an optional Eye Contact Gaze Lock mode, live camera switching, and stronger recovery around the GPU background-processing path. It also includes community fixes for profile switching and desktop diagnostics.
Rebindable global effect hotkeys
- Linux users can toggle Background, Auto Frame, Eye Contact, Mirror, and microphone noise removal while a meeting, browser, or streaming application has focus.
- Desktops with the XDG GlobalShortcuts portal use the portal-native path.
GNOME systems without that portal can use isolated custom keybindings that
invoke fixed
Gio.Applicationactions. - Duplicate, malformed, and unsafe bindings are rejected. Recording and meeting actions are deliberately not exposed as global shortcuts.
- Shortcut settings persist with the user's profile and can be rebound from the application.
Natural and Gaze Lock Eye Contact
- Eye Contact now provides separate Natural and Gaze Lock modes.
- Natural mode retains the existing subtle camera-facing correction.
- Gaze Lock holds small coordinated eye movements closer to the camera target while preserving natural binocular spacing.
- Blink fallback, unstable-landmark rejection, head-yaw compensation, and smoothed head-pose updates remain active in both modes.
Live camera and profile changes
- Selecting a different physical camera now updates the active capture pipeline without requiring an application restart.
- Profile switching no longer assumes that every video backend can provide multiple current frames. Backends that expose only one frame now apply the profile without a stale-frame failure.
- GTK image baseline warnings are removed, and runtime messages use a consistent NV Broadcast prefix so actionable diagnostics are easier to find.
Crash-safe background processing
- RVM quality and processing-mode changes no longer mutate a live model while its recurrent tensors still use dimensions from the previous quality.
- The application serializes background-backend reloads, creates and warms the replacement session, and swaps it in only when the latest requested generation is ready.
- Existing GPU sessions are detached before their resources are released, preventing old provider memory from remaining live during replacement allocation.
- ONNX Runtime CUDA allocation and arena-exhaustion errors now trigger a clean CUDA provider rebuild. If that rebuild cannot initialize, background processing falls back to CPU instead of leaving the preview permanently on the original camera image.
- GPU-resident frame routing is disabled automatically if inference has moved to CPU, preserving a valid mixed processing path.
Cleaner hair and facial-hair edges
- Ultra quality retains the detail-preserving refinement branches used for difficult hair, beard, and motion boundaries.
- Replacement cleanup now also detects neutral or bright background spill around soft foreground pixels, not only strongly saturated color spill.
- Cleanup remains bounded by nearby solid-foreground evidence so it does not recolor the main subject or alter the original camera frame.
- The existing backlight adaptation remains inference-only and does not change displayed camera exposure or white balance.
Low-latency virtual microphone
- Power Save now applies only to camera capture, matching the setting shown in the application.
- Microphone capture remains active while the processed virtual microphone is published. This prevents Discord and other Pulse/PipeWire clients from retaining a multi-second capture buffer when they connect to an idle source.
- The denoiser and voice-effects path remains isolated in its helper process; this change only removes the incompatible microphone suspend/resume cycle.
- Protobuf remains at the patched
>=5.29.6,<7range so source installations that expose host GTK packages do not conflict with current OpenTelemetry
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
[!IMPORTANT] Canonical upstream: Hkshoonya/nvidia-broadcast-linux, created and maintained by DocZeus. Forks and mirrors are welcome under the project license, but downstream versions should identify themselves clearly, link to this repository, and preserve the required author attribution. See Canonical Project and Attribution.
Why I Built This
I left Windows. Millions of Linux users left Windows. But we all missed one thing — NVIDIA Broadcast.
That one app that made every video call look professional. Background blur that actually worked. Virtual backgrounds that didn't look like a PowerPoint slide. Noise cancellation that silenced your mechanical keyboard.
On Linux? Nothing. You had to cobble together 5 different tools, fight with v4l2loopback configs, and still get janky edges. That's over now.
I built this because I believe Linux users deserve the same broadcast-quality experience. Not a half-baked wrapper. Not a "good enough" hack. A real, proper implementation that uses your NVIDIA GPU to do what NVIDIA Broadcast does on Windows — but open source, and in some ways, better.
"Not saying this is perfect. But I believe it will be."
This is fast. This is optimized. And the quality already rivals Windows Broadcast. With the community behind it, we'll surpass it.
— DocZeus
What's new?
See CHANGELOG.md for latest updates!
What It Does
Camera Effects
- Background Blur — AI-powered, person stays crystal sharp
- Background Replace — Any image via native file picker
- Green Screen — Solid green for OBS chroma key
- Auto Frame — Face tracking with Center Face and Stable Background modes
- Global Effect Hotkeys — Rebind effect toggles without bringing the app forward
- Video Enhancement — Skin smooth, enhance, sharpen, denoise, vignette
- Eye Contact Correction — Natural and Gaze Lock modes redirect gaze to camera
- Face Relighting — Fill light guided by the scene
- Recording to MP4 — NVENC hardware encode (x264 fallback)
- User Profiles — 5 built-in (Meeting, Streaming, etc.) + custom save/load
- Performance Overlay — Real-time FPS, GPU usage, VRAM, temperature
- Multi-Model — RVM (person), IS-Net (objects), BiRefNet (best edges)
- Mirror — Horizontal flip toggle
Audio Effects
- Mic Noise Removal — Kills keyboard, fan, environment noise
- Speaker Denoise — Clean up incoming audio
- Voice Effects — Bass boost, treble, warmth, compression, noise gate, gain
- 6 Voice Presets — Natural, Radio, Podcast, Deep Voice, Bright, Studio
- Microphone Selection — Full PipeWire/PulseAudio device enumeration
- Speaker Detection — All output devices via PipeWire
- Audio Level Monitor — Real-time VU meter with peak hold
- Mic Test — Record 30s / 45s / 60s and play back to test your setup
- AI Meeting Transcription — Local Whisper speech-to-text (GPU-accelerated)
- AI Meeting Summarizer — Action items, questions, key points (fully local)
- Meeting Mode — Video+audio recording with live transcription and AI summary
System Integration
- Virtual Camera — Works in Chrome, Firefox, Zoom, Discord, OBS
- Auto-Start — Launches on login, runs in background
- Setup Wizard — Auto-detects system, configures optimally
- Multi-GPU — Select which GPU runs AI effects
- Multi-Distro — Ubuntu, Fedora, Arch, openSUSE, and more
- Resolution/FPS — 360p-4K, 15-60fps, auto-detected from camera
Processing Modes
9 modes from maximum speed to CPU fallback:
| Mode | Inference | Compositing | 1080p Speed | CPU | GPU | Best For |
|---|---|---|---|---|---|---|
| Killer | 360p + fused CUDA | Fused kernel (0.1ms) | 20ms / 48fps | 24% | 41% | Maximum speed |
| Zeus | 480p optimized | CuPy GPU | 30ms / 33fps | 22% | 39% | Speed + quality balance |
| DocZeus | 720p full quality | Fused kernel (0.1ms) | 44ms / 23fps | 22% | 46% | Best quality/speed |
| CUDA Max | 720p | CuPy GPU | 45ms / 22fps | 22% | 46% | Maximum quality |
| CUDA Balanced | 720p, skip 2 | CuPy GPU | 29ms / 34fps | 24% | 39% | Daily use |
| CUDA Perf | 720p, skip 2 | CuPy GPU | 30ms / 34fps | 23% | 39% | Light GPU load |
| CPU Quality | 720p, CPU provider | OpenCV SIMD | Hardware-dependent | Higher | 0% video inference | No CUDA required |
| CPU Light | 720p, CPU provider, skip 2 | OpenCV SIMD | Hardware-dependent | Medium | 0% video inference | Save GPU for other work |
| CPU Low End | 720p, CPU provider, skip 3 | OpenCV SIMD | Hardware-dependent | Lower | 0% video inference | Older hardware |
Edge Refine toggle available for Killer and Zeus modes — adds ~27ms but recovers 89.9% of max quality edges.
Switch modes anytime from the Mode dropdown. No restart needed.
CUDA modes require the CUDA mode runtime: CuPy for compositing plus ONNX Runtime with
CUDAExecutionProviderfor model inference. Source,.deb,.rpm, and amd64 Snap installs handle this automatically on NVIDIA systems. The arm64 Snap build stays CPU-safe because ONNX Runtime GPU wheels are not published for Linux arm64 yet.CPU modes use ONNX Runtime's CPU provider for video inference as well as OpenCV CPU compositing. Audio GPU effects remain controlled separately.
Architecture
NV Broadcast Pipeline
─────────────────────────────────
┌───────────┐ ┌─────────────────────────────────────────┐ ┌──────────────┐
│ Webcam ├────▶│ GStreamer Pipeline ├────▶│ Virtual Cam │
│(360p-4K) │ │ │ │ /dev/video10 │
└───────────┘ │ JPEG Decode ─▶ Color Convert ─▶ appsink │ └──────┬───────┘
└────────────────────┬────────────────────┘ │
│ ┌───────▼───────┐
┌───────────────▼────────────────┐ │ Chrome / Zoom │
│ Async Effects Thread │ │ Firefox / OBS │
│ (never blocks capture) │ │ Discord/Meet │
│ │ └───────────────┘
│ ┌──────────────────────────┐ │
│ │ AI Segmentation │ │
│ │ │ │
│ │ Pre-downsample to 720p │ │
│ │ (or 480/360 for Zeus/ │ │
│ │ Killer modes) │ │
│ │ │ │
│ │ ┌────┐ ┌─────┐ ┌────┐ │ │
│ │ │RVM │ │ISNet│ │BiR │ │ │
│ │ └──┬─┘ └──┬──┘ └─┬──┘ │ │
│ │ └──────┼──────┘ │ │
│ │ ▼ │ │
│ │ Alpha Refine │ │
│ │ (sigmoid+dilate) │ │
│ └────────────┬─────────────┘ │
│ │ │
│ ┌────────────▼─────────────┐ │
│ │ Edge Refiner (opt.) │ │
│ │ 720p 2nd pass RVM │ │
│ │ (Zeus/Killer only) │ │
│ └────────────┬─────────────┘ │
│ │ │
│ ┌────────────▼─────────────┐ │
│ │ Compositing │ │
│ │ │ │
│ │ ┌────────┐ ┌───────┐ │ │
│ │ │ Fused │ │ CuPy │ │ │
│ │ │ CUDA │ │ CUDA │ │ │
│ │ │ 0.1ms │ │ 15ms │ │ │
│ │ └────────┘ └───────┘ │ │
│ └────────────┬─────────────┘ │
│ │ │
│ ┌────────────▼─────────────┐ │
│ │ Video Enhancement │ │
│ │ 5 effects + presets │ │
│ │ GPU batch (CuPy) │ │
│ └────────────┬─────────────┘ │
│ ▼ │
│ Mirror flip (optional) │
└───────────────┬────────────────┘
│
┌───────────▼────────────┐
│ Preview (GTK4 Texture) │
│ Pause / Hide / Resize │
└────────────────────────┘
┌───────────┐ ┌─────────────────────────────────┐ ┌──────────────┐
│ Mic ├─────▶│ DeepFilterNet3 AI Denoise ├─────▶│ Virtual Mic │
│ │ │ RNNoise fallback at 48kHz │ │ (PipeWire) │
└───────────┘ └─────────────────────────────────┘ └──────────────┘
Fused CUDA Kernel (DocZeus/Killer)
A custom CUDA kernel that performs alpha blend + enhance + sharpen + vignette in one GPU pass:
// Single kernel: fg*alpha + bg*(1-alpha) + enhance + vignette
// 0.1ms at 1080p — 150x faster than CuPy's multi-kernel approach
extern "C" __global__ void fused_composite(
fg, bg, alpha, face_mask, vignette, output,
total_pixels, enhance_i, vignette_i, brightness, contrast, warmth
);
Edge Refinement Network
When Edge Refine is toggled ON (Zeus/Killer modes):
- Fast pass: RVM at 360p/480p → coarse alpha (18-21ms)
- Refine pass: RVM ResNet50 at 720p → quality alpha (30ms, every 2nd frame)
- Blend: On refine frames use quality alpha; on skip frames 80% quality + 20% coarse for tracking
- Result: 89.9% quality recovery with minimal cost
AI Models
| Model | Segments | Speed (RTX 5060) | VRAM | License | Auto-Download |
|---|---|---|---|---|---|
| RVM (default) | Person only | ~29ms (720p) | 660 MB | GPL-3.0 | Yes |
| IS-Net | Any object | ~55ms | 1.8 GB | Apache 2.0 | Yes |
| BiRefNet | Best edges | ~187ms | 6+ GB | MIT | Yes |
Quality Presets (RVM only)
| Preset | Backbone | Downsample | Best For |
|---|---|---|---|
| Performance | MobileNetV3 | 0.25 | Video calls |
| Balanced | MobileNetV3 | 0.5 | Daily use |
| Quality | ResNet50 | 0.375 | Presentations |
| Ultra | ResNet50 | 0.5 | Recording |
Requirements
Hardware
| Component | Minimum | Recommended |
|---|---|---|
| GPU | NVIDIA GTX 1060 | RTX 3060 or newer |
| VRAM | 2 GB | 4 GB+ |
| CPU | 4 cores | 8+ cores (if using CPU compositing) |
| Webcam | Any USB camera | 720p+ with MJPEG or raw V4L2 modes |
| Mic | Any audio input | — |
Software
- Linux with NVIDIA driver 525+ (Pop!_OS, Ubuntu, Fedora, Arch, openSUSE, etc.)
- Python 3.11+ (the Linux source installer supports CPython 3.11-3.14 with compatible GTK4/Libadwaita/GStreamer bindings; Python 3.12/3.13 currently give the broadest premium-feature compatibility, see Python runtime notice)
- PipeWire (virtual microphone)
- PulseAudio utilities (
pactl) for speaker-monitor routing and device resolution - GStreamer 1.20+ with plugins-base, plugins-good, plugins-bad
- GTK4 and Libadwaita
- v4l2loopback kernel module
- DKMS and kernel headers (to build v4l2loopback)
Installation
Linux — One Command Install
git clone https://github.com/Hkshoonya/nvidia-broadcast-linux.git
cd nvidia-broadcast-linux
./install.sh
The Linux source installer uses an already-installed compatible interpreter in
this order: CPython 3.13, 3.12, 3.11, then 3.14, followed by a compatible
python3. This preserves the current broad-feature preference while
supporting distros whose desktop bindings target Python 3.14. It builds each
update in a separate .nvbroadcast-runtimes/gen-* environment; it does not
replace the distro's system Python or add a package
repository. Compatibility includes venv/ensurepip support and access to the
distro's GTK4, Libadwaita, and GStreamer Python bindings. To select a specific
compatible interpreter:
./install.sh --python /usr/bin/python3.12
Use --python /usr/bin/python3.14 to choose Python 3.14 explicitly when that
interpreter can import the desktop bindings. TensorRT modes also work with the
pinned TensorRT 10 libraries after the provider execution probe succeeds.
Newer Python versions need runtime-wheel validation before the source installer
accepts them.
Fedora's python3-gobject and python3-cairo packages target its default Python.
Installing an alternate python3.14 package does not supply desktop bindings
for that interpreter. Fedora 45's default Python 3.15 is outside the normal
source installer's supported range. Use the Snap package
or an independently provisioned compatible interpreter with matching desktop
bindings; the installer does not copy bindings between Python versions.
Python 3.15 on Linux x86_64 has an opt-in experimental source-built CPU
path for distros whose desktop bindings require it. Build the missing pinned
dependencies, then install with --experimental-python315 --python /usr/bin/python3.15 --wheelhouse /path/to/wheels --runtime cpu. See Python 3.15 instructions
for build prerequisites, validation, and limitations. CUDA/TensorRT and 3.15t
are not supported by this experimental path. Its local AV wheel retains the
FFmpeg library locations selected at build time; keep that prefix in place.
If no compatible interpreter with venv support is installed, the installer
stops before changing the system and prints guidance for the detected distro.
An update becomes active only after its imports, dependency closure, and real
CPU/CUDA inference probe pass. Both installed launchers use the same atomic
selection. Failed builds leave the selected runtime unchanged, including for
same-variant updates. A previous .venv installation is retained at its original
path. Stop Broadcast and its services before switching or rolling back:
./install.sh --rollback-runtime
Rollback rechecks the previous runtime before selecting it. Optional packages
in these installer-managed generations are added by rerunning install.sh
and selecting the desired options, rather than by changing the running
environment through the GUI. python3 scripts/source_runtime.py --project . active
prints the current environment path. Developer-managed .venv and Makefile
setups are separate. See source runtime updates
for failure recovery and the host-runtime boundary.
macOS — Source Install
Install Apple Silicon Homebrew at /opt/homebrew first.
Run the source installer as your logged-in user, without sudo:
git clone https://github.com/Hkshoonya/nvidia-broadcast-linux.git
cd nvidia-broadcast-linux
./install_macos.sh
Requires an Apple Silicon Mac with macOS 15+ for the supported Homebrew stack.
The installer provisions [email protected] pygobject3 gtk4 libadwaita gstreamer,
selects a Homebrew Python 3.11-3.13 with working GTK/Adw/GStreamer bindings,
and checks the required native plugins before replacing the source runtime.
OBS Studio is required for virtual-camera output and can be installed by the
installer. Open OBS once, start and stop Virtual Camera, then close OBS so
its camera backend is registered for NV Broadcast. The installer validates
CPUExecutionProvider; these checks do not qualify CoreML availability or
acceleration.
Intel macOS is unsupported because no secure current MediaPipe wheel is
available for that architecture. GPU modes (Killer/Zeus/DocZeus/CUDA) are
Linux-only and require an NVIDIA GPU. Homebrew classifies macOS 13/14 as
unsupported; the lower PKG/wheel platform declaration does not qualify current
Homebrew setup. See Homebrew installation requirements.
To update this source installation, stop NV Broadcast, update the checkout to
the intended release, and rerun ./install_macos.sh. It installs under
~/.local/share/nvbroadcast and creates ~/.local/bin/nvbroadcast. Prerequisite
failures leave the previous environment in place, but this legacy installer
rebuilds its venv in place: a later pip/runtime failure can require rerunning
the installer, and it has no runtime rollback. User configuration and cached
models are retained; Homebrew dependency changes are not rolled back.
A PKG installation is separate; follow its verified
package installation and per-user setup steps
and use /usr/local/bin/nvbroadcast explicitly so the source launcher does not
shadow it. Installing a PKG does not replace this legacy source environment.
Linux — Snap Package
sudo snap install nvbroadcast
Snap users typically receive background refreshes from snapd. When the app sees a newer stable release, the in-app update button opens the Snap Store listing so the user can move directly into the store-managed upgrade path.
The amd64 Snap build includes the CUDA mode runtime for NVIDIA systems. The arm64 Snap build stays CPU-safe because the required ONNX Runtime GPU wheels are not available for Linux arm64 yet. Background effects, virtual camera and microphone output, recording, and local meeting tools remain available. If CUDA modes are still unavailable on amd64 Snap, use the source installer, .deb, or .rpm release package as the fallback.
Native .deb or .rpm users upgrading from v1.4.0 or older must use the
nvbroadcast-native-upgrade asset shipped with v1.5.2 and later. Verify the
helper and package against SHA256SUMS.packages, then follow
Verifying Release Artifacts. The old package's
pre-removal script runs before a newer package can replace it, so a direct
package-manager upgrade is not safe on those versions.
Packaged releases are intended to include the local meeting transcription runtime. Source installs from this repo can still use the in-app runtime installer flow for optional components.
Linux Installer Details
The installer:
- Detects your distro and package manager
- Checks all requirements (Python, PipeWire, GPU, DKMS, kernel headers)
- Installs missing packages with the correct names for your distro
- Installs NVIDIA CUDA mode runtime packages when an NVIDIA GPU is detected
- Asks about compositing — CPU, GStreamer GL, or CuPy CUDA
- Sets up virtual camera, launcher scripts, desktop entry, systemd service
- Verifies GPU acceleration and writes initial config
- Preserves the previous verified source runtime for rollback; rerun the installer to add optional packages
Update Behavior
- Git checkout / manual Linux packages — the app checks GitHub Releases and opens the matching release download page when a newer stable build is available
- macOS installs — the app prefers the latest
.pkgrelease asset when one is published. Current PKG installs use admin-owned source under/opt/nvbroadcastand a separate per-user runtime; complete the package's setup step after each new package. To keep a legacy source installation, update its checkout and reruninstall_macos.shinstead. - Snap installs — the app opens the Snap Store listing; stable refreshes are normally handled by
snapd
Verify Release Downloads
New release workflows publish SHA-256 manifests and Sigstore-backed GitHub provenance for DEB, RPM, PKG, and attached Snap artifacts. Verify both the checksum and the expected signer workflow before installing a manually downloaded package. See Verifying Release Artifacts for the exact Linux, macOS, and GitHub CLI commands and the remaining reproducibility limits.
Optional: TensorRT (for Zeus/Killer modes)
For an installer-managed source runtime, rerun ./install.sh --runtime cuda
and answer yes to the TensorRT prompt. It builds and verifies a new generation
while preserving the previous one. For a manually managed developer .venv,
install the TensorRT 10 libraries into an existing CUDA variant and verify
that ONNX Runtime actually executes its pinned probe graph on TensorRT:
.venv/bin/pip install --index-url https://pypi.nvidia.com \
--only-binary tensorrt-cu12-libs 'tensorrt-cu12-libs==10.16.0.72'
.venv/bin/python -m nvbroadcast.runtime --variant cuda --provider tensorrt
The ONNX Runtime GPU wheel used here requires TensorRT 10 shared libraries;
TensorRT Python bindings are not needed for Zeus or Killer. The pinned library
wheel is about 4.3 GB and is retrieved directly from NVIDIA's package index so
pip can identify the download instead of appearing to stop while preparing the
PyPI forwarding stub's metadata. The binary-only constraint prevents pip from
silently falling back to that stub if NVIDIA's wheel index is unavailable. It
supports the source installer's Python 3.11 through 3.14 range on Linux
x86_64. The installer also requires GTK4, Libadwaita, and GStreamer bindings
for the selected interpreter, so choose a distro Python that can import them.
The first use of each mode or frame size builds and caches an engine; the
preview or window can appear unresponsive for several minutes during that
build.
Supported Distros
| Distro | Package Manager | Status |
|---|---|---|
| Ubuntu, Debian, Pop!_OS, Mint | apt | Full auto-install |
| Fedora, RHEL, CentOS, Rocky | dnf/yum | Auto-install with matching Python/desktop bindings |
| Arch, Manjaro, EndeavourOS | pacman | Full auto-install |
| openSUSE | zypper | Full auto-install |
| Gentoo, Void, NixOS | portage/xbps/nix | Manual instructions shown |
# 1. System dependencies
sudo apt install -y \
python3-gi python3-gi-cairo \
gir1.2-gtk-4.0 gir1.2-adw-1 \
gir1.2-gstreamer-1.0 gir1.2-gst-plugins-base-1.0 \
gstreamer1.0-plugins-base gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
v4l-utils v4l2loopback-dkms \
pipewire-bin pulseaudio-utils
# 2. Python venv
python3 -m venv .venv --system-site-packages
source .venv/bin/activate
export PYTHONNOUSERSITE=1
# 3. Install exactly one ONNX Runtime variant
pip install -e ".[cpu]"
# For NVIDIA GPU acceleration on Linux x86_64, choose CUDA instead:
pip install -e ".[cuda]"
# Optional: preserve the OpenAI Whisper compatibility backend:
pip install -e ".[cpu,meeting]" # or .[cuda,meeting]
# 4. Optional: CuPy-only retry for GPU compositing
pip install "cupy-cuda12x>=14.1.1,<15" nvidia-cuda-runtime-cu12 nvidia-cuda-nvrtc-cu12
# 5. Virtual camera
sudo modprobe v4l2loopback devices=1 video_nr=10 \
card_label="NVbroadcast" exclusive_caps=1 max_buffers=4
# Use another output node if /dev/video10 conflicts:
NVBROADCAST_VCAM_DEVICE_NUM=11 ./scripts/setup_v4l2loopback.sh
# 6. Run
python -m nvbroadcast
The .[meeting] compatibility extra retains the guarded openai-whisper
backend on Python versions below 3.14 without selecting an ONNX Runtime owner.
Combine it with exactly one runtime variant as .[cpu,meeting] or
.[cuda,meeting]. Because faster-whisper declares onnxruntime directly,
plain pip extras cannot safely install both meeting backends while preserving
strict runtime ownership. Use the source installer for the complete meeting
stack:
./install.sh --runtime auto --with-meeting
This installs support dependencies through project metadata, installs
faster-whisper with --no-deps, and installs guarded OpenAI Whisper on Python
versions below 3.14. Native packages keep their lighter faster-whisper policy;
the macOS installer keeps its best-effort OpenAI Whisper fallback.
The default faster-whisper backend accepts the bundled model aliases and
repository IDs only. It downloads a pinned revision and checks the size and
SHA-256 of each model file before loading it. An explicitly configured local
CTranslate2 model directory, such as
NVBROADCAST_TRANSCRIBER_MODEL=/path/to/model, remains available and is trusted
as a user-supplied file. An existing relative directory also takes precedence
over a model alias with the same name. Set
NVBROADCAST_TRANSCRIBER_BACKEND=whisper to select the separate OpenAI Whisper
backend explicitly. A cold model load allows time for a 1 MiB/s download plus
five minutes for hashing and startup, with a one-hour cap; a timed-out worker
is terminated.
The Hugging Face cache is writable by the same user. A process with write access to that cache could replace a file between verification and the native model loader opening it. The hash check does not prevent that race.
Usage
Setup Once, Forget Forever
nvbroadcast # Launch GUI (first time: setup wizard)
Development source for the next maintenance release also supports
nvbroadcast --minimized. For a desktop autostart entry, append --minimized
to its Exec command. This option is not included in the v1.5.4 packages or
the frozen v1.5.5 candidate.
The saved automatic-start setting still controls broadcasting. First-run setup
always opens normally. If a tray host is not available within 30 seconds, the
window opens; it also opens if the tray disappears while startup-hidden.
Launching nvbroadcast again shows the running app, including when the second
command uses --minimized.
- Setup wizard detects your system and configures the best mode
- App starts and auto-begins streaming
- Configure effects, select resolution/FPS/mode
- Close the window — app minimizes to background, virtual camera stays active
- Open Chrome / Zoom / Discord — select "NVbroadcast" on Linux or "OBS Virtual Camera" on macOS
- Next login — app starts automatically with all your settings remembered
Controls
| Control | Description |
|---|---|
| Resolution | 360p to 4K — auto-detected from camera, applied safely after restart |
| FPS | 15-60fps — adapts to selected resolution |
| Mode | 9 modes: Killer, Zeus, DocZeus, CUDA, CPU |
| Mirror | Horizontal flip on/off |
| Edge Refine | Neural edge refinement (Zeus/Killer) |
| Dilate | Adjust the subject boundary in Blur, Replace, and Remove. Default: 3. In Replace, lower values contract the established outline and higher values expand it. |
| Softness | Adjust the edge transition in every background mode. Default: 5. Replace retains a narrower transition than Remove at the same setting. |
| Pause View | Freeze preview display |
| Hide Preview | Collapse preview for more control space |
| Drag Divider | Resize preview vs controls area |
Headless Mode
nvbroadcast-vcam # No GUI, just the virtual camera
nvbroadcast-vcam --format i420 # Firefox-compatible format
As a System Service
Use this only for no-GUI/headless passthrough workflows. Do not run the
headless service at the same time as the GUI app, because both need exclusive
access to the physical camera and NVbroadcast virtual camera.
systemctl --user enable --now nvbroadcast-vcam
# If you use the GUI app instead:
systemctl --user disable --now nvbroadcast-vcam
The headless command is a passthrough producer for OBS/browser workflows. For
full background effects, start the main NVbroadcast app first, then select the
NVbroadcast camera in OBS or your meeting app.
Troubleshooting
OBS can only display frames after NVbroadcast is actively writing to the virtual
camera. Start the main app for background effects, then select NVbroadcast in
OBS. Do not run nvbroadcast-vcam and the main app at the same time.
If the visible camera name is still old after an update, close OBS, browsers, meeting apps, and NVbroadcast, then reboot. Advanced users can reload the loopback device instead:
sudo modprobe -r v4l2loopback
sudo modprobe v4l2loopback devices=1 video_nr=10 card_label="NVbroadcast" exclusive_caps=1 max_buffers=4
- Go to
chrome://flags - Search "PipeWire"
- Disable "PipeWire Camera" flag
- Restart Chrome
Another app is using the camera. Close it or run:
fuser -k /dev/video0
Stop NVBroadcast, then ask the source installer to recreate its environment as the CUDA variant:
./install.sh --runtime cuda
For a manually managed source environment, recreate the virtual environment and
install .[cuda]. Never overlay .[cuda] on an existing .[cpu] environment.
Bare pip install . is runtime-neutral and intended for downstream packagers
that provide exactly one ONNX Runtime owner themselves.
The installer verifies ownership and executes the pinned probe model in a fresh process with CPU fallback disabled. To repeat that check in a manually managed developer environment:
.venv/bin/python -m nvbroadcast.runtime --variant cuda
The command succeeds only when CUDAExecutionProvider creates a session,
executes the probe graph on CUDA, and returns the expected output. Provider
enumeration by itself is not treated as GPU readiness. To verify TensorRT in a
CUDA-owned environment, run:
.venv/bin/python -m nvbroadcast.runtime --variant cuda --provider tensorrt
On Python 3.14, the optional TensorRT 10 libraries and a successful TensorRT
probe enable Zeus and Killer. CUDA modes remain available when the CUDA probe
succeeds.
The amd64 Snap includes CUDA inference, compositing, and frame conversion, but intentionally uses GStreamer's CPU MJPEG decoder. Bundling the optional nvImageCodec and nvJPEG runtimes would add about 256 MB to the Snap. Source, Debian, and RPM installs using the CUDA extra can use GPU MJPEG decoding.
Resolution changes are now saved safely and applied after you stop and start the app again. This avoids the live-pipeline hang path that some cameras and loopback setups hit during hot restarts.
If a camera still behaves oddly after restart, verify its real supported modes:
v4l2-ctl -d /dev/video0 --list-formats-ext # Check supported resolutions
Project Structure
nvidia-broadcast-linux/
├── src/nvbroadcast/
│ ├── __init__.py # Package version
│ ├── app.py # GTK4 app: modes, effects, pipeline management
│ ├── vcam_service.py # Headless virtual camera service
│ ├── __main__.py # CLI entry point
│ ├── ai/
│ │ ├── transcriber.py # Local meeting transcription
│ │ └── summarizer.py # Local meeting notes and summary extraction
│ ├── core/
│ │ ├── config.py # TOML config, performance profiles, compositing backends
│ │ ├── constants.py # App ID, paths, GPU config
│ │ ├── dependency_installer.py # Optional runtime installer flow
│ │ ├── global_hotkeys.py # Portal and GNOME global effect shortcuts
│ │ ├── gpu.py # GPU detection, CUDA device mapping
│ │ ├── meeting_store.py # On-device meeting history and retention
│ │ ├── model_download.py # Verified per-user AI model cache
│ │ ├── platform.py # OS/runtime feature detection
│ │ ├── resources.py # Packaged resource lookup
│ │ └── updates.py # GitHub release/update helpers
│ ├── runtime/
│ │ ├── artifact.py # Installed dependency and artifact inspection
│ │ ├── probe.py # Fresh-process provider execution probe
│ │ └── variants.py # CPU/CUDA runtime ownership contracts
│ ├── video/
│ │ ├── effects.py # Multi-model engine, fused CUDA kernel, edge refiner
│ │ ├── pipeline.py # GStreamer pipeline, async effects, frame throttling
│ │ ├── beautify.py # Video enhancement (5 effects + GPU batch)
│ │ ├── autoframe.py # MediaPipe face tracking with smooth zoom/pan
│ │ ├── eye_contact.py # Eye contact correction
│ │ ├── face_landmarks.py # Shared MediaPipe face landmark worker
│ │ ├── perf_monitor.py # FPS/GPU performance monitor
│ │ ├── relighting.py # Face relighting effect
│ │ ├── vcam_monitor.py # Safe virtual-camera consumer detection
│ │ └── virtual_camera.py # v4l2loopback + camera capability query
│ ├── audio/
│ │ ├── deepfilter.py # DeepFilterNet3 ONNX speech enhancement
│ │ ├── devices.py # Mic/speaker enumeration and routing
│ │ ├── effects.py # Denoiser selection and RNNoise fallback
│ │ ├── level_monitor.py # Audio level meter
│ │ ├── meeting_capture.py # Mixed mic + speaker meeting capture
│ │ ├── mic_test.py # Processed mic recording/playback test
│ │ ├── pipeline.py # GStreamer audio pipeline
│ │ ├── monitor.py # Speaker output denoise
│ │ ├── service.py # Background audio helper service
│ │ ├── virtual_mic.py # PipeWire/Pulse virtual microphone
│ │ └── voice_fx.py # Voice EQ, gate, compression, presets
│ └── ui/
│ ├── window.py # Main window: resizable paned layout, 9 modes
│ ├── setup_wizard.py # First-run wizard
│ ├── controls.py # Effect toggles, sliders, file picker
│ ├── device_selector.py # Dropdown selector (single-connect fix)
│ ├── sni_tray.py # Native StatusNotifierItem tray
│ ├── tray.py # Optional legacy tray integration
│ ├── video_preview.py # Live video preview
│ └── style.css # App styling with Adwaita/system theme integration
├── models/ # AI models (auto-downloaded)
│ ├── rvm_mobilenetv3_fp32.onnx
│ ├── rvm_resnet50_fp32.onnx
│ ├── rvm_mobilenetv3_fp16.onnx # Lightweight refiner model
│ ├── rvm_resnet50_fp32_trt.onnx # TensorRT shape-inferred
│ └── rvm_mobilenetv3_fp32_trt.onnx
├── configs/ # v4l2loopback and PipeWire templates
├── data/ # Desktop, metainfo, service, icons, backgrounds
├── docs/ # GitHub Pages site and release notes
├── macos/ # CoreMediaIO camera extension and helper bridge
├── packaging/ # Debian and RPM package metadata
├── scripts/ # Model/setup/release/quality tooling
├── snap/ # Snapcraft package metadata and store assets
├── tests/ # Unit and integration tests
├── install.sh # Multi-distro installer
├── install_macos.sh # macOS installer
├── uninstall.sh # Clean removal
├── build-packages.sh # Debian/RPM/macOS package builder
├── pyproject.toml # Package config
└── README.md
Contributing
Contributions, feedback, and ideas are warmly welcome.
Accepted contributions receive cumulative credit in the application and in CONTRIBUTORS.md, including the work or verified technical finding behind each credit. The app distinguishes Core Maintainers, Major Feature Contributors, and Contributors, with a concise description of each person's accepted work. Verified fixes count: recognition reflects technical depth and impact, not line counts or pull-request counts. Original authorship, community testing, and financial sponsorship remain distinct.
How to Contribute
- Fork this repository
- Create a branch (
git checkout -b feature/amazing-thing) - Commit with clear messages
- Open a Pull Request
Report Issues
Found a bug? Open an issue.
Ideas for Contribution
- Eye contact correction (v0.3.0)
- Virtual lighting / face relighting (v0.3.0)
- System tray indicator (v0.2.0)
- Multi-camera support (v0.3.0)
- Recording mode (v0.3.0)
- Performance overlay (FPS, GPU usage) (v0.3.0)
- GStreamer NVDEC/NVENC hardware codec pipeline (v0.3.0)
- NVIDIA Maxine SDK integration
- Flatpak packaging
- Snap packaging
Recognized Contributors
Core Maintainers: DocZeus, the original project creator and maintainer.
Major Feature Contributors: Jon Fuller for GPU transport, audio processing and runtime reliability; Cédric Prezelin for camera recovery, runtime ownership and dependency security; and Mradul Kumar for experimental Python 3.15 CPU tooling and native-model checks outside the frozen v1.5.4 source.
Contributors: John Maingi for the validated Whisper installer diagnosis; Cenkay Çoban for explicit profile auto-start and safe failure recovery; KadotyGamer for Python 3.14 source installation and binding checks; Mauricio Zaffari for CUDA detection with system-provided ONNX Runtime packages; and JZomDev for preventing accidental slider changes during page scrolling.
See CONTRIBUTORS.md for the reviewed evidence and delivery status behind each credit. Recognizing accepted work does not imply that it was shipped in an earlier release or that an experimental route is supported on every platform.
Future Upgrades
- Meeting lip-sync compensation — explicit audio/video delay calibration so heavy live video stacks still land naturally in calls
- Per-device auto benchmark — benchmark each camera mode and effect stack once, then pin the best stable settings for that machine
- Speaker diarization — separate “me” vs “remote speaker” in live meeting transcripts and saved notes
- Local live captions — optional on-screen captions and confidence-aware subtitle output for streams and calls
- Multi-person framing — presenter mode for interviews, podcasts, and side-by-side calls
- AI meeting memory — on-device semantic search across prior meetings, summaries, action items, and decisions
- Scene-aware relighting — stronger face light that reacts to background direction, exposure, and skin tone without flattening the face
- Quality advisor — explain exactly which effect, resolution, or backend is costing FPS on the current hardware
Support continued development
If you like NV Broadcast and want to help me keep building at this pace, feel free to sponsor my work.
I build and maintain NV Broadcast with contributions from the community. Sponsorship gives me more time for the work behind each release: improving effects and performance, resolving difficult bugs, and testing cameras, audio and packages across real systems.
Support is optional, and core features remain open source. Reports, testing, documentation and code contributions are valuable too. Development priorities follow technical merit and community needs.
Founding Sponsor
- @Mattsky — founding sponsor of NV Broadcast
Featured Sponsors
Backers & Supporters
License
- Python app & Linux code: GPL-3.0-or-later — see LICENSE, including the retained attribution terms, and NOTICE
- macOS Camera Extension (
macos/): Proprietary — see macos/LICENSE
Any redistribution or derivative work must retain the original author attribution.