Skip to content

funinkina/openeffects

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

55 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

OpenEffects icon

OpenEffects

Latest Release License Language Platform GitHub Stars GitHub Issues

OpenEffects is a Linux-native, GPU-accelerated webcam effects engine. 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.).

Features

  • Portrait Mode: High-quality background blur with feathered edges and temporal stability.
  • Center Stage: Intelligent face and body tracking that smoothly crops and zooms to keep you (or your group) centered.
  • Background Replacement: Replace your messy room with a solid color or custom image.
  • Studio Light: Subtly brightens and separates the subject from the background using face-region-aware tone mapping.
  • Reactions: Hand-gesture-triggered animated overlays (e.g., thumbs-up for πŸ‘ and thumbs down and heart emojies based on gestures). Off by default. Can be trigerred manually via

Components

OpenEffects is designed to be lightweight and modular, avoiding the need for an always-open GUI window:

  • openeffectsd (Daemon): Headless, GPU-accelerated 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.

Hardware & ML Support

Inference is powered by ONNX Runtime, unified behind a single execution priority chain to leverage whatever hardware you have:

  1. NVIDIA: TensorRT / CUDA
  2. AMD: ROCm / MIGraphX
  3. Intel: OpenVINO
  4. Universal GPU: Vulkan
  5. CPU Fallback: XNNPACK

OpenEffects automatically detects your hardware capabilities (Tier 1 to Tier 4) and gracefully degrades effect quality, resolution, or frame rates to maintain a sub-50ms latency budget.

Installation

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.

Arch Linux

sudo pacman -U openeffectsd-*-x86_64.pkg.tar.zst openeffects-*-x86_64.pkg.tar.zst

Fedora / RHEL

sudo dnf install ./openeffectsd-*.x86_64.rpm ./openeffects-*.x86_64.rpm

Ubuntu / Debian

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.

Remote repositories (coming soon)

  • Flatpak (Flathub) β€” coming soon (PipeWire virtual camera only; v4l2loopback is unavailable inside the sandbox).
  • Arch Linux (AUR) β€” coming soon: yay -S openeffects
  • Fedora (COPR) β€” coming soon: dnf copr enable <user>/openeffects && dnf install openeffects
  • Ubuntu / Debian (PPA) β€” coming soon: add-apt-repository ppa:<user>/openeffects && apt install openeffects

Usage

Start the daemon (usually handled automatically by the systemd user service):

systemctl --user start openeffectsd

CLI Examples

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"
}

Security & Privacy

  • Cameras are accessed securely via the xdg-desktop-portal-camera.
  • IPC is restricted exclusively to the D-Bus session bus.
  • No telemetry, network calls, or cloud inference. All ML processing happens locally.
  • Heavier models can be downloaded via the GUI, verified by SHA256 hashes defined in local manifests.

Development Platform

  • Language: Rust (Daemon, CLI, GUI)
  • UI: GTK4 + libadwaita-rs
  • Media Pipeline: GStreamer 1.24+ + PipeWire
  • Display Protocol: Wayland only (X11 is not supported)