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.

v1.5.4发布于 2026-10-31 00:14 UTC213star +1 / 7 天23fork同步于 2026-11-10 18:04 UTC

怎么上手

由 README 提炼,执行前请确认
git clone https://github.com/Hkshoonya/nvidia-broadcast-linux.git
cd nvidia-broadcast-linux
./install.sh
硬件要求按 README 说明

GPU 模式(Killer/Zeus/DocZeus/CUDA)仅限 Linux 且需 NVIDIA GPU;CPU 模式无需 CUDA。macOS 需 Apple Silicon 与 macOS 15+,Intel Mac 不支持。README 未给出具体显存要求。

支持 Apple Silicon需要 CUDA多卡 / 张量并行
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

Linux 和 macOS 上的开源 AI 摄像头与麦克风特效工具,用来替代 NVIDIA Broadcast

给 Linux 和 macOS 用的开源 AI 摄像头与麦克风增强工具,能实现背景虚化、自动取景、降噪、录制和本地会议转写,相当于把 NVIDIA Broadcast 那套效果搬到了非 Windows 平台。

核心能力

  • 用 AI 实现背景虚化、替换、绿幕和自动取景
  • 支持 RVM、IS-Net、BiRefNet 多模型分割
  • 麦克风降噪与 6 种语音预设
  • 本地 Whisper 会议转录与 AI 摘要
  • 提供虚拟摄像头,兼容 Zoom、OBS、Discord

容易踩的坑

Linux 安装器要求系统已有带 venv 支持的兼容 Python(3.11-3.14)及 GTK4、Libadwaita、GStreamer 绑定;macOS 需先装 /opt/homebrew 的 Homebrew 并以普通用户运行 install_macos.sh;macOS 虚拟摄像头需先打开 OBS 启停一次虚拟摄像头以注册后端。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v1.5.4
  1. 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-cuda are recognized when their Python distribution is named onnxruntime; 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
  2. 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.

  3. 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.pkg is 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/nvbroadcast
    

    Do 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

  4. 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 --python path. It verifies venv and ensurepip, then checks that GTK4, Libadwaita, and GStreamer Python bindings match the selected interpreter after distro packages are installed.

    Only the project-owned .venv is 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.

    1. Download the v1.5.2 DEB or RPM, nvbroadcast-native-upgrade, and SHA256SUMS.packages from the same GitHub Release.
    2. Verify both downloaded files against SHA256SUMS.packages and, 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
  5. 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.Application actions.
    • 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,<7 range so source installations that expose host GTK packages do not conflict with current OpenTelemetry

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    [!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:

    ModeInferenceCompositing1080p SpeedCPUGPUBest For
    Killer360p + fused CUDAFused kernel (0.1ms)20ms / 48fps24%41%Maximum speed
    Zeus480p optimizedCuPy GPU30ms / 33fps22%39%Speed + quality balance
    DocZeus720p full qualityFused kernel (0.1ms)44ms / 23fps22%46%Best quality/speed
    CUDA Max720pCuPy GPU45ms / 22fps22%46%Maximum quality
    CUDA Balanced720p, skip 2CuPy GPU29ms / 34fps24%39%Daily use
    CUDA Perf720p, skip 2CuPy GPU30ms / 34fps23%39%Light GPU load
    CPU Quality720p, CPU providerOpenCV SIMDHardware-dependentHigher0% video inferenceNo CUDA required
    CPU Light720p, CPU provider, skip 2OpenCV SIMDHardware-dependentMedium0% video inferenceSave GPU for other work
    CPU Low End720p, CPU provider, skip 3OpenCV SIMDHardware-dependentLower0% video inferenceOlder 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 CUDAExecutionProvider for 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):

    1. Fast pass: RVM at 360p/480p → coarse alpha (18-21ms)
    2. Refine pass: RVM ResNet50 at 720p → quality alpha (30ms, every 2nd frame)
    3. Blend: On refine frames use quality alpha; on skip frames 80% quality + 20% coarse for tracking
    4. Result: 89.9% quality recovery with minimal cost

    AI Models

    ModelSegmentsSpeed (RTX 5060)VRAMLicenseAuto-Download
    RVM (default)Person only~29ms (720p)660 MBGPL-3.0Yes
    IS-NetAny object~55ms1.8 GBApache 2.0Yes
    BiRefNetBest edges~187ms6+ GBMITYes

    Quality Presets (RVM only)

    PresetBackboneDownsampleBest For
    PerformanceMobileNetV30.25Video calls
    BalancedMobileNetV30.5Daily use
    QualityResNet500.375Presentations
    UltraResNet500.5Recording

    Requirements

    Hardware

    ComponentMinimumRecommended
    GPUNVIDIA GTX 1060RTX 3060 or newer
    VRAM2 GB4 GB+
    CPU4 cores8+ cores (if using CPU compositing)
    WebcamAny USB camera720p+ with MJPEG or raw V4L2 modes
    MicAny 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:

    1. Detects your distro and package manager
    2. Checks all requirements (Python, PipeWire, GPU, DKMS, kernel headers)
    3. Installs missing packages with the correct names for your distro
    4. Installs NVIDIA CUDA mode runtime packages when an NVIDIA GPU is detected
    5. Asks about compositing — CPU, GStreamer GL, or CuPy CUDA
    6. Sets up virtual camera, launcher scripts, desktop entry, systemd service
    7. Verifies GPU acceleration and writes initial config
    8. 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 .pkg release asset when one is published. Current PKG installs use admin-owned source under /opt/nvbroadcast and 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 rerun install_macos.sh instead.
    • 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

    DistroPackage ManagerStatus
    Ubuntu, Debian, Pop!_OS, MintaptFull auto-install
    Fedora, RHEL, CentOS, Rockydnf/yumAuto-install with matching Python/desktop bindings
    Arch, Manjaro, EndeavourOSpacmanFull auto-install
    openSUSEzypperFull auto-install
    Gentoo, Void, NixOSportage/xbps/nixManual 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.

    1. Setup wizard detects your system and configures the best mode
    2. App starts and auto-begins streaming
    3. Configure effects, select resolution/FPS/mode
    4. Close the window — app minimizes to background, virtual camera stays active
    5. Open Chrome / Zoom / Discord — select "NVbroadcast" on Linux or "OBS Virtual Camera" on macOS
    6. Next login — app starts automatically with all your settings remembered

    Controls

    ControlDescription
    Resolution360p to 4K — auto-detected from camera, applied safely after restart
    FPS15-60fps — adapts to selected resolution
    Mode9 modes: Killer, Zeus, DocZeus, CUDA, CPU
    MirrorHorizontal flip on/off
    Edge RefineNeural edge refinement (Zeus/Killer)
    DilateAdjust the subject boundary in Blur, Replace, and Remove. Default: 3. In Replace, lower values contract the established outline and higher values expand it.
    SoftnessAdjust the edge transition in every background mode. Default: 5. Replace retains a narrower transition than Remove at the same setting.
    Pause ViewFreeze preview display
    Hide PreviewCollapse preview for more control space
    Drag DividerResize 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
    
    1. Go to chrome://flags
    2. Search "PipeWire"
    3. Disable "PipeWire Camera" flag
    4. 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

    1. Fork this repository
    2. Create a branch (git checkout -b feature/amazing-thing)
    3. Commit with clear messages
    4. 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.