StudioCast is an open-source Linux application that provides a virtual camera and virtual audio devices (microphone and speakers) with real-time effects for video calls, streaming, and recording.
Status: early preview / proof-of-concept. It is usable on Ubuntu 22.04+ and is still under active development.
Project status note: Further improvements from the repository author are currently paused due to work commitments. Contributions are very welcome.
Open-source eye tracking disclaimer: The eye-contact/eye-tracking portion of the open-source models is currently glitchy and best-effort.
StudioCast is independent and does not ship or redistribute NVIDIA Broadcast binaries.
- Virtual camera for apps like OBS, Zoom/Teams, Discord, and browser/WebRTC
- Optional real-time video effects (for example background effects and eye contact, depending on what is installed and enabled)
- Optional real-time audio effects (noise suppression / enhancement, depending on what is installed and enabled)
- A background daemon that keeps virtual devices available and only does heavy work when an app is consuming them
StudioCast currently targets Ubuntu 22.04 and 24.04.
This installs OS dependencies and sets up the v4l2loopback virtual camera device.
./scripts/setup.sh --deps --v4l2loopback --load-loopback --persist-loopbackIf this step fails, fix it first. Without v4l2loopback you will not get a virtual camera device.
./scripts/setup.sh --build --build-type ReleaseIf you prefer Debug builds during testing:
./scripts/setup.sh --build --build-type DebugYou can run manually during development:
build/studiocastdIn another terminal:
build/studiocastctl status- In your target app, select the StudioCast virtual camera (v4l2loopback device).
- If StudioCast virtual audio devices are enabled/available on your system, select the StudioCast virtual microphone/speakers in your app’s audio settings.
- Open the StudioCast GUI (if built) to enable/disable effects and adjust settings.
Notes:
- StudioCast aims to avoid heavy processing when nothing is consuming the virtual camera. If you see heavy load with no consumer, that is a bug.
- Some effects require specific runtimes or model packs to be installed. See the “Models and engines” section below.
Check status:
build/studiocastctl statusGenerate a support bundle (useful when reporting issues):
build/studiocastctl debug-report --out studiocast-debug-report.txtStudioCast supports multiple backends. What is available depends on what is installed on your machine.
- Open Video (ONNX Runtime + model packs): see
docs/open_source_video_install.md - Open Audio (ONNX Runtime + model packs): see
docs/open_source_audio_install.md - Maxine SDK (optional dependency): see
docs/maxine_install.md
-
Confirm v4l2loopback is installed and loaded:
/dev/video*should include the configured loopback node (for example/dev/video10)
-
Re-run setup if needed:
./scripts/setup.sh --v4l2loopback --load-loopback --persist-loopback
-
Verify the daemon is running and the virtual camera device is present.
-
Use:
build/studiocastctl status
-
If reporting a bug, include:
build/studiocastctl debug-report --out studiocast-debug-report.txt
This section is for building, hacking on StudioCast, and understanding the architecture.
One-shot:
./scripts/setup.sh --deps --v4l2loopback --load-loopback --persist-loopback
./scripts/setup.sh --build --build-type DebugManual build:
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug
cmake --build build --target studiocast
build/studiocastNotes:
- CLion default build directory is often
cmake-build-debug/. - If you hit a compiler/libstdc++ mismatch, pick a distro-matching compiler and re-configure.
- Setup docs live in
docs/SETUP.md.
- Formatting:
./scripts/format.sh - Version:
build/studiocast --version - Maxine install hints:
docs/maxine_install.mdorbuild/studiocast-maxine install-hints - Open Video model packs:
build/studiocast-open install-hintsandbuild/studiocast-open list-models - Support bundle:
build/studiocastctl debug-report --out studiocast-debug-report.txt
StudioCast includes a background daemon (studiocastd) that keeps the virtual camera available and only starts heavy video processing when a consumer opens the v4l2loopback device (OBS/Zoom/etc.).
During development you can run it manually:
build/studiocastd
build/studiocastctl statusThe GUI (studiocast) acts as a controller and talks to the daemon over a Unix socket at:
$XDG_RUNTIME_DIR/studiocast/studiocastd.sock
There is also a systemd user service template in:
packaging/systemd/user/studiocastd.service
Install + enable it for dev/MVP testing:
./scripts/install.sh user-service --build-dir ./cmake-build-debug --yes
systemctl --user status studiocastd.service-
Canonical effect schema type:
BroadcastCameraEffectsinsrc/core/video/effects/broadcast_effects.h -
Stable effect IDs / parameter IDs / ranges for IPC + JSON:
src/core/video/effects/broadcast_effect_contract.h -
Persistence + control plane use JSON:
build/studiocastctl effects getreturns the canonical effects JSONbuild/studiocastctl effects set --file ...sends a JSON patch
-
Effect availability is computed by the daemon and exposed in status.
- The GUI should not try to guess availability client-side.
- Test all open-source models end-to-end
- Improve stability under load and consumer connect/disconnect behavior
- Improve packaging and install flow for non-developers
- Adaptive streaming (e.g. adaptive bitrates/frame sizes to reduce latency on the fly)
- Add additional open-source models