OmaPhoto is a layered image editor for Linux, made first for Omarchy. It follows your Omarchy theme and switches with it.
It is a Linux port of Compositor by Wonder Assembly, a macOS app written in Swift. Compositor's source is the specification: OmaPhoto keeps its tools, its menus and its shortcuts (Ctrl for ⌘, Alt for ⌥). It reads and writes Compositor's .comp projects, so a project moves between the two apps. OmaPhoto is independent of Wonder Assembly.
- Layers, folders, masks, clipping masks, blend modes and opacity; whole layers copy between projects
- Selections: marquee, lasso, magic wand and its object mode, Select › Subject, load from a layer, feather, expand and contract
- Brush, eraser, spot healing, clone stamp, smudge, blur and liquify, gradient, shapes, type with colour on selected letters
- Move, transform and distort layers and selections; rulers, guides, a grid with adjustable spacing and subdivisions, and snapping
- Levels, Curves, Hue/Saturation, Exposure, Black & White, Color Balance, Gradient Map, Grain, Invert, blur and noise, as edits or as adjustment layers
- Camera Raw Filter, docked beside the canvas
- Layer effects: stroke, drop shadow, outer and inner glow, color overlay, inner shadow
- Filters: Gaussian and motion blur, noise, lens correction, Vignette, Bloom / Glow, Tonal Contrast, Dither, Content-Aware Fill and Remove Background (U²-Net on ONNX Runtime, offline)
- Crop, trim, canvas size, image size; PNG and JPEG export
- Imports JPEG, PNG, TIFF, HEIC, SVG, Photoshop files (PSD and PSB) and camera RAW
- Open Recent, and a Keyboard Shortcuts window
- Drag a number's label to scrub its value
- Keep working while a project saves
- A project another app changes on disk reloads in place; unsaved work is never replaced without asking
The acceptance run checks each of these in the app's own window, with screenshots.
AI agents and scripts can build and edit projects directly: a .comp is a folder of PNG layers and a manifest, and an open project updates live as it's written. See Writing OmaPhoto projects and the project format.
Each script installs the newest release. The Arch, Ubuntu and Fedora scripts download its package, check it against the release's SHA256SUMS and install it with your system's package manager; the NixOS script builds the release's flake. Packages are built for x86_64.
Arch and Omarchy:
curl -fsSLO https://raw.githubusercontent.com/ZacharyZhang-NY/OmaPhoto/main/scripts/install/arch.sh && bash arch.shUbuntu 24.04 or 26.04 LTS and systems built on them (Linux Mint 22, Pop!_OS 24.04):
curl -fsSLO https://raw.githubusercontent.com/ZacharyZhang-NY/OmaPhoto/main/scripts/install/ubuntu.sh && bash ubuntu.shEach DEB names its Ubuntu release's libraries, so other Ubuntu releases and Debian build from source (below).
Fedora 43 or 44:
curl -fsSLO https://raw.githubusercontent.com/ZacharyZhang-NY/OmaPhoto/main/scripts/install/fedora.sh && bash fedora.shFedora's own libheif decodes no HEVC. For HEIC import, add RPM Fusion and install libheif-freeworld; the script reminds you.
NixOS installs the release's flake into your profile:
curl -fsSLO https://raw.githubusercontent.com/ZacharyZhang-NY/OmaPhoto/main/scripts/install/nixos.sh && bash nixos.shOr add github:ZacharyZhang-NY/OmaPhoto/<tag>, a release tag, as a flake input and put its packages.x86_64-linux.default in your configuration.
The packages themselves sit on the releases page.
On NVIDIA with Hyprland at a fractional scale, the cursors OmaPhoto draws itself, such as those of the selection tools, the wand, the eyedropper, zoom and moving layers, can show garbled or cut off. Theme cursors render correctly. The fault lies in the hardware cursor path (reported upstream as Hyprland #16413). Software cursors avoid it.
Current Hyprland and Omarchy read ~/.config/hypr/hyprland.lua; Omarchy users can put the line in ~/.config/hypr/looknfeel.lua:
hl.config({ cursor = { no_hardware_cursors = 1 } })An older setup that reads ~/.config/hypr/hyprland.conf takes:
cursor {
no_hardware_cursors = 1
}
The build runs in Docker, so the host needs only Docker:
scripts/dev.sh build # configure and build in Ubuntu 24.04
scripts/dev.sh test # every test, headless
scripts/dev.sh run # build, then the app on your Wayland displayrun gives the container your home folder at its own path, so the app opens and saves your files and reads your Omarchy theme, and the GPU's render nodes (/dev/dri/renderD*), which Mesa's EGL wants. Files outside your home folder stay out of reach.
By hand: C++20, Qt 6.4 or later (Widgets, Concurrent, image formats), CMake, Ninja, libheif, LibRaw, fontconfig and ONNX Runtime. -DOMAPHOTO_MODEL=path/to/u2net.onnx installs Remove Background's model. scripts/distro-check.sh arch|fedora|nixos|resolute builds and tests on those systems (resolute is Ubuntu 26.04).
MIT, as Compositor is; see LICENSE. Remove Background uses U²-Net (Apache-2.0, licenses/U-2-Net.txt) through ONNX Runtime (MIT). Every package carries ONNX Runtime with its notices.