Skip to content

Auto Modes

emeet-pixyd supports four auto-management strategies, configured via EMEET_PIXYD_AUTO or the NixOS auto option.

Mode On call start On call end
full (default) Face tracking + noise cancellation + PipeWire source switch Privacy mode
tracking-only Face tracking Privacy mode
privacy-only Nothing Privacy mode
off — (manual mode, see below) —
Terminal window
emeet-pixy auto full # Full automation
emeet-pixy auto tracking-only # Just tracking
emeet-pixy auto privacy-only # Just privacy on call end
emeet-pixy auto off # Disable all automation
emeet-pixy auto # Show current mode
emeet-pixy auto-on # Shortcut: set to full
emeet-pixy auto-off # Shortcut: set to off
emeet-pixy toggle-auto # Toggle between off and full
Terminal window
EMEET_PIXYD_AUTO=tracking-only emeet-pixyd

Legacy values true/1 (maps to full) and false/0 (maps to off) are still accepted for backward compatibility.

hardware.emeet-pixy.auto = "full";

The daemon scans /proc/*/fd every 2 seconds (configurable) for processes holding the video device open. It excludes itself and its own descendants to avoid false positives.

Detection is debounced — by default, 3 consecutive cycles must agree before a state change is triggered. This prevents flicker from apps that briefly probe the camera.

Setting Default Environment Variable
Poll interval 2s EMEET_PIXYD_POLL_INTERVAL
Debounce count 3 EMEET_PIXYD_DEBOUNCE_COUNT

With defaults, a call start is detected within ~6 seconds and a call end within ~6 seconds.

  1. Face tracking enabled via HID
  2. Audio mode set to noise cancellation (nc) via HID
  3. PipeWire default source switched to PIXY microphone via wpctl
  4. Desktop notification sent via notify-send
  1. Camera enters privacy mode (hardware lens shutter) via HID
  2. PipeWire default source restored to previous
  3. Desktop notification sent

off is the manual mode: the /proc call-detection monitor is disabled entirely — the daemon never scans for processes using the camera, so whatever mode you set (tracking, idle, privacy) persists until you change it. No app needs to hold the camera open for tracking to stay active.

Your mode even survives reboots, replugs, and camera power cycles: the camera resets itself to its boot default when it loses power, and the daemon detects this on startup or hotplug and re-applies your persisted mode (so privacy mode physically re-blocks the lens after a power cut). Audio and gesture settings are adopted from the hardware on replug instead.

This fits headless or on-demand setups, e.g. a Home Assistant voice/vision assistant that toggles tracking/privacy on demand and grabs focused snapshots via FFmpeg without the daemon reacting to each capture:

Terminal window
emeet-pixy auto-off # or: EMEET_PIXYD_AUTO=off / NixOS: auto = "off"
emeet-pixy track # tracking stays on, no capture required
emeet-pixy privacy # physically block the lens when idle

You can still control everything manually via CLI, web UI, or HTTP API — auto mode only affects the automatic call-start/call-end behavior.

The toggle-auto command cycles between off and full. If auto mode is any value other than off, toggling sets it to off. If it’s off, toggling sets it to full.