A native webcam app for Omarchy: live preview, photo capture and video recording with device, resolution, pixel-format and frame-rate settings taken from the camera's own reported capabilities.
Status: implemented vertical slice; unit tests, automated camera self-test and
local install/uninstall reproduced on Omarchy 4.0.4-1 (see
verification). The app launches through the desktop entry
with the expected Wayland app_id, and preview frame delivery is checked by the
automated --ui-check mode. All audit items are closed and verified across
three fix passes, three live acceptance passes and a security hardening pass;
known issues records them with evidence. The launcher entry
and icon render in the Omarchy menu, the palette follows a full
omarchy theme set switch, and the package recipe's pacman install, upgrade
and removal lifecycle is verified; a README screenshot was deliberately
omitted for privacy. Version 0.1.3 is the current release and hardens media
writes (see security).
Intended Omarchy target: 4 / Hyprland; this is the intended target, not a tested
compatibility range.
Tested Omarchy versions: 4.0.4-1 on Hyprland (Wayland), Qt 6.11.2, GCC 16.2.1.
Renamed from dev.areen.camera to dev.areen.omacam; existing settings migrate on first start.
- Live preview, mirrored by default (toggleable).
- Photo capture to
IMG_<timestamp>.jpg, default~/Pictures/Camera. - Video recording to
VID_<timestamp>.mp4(H.264 + AAC, WebM/VP9 fallback) with a microphone toggle and a recording timer. - Self-timer with Off, 3 s and 10 s delays and a countdown overlay; tap the countdown or press the shutter key again to cancel. Press T to cycle the timer 3 s, 10 s, off.
- The window opens on the camera preview; the settings panel is closed by default and opens with S or the Settings button.
- Settings: camera device, resolution, pixel format, frame rate, timer, mirror, microphone, photo and video folders; applied live and remembered.
- Capability-driven options: only resolutions, pixel formats and frame rates the device reports; saved selections are validated at startup and on device changes, falling back to the nearest supported format.
- Recording writes
*.partand renames to the final name only after the encoder finalizes; a failed recording keeps the partial file. - Media writes are atomic and symlink-safe; see security for the threat model and review history.
- Settings are written atomically with a schema version; a malformed file is
preserved as
camera.conf.corrupt-<timestamp>instead of being overwritten. - Read-only Omarchy theme palette consumption via
omarchy-theme-color, with a built-in fallback palette when the theme output is missing or malformed.
Space photo · R record/stop · P open photos folder · V open videos folder · T cycle timer (3 s, 10 s, off) · M mirror · S settings · F11 fullscreen · Esc leave fullscreen
Build dependencies: cmake, ninja, qt6-base, qt6-declarative, qt6-multimedia, qt6-wayland.
omarchy pkg add cmake ninja qt6-base qt6-declarative qt6-multimedia qt6-wayland
cmake -S . -B target -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build target
ctest --test-dir target --output-on-failure
./target/dev.areen.omacamAutomated camera self-test (no UI; drives the real capture code paths and writes evidence into a directory you choose):
./target/dev.areen.omacam --self-test /tmp/camera-check --format 1280x720 --seconds 5Self-test options: --format <WxH>, --seconds <n>, --timer-seconds <3|10>,
--cycle-timer, --quit-during-record, and --record-during-timer (starts a
recording while the self-timer counts down and checks that no photo is saved
during recording). --ui-check <seconds> loads the UI and reports measured
preview fps, camera state, settings visibility, error-banner visibility and the
active format; --rescan-every <seconds> retries camera recovery while the UI
is open; --tab-check <steps> sends that many synthetic Tab presses before the
--ui-check report (accessibility traversal). Self-test and ui-check exit 0 on
success and 2 on failure; --ui-check
exits 3 when no frames were measured (for example with the camera busy). The
self-test does not write the settings file.
./install.sh # builds Release, runs tests, installs to ~/.local
./install.sh --uninstall # removes app files; keeps settings and mediaThe installer places the binary in ~/.local/bin, the desktop entry in
~/.local/share/applications and the icon in
~/.local/share/icons/hicolor/scalable/apps, using the same
dev.areen.omacam identity for the executable, Wayland app_id, desktop file
and icon. Rollback is --uninstall plus restoring a previous binary or commit.
Kept on uninstall: ~/.config/dev.areen.omacam/camera.conf,
~/Pictures/Camera, ~/Videos/Camera (or the configured folders).
An Arch package recipe is in packaging/PKGBUILD (pinned to the release tag
archive with a checksum). Its pacman install, upgrade and removal lifecycle is
reproduced in verification; a pull request against the
Omarchy package repository is open.
- Photo capture uses the in-memory frame path because
captureToFilefails on the Qt FFmpeg backend on this system (recorded in verification). - This webcam advertises 30 fps but delivers about 20 fps; the UI shows both the requested format and a measured fps readout.
- Frame-rate choices are the camera's reported minimum and maximum plus standard rates inside that range; cameras that quantize internally snap to the nearest supported rate, because Qt exposes only frame-rate ranges.
- Folder paths are edited as text; there is no portal folder picker yet.
- The Qt Multimedia FFmpeg backend reports GPL licensing; see credits.
- No network functionality: the app issues no network requests and has no service or privileged component.
- Media writes are atomic and symlink-safe; settings input is validated and oversized or malformed files fall back to defaults.
- Release binaries use PIE, full RELRO, BIND_NOW, stack protector and FORTIFY, and the repository runs CodeQL, Dependabot and secret scanning.
- Report vulnerabilities privately via GitHub; the threat model and review history are in SECURITY.md.
See verification and credits. Architecture is documented in ARCHITECTURE.md, security properties and the review history in SECURITY.md; the source is MIT licensed. This community badge does not imply official acceptance.