A Linux Native webcam effects engine
74
stars
106
commits
Rust
primary language
Jul 13, 2026
updated
OpenEffects is a Linux-native webcam effects engine powered by ONNX Runtime. It brings advanced camera features like Center Stage, Portrait blur, Background Replacement, and gesture-triggered Reactions to any Wayland Linux desktop. It works transparently with any app that consumes a PipeWire camera node or /dev/video* device (Zoom, OBS, WebRTC, etc.).
OpenEffects is designed to be lightweight and modular, avoiding the need for an always-open GUI window:
openeffectsd (Daemon): Headless GStreamer pipeline that handles capture, ML inference, compositing, and publishing via PipeWire.openeffects (GUI): A GTK4/libadwaita app and primary control surface — live effect toggles and adjustments, camera settings, opt-in model downloads, and background asset management.openeffectsctl (CLI): First-class command-line interface for styling WMs (Hyprland, Sway), scripting, and keybinds.All models run on the CPU via ONNX Runtime (ort crate with download-binaries feature). The bundled models (selfie segmentation, face detection, hand/palm landmarks) are lightweight MobileNet-class architectures — 256² and 640² — and complete inference in 2–5 ms on modern x86_64 CPUs. No GPU is required.
[!NOTE] GPU execution providers (CUDA, OpenVINO, Vulkan) were evaluated and rejected: for sub-1 MB models the kernel-launch and transfer latency of a discrete GPU exceeds the total CPU inference time. Camera capture and the GStreamer/PipeWire pipeline are the actual bottlenecks, not inference.
Download the packages for your distro from the latest GitHub release.
OpenEffects ships as three packages — openeffectsd (daemon, bundles the ML models), openeffectsctl (CLI), and openeffects (GUI). The clients depend on the daemon, so install openeffectsd alongside whichever client you want; pass both files on the same command line so the dependency resolves.
sudo pacman -U openeffectsd-*-x86_64.pkg.tar.zst openeffects-*-x86_64.pkg.tar.zst
sudo dnf install ./openeffectsd-*.x86_64.rpm ./openeffects-*.x86_64.rpm
sudo apt install ./openeffectsd_*_amd64.deb ./openeffects_*_amd64.deb
For a headless / CLI-only setup, install openeffectsd plus openeffectsctl instead. x86_64 only for now.
v4l2loopback is unavailable inside the sandbox).yay -S openeffectsdnf copr enable <user>/openeffects && dnf install openeffectsadd-apt-repository ppa:<user>/openeffects && apt install openeffectsStart the daemon (usually handled automatically by the systemd user service):
systemctl --user start openeffectsd
Control effects via openeffectsctl (see the full CLI reference):
openeffectsctl status
openeffectsctl portrait-blur --on --strength 70
openeffectsctl center-stage --zoom tight
openeffectsctl background ~/Pictures/office.jpg
openeffectsctl react thumbs-up
openeffectsctl toggle reactions
Use with Waybar:
"custom/openeffects": {
"exec": "openeffectsctl status --short",
"interval": 5,
"on-click": "openeffectsctl toggle portrait-blur"
}
xdg-desktop-portal-camera.106 commits
Rust
66.0%
Astro
19.9%
JavaScript
7.0%
Shell
3.2%
CSS
2.7%
A Linux Native webcam effects engine
74
stars
106
commits
Rust
primary language
Jul 13, 2026
updated
OpenEffects is a Linux-native webcam effects engine powered by ONNX Runtime. It brings advanced camera features like Center Stage, Portrait blur, Background Replacement, and gesture-triggered Reactions to any Wayland Linux desktop. It works transparently with any app that consumes a PipeWire camera node or /dev/video* device (Zoom, OBS, WebRTC, etc.).
OpenEffects is designed to be lightweight and modular, avoiding the need for an always-open GUI window:
openeffectsd (Daemon): Headless GStreamer pipeline that handles capture, ML inference, compositing, and publishing via PipeWire.openeffects (GUI): A GTK4/libadwaita app and primary control surface — live effect toggles and adjustments, camera settings, opt-in model downloads, and background asset management.openeffectsctl (CLI): First-class command-line interface for styling WMs (Hyprland, Sway), scripting, and keybinds.All models run on the CPU via ONNX Runtime (ort crate with download-binaries feature). The bundled models (selfie segmentation, face detection, hand/palm landmarks) are lightweight MobileNet-class architectures — 256² and 640² — and complete inference in 2–5 ms on modern x86_64 CPUs. No GPU is required.
[!NOTE] GPU execution providers (CUDA, OpenVINO, Vulkan) were evaluated and rejected: for sub-1 MB models the kernel-launch and transfer latency of a discrete GPU exceeds the total CPU inference time. Camera capture and the GStreamer/PipeWire pipeline are the actual bottlenecks, not inference.
Download the packages for your distro from the latest GitHub release.
OpenEffects ships as three packages — openeffectsd (daemon, bundles the ML models), openeffectsctl (CLI), and openeffects (GUI). The clients depend on the daemon, so install openeffectsd alongside whichever client you want; pass both files on the same command line so the dependency resolves.
sudo pacman -U openeffectsd-*-x86_64.pkg.tar.zst openeffects-*-x86_64.pkg.tar.zst
sudo dnf install ./openeffectsd-*.x86_64.rpm ./openeffects-*.x86_64.rpm
sudo apt install ./openeffectsd_*_amd64.deb ./openeffects_*_amd64.deb
For a headless / CLI-only setup, install openeffectsd plus openeffectsctl instead. x86_64 only for now.
v4l2loopback is unavailable inside the sandbox).yay -S openeffectsdnf copr enable <user>/openeffects && dnf install openeffectsadd-apt-repository ppa:<user>/openeffects && apt install openeffectsStart the daemon (usually handled automatically by the systemd user service):
systemctl --user start openeffectsd
Control effects via openeffectsctl (see the full CLI reference):
openeffectsctl status
openeffectsctl portrait-blur --on --strength 70
openeffectsctl center-stage --zoom tight
openeffectsctl background ~/Pictures/office.jpg
openeffectsctl react thumbs-up
openeffectsctl toggle reactions
Use with Waybar:
"custom/openeffects": {
"exec": "openeffectsctl status --short",
"interval": 5,
"on-click": "openeffectsctl toggle portrait-blur"
}
xdg-desktop-portal-camera.106 commits
Rust
66.0%
Astro
19.9%
JavaScript
7.0%
Shell
3.2%
CSS
2.7%