Skip to content
areen-devPublic

About

Native camera app for Omarchy: live preview, photo capture and video recording

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Omacam

Built for Omarchy: App

ci

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.

Features

  • 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 *.part and 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.

Keyboard

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 and run

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.omacam

Automated 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 5

Self-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 and rollback

./install.sh              # builds Release, runs tests, installs to ~/.local
./install.sh --uninstall  # removes app files; keeps settings and media

The 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.

Limitations

  • Photo capture uses the in-memory frame path because captureToFile fails 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.

Security

  • 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.

Evidence

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.

About

Native camera app for Omarchy: live preview, photo capture and video recording

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages