← Back
ZacharyZhang-NY

ZacharyZhang-NY/OmaPhoto

Layered image editor for Linux and Omarchy, a port of Compositor

View on GitHub ↗
Stars
231
Forks
7
Watchers
231
Open issues
7
Contributors
2
Language
C++
License
MIT License
Default branch
main
Created Sep 26, 2026Updated Oct 1, 2026

Star growth

Today—
This week—
This month—

Star history will appear here once this repo has been tracked for a couple of days.

README

OmaPhoto

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.

What it does

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

Works with AI agents

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.

Install

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

Ubuntu 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.sh

Each 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.sh

Fedora'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.sh

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

Garbled cursors on NVIDIA with Hyprland

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
}

Build from source

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 display

run 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).

Licence

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.