@tobi: omasnap update: ~70 PRs since I first shared it Multiline text Cut out sections Spotlight + magnifier Screenshots pinna…

X AI KOLs Following Tools

Summary

Omasnap has been updated with over 70 PRs, adding features like multiline text, cut out sections, and improved redactions, while maintaining its lightweight 800kb binary for Wayland and Hyprland environments.

omasnap update: ~70 PRs since I first shared it Multiline text Cut out sections Spotlight + magnifier Screenshots pinnable across workspaces Actually secure redactions Editable vector annotations OCR Crash-proof undo Native Wayland capture Still one tiny 800kb ridiculously fast binary. QT is cool. https://github.com/tobi/omasnap
Original Article
View Cached Full Text

Cached at: 08/22/26, 09:29 AM

omasnap update: ~70 PRs since I first shared it

Multiline text Cut out sections Spotlight + magnifier Screenshots pinnable across workspaces Actually secure redactions Editable vector annotations OCR Crash-proof undo Native Wayland capture

Still one tiny 800kb ridiculously fast binary. QT is cool. https://github.com/tobi/omasnap


tobi/omasnap

Source: https://github.com/tobi/omasnap

Omasnap

A native Wayland screenshot and annotation overlay designed for Omarchy and Hyprland. It captures the focused monitor before mapping an exclusive layer-shell surface, so the editor never appears in its own screenshot. The editor retains annotations as movable, resizable vector layers and preserves the monitor’s native pixels on scaled displays.

Looping Omasnap demonstration

Features

  • Freeform region, window, and full-monitor capture modes.
  • A pointer-side readout that turns any drag into a ruler: the pointer position while the crosshair is idle, then the frame size in native export pixels while a region, a hovered window, or a crop handle is being sized.
  • Window capture is a crop of the focused-monitor frame. Overlapping windows stay visible; there is no second clean-window recapture.
  • Select/move/resize layers, mouse-wheel scaling, and eight external recropping handles.
  • Arrows, straight lines, smoothed freehand strokes, translucent highlighter strokes, hollow or filled rectangles (optionally rounded) and ellipses, numbered markers, editable Neucha text (on a readability pill), and secure redaction with opaque or randomized non-spatial mosaic output.
  • Per-layer preset or custom colors (including highlighter ink), undo/redo history, one-click whole-image OCR, mesh-gradient backdrops, and rendered drop shadows.
  • Cut tool: drag across a band of the image to remove it and collapse the gap, with a live preview and dashed seam marker while dragging; annotations shift to follow.
  • Pin a finished capture as a bottom-right always-on-top layer surface, launched from the same omasnap executable and visible on every workspace.
  • Crash-resistant working documents under /run/user/<UID>/omasnap/ (falling back to a private /tmp/omasnap-<UID>/): the original source image plus a sidecar JSON operation log. Undo still works after a crash or --file reopen. Saving and copying write a normal flattened PNG to the clipboard or ~/Pictures/Screenshots.
  • Verified PNG clipboard output through wl-copy/wl-paste, plus timestamped files under ~/Pictures/Screenshots by default.
  • Open an image already on the clipboard directly in the annotation editor.
  • Correct native-pixel export on fractional or integer-scaled monitors.

Platform scope

The supported target is Wayland + Hyprland, with Omarchy as the primary integration. The renderer, layer surface, clipboard, and monitor capture use Wayland protocols; monitor/window discovery currently calls hyprctl. The focused output is captured in-process through ext-image-copy-capture before the layer maps. Selection displays that captured frame, while the annotation editor uses a translucent layer scrim over the live desktop and draws only the selected capture. Another Wayland compositor could support the application after supplying equivalent monitor and window discovery; generic Wayland support is not claimed by 1.0.

Runtime commands used by the application:

  • hyprctl
  • wl-copy and wl-paste
  • tesseract
  • omarchy-notification-send when available; saved captures include a thumbnail and reopen in Omasnap when clicked. Notification failure does not invalidate output.

Install on Omarchy

Clone the repository and run the Omarchy installer:

git clone https://github.com/tobi/omasnap.git
cd omasnap
./install-omarchy

The installer uses Omarchy’s package helper for missing dependencies, builds in ~/.cache/omasnap, and installs under ~/.local. It does not modify Hyprland configuration.

Hyprland binding

Paste this into a Lua config loaded after require("default.hypr.omarchy"):

hl.unbind("PRINT")
hl.unbind("F12")
hl.unbind("ALT + SHIFT + 4")

o.bind("PRINT", "Screenshot", "omasnap")
o.bind("F12", "Screenshot", "omasnap")
o.bind("ALT + SHIFT + 4", "Screenshot", "omasnap")

hl.layer_rule({
  match = { namespace = "^omasnap$" },
  no_anim = true,
  animation = "none",
  no_screen_share = true,
})

Each of these keys toggles: the first press opens the overlay, the next press dismisses it.

Apply and verify:

hyprctl reload
hyprctl configerrors
hyprctl binds -j | jq -c \
  '[.[] | select(.description == "Screenshot") | {modmask,key,description}]'

omarchy plugin add is intentionally not used. Omarchy plugins are Quickshell QML extensions; they do not install native executables or system packages.

Set OMASNAP_PREFIX before running install-omarchy to use a prefix other than ~/.local.

Manual Arch Linux build

Install the complete build/runtime dependency set:

sudo pacman -S --needed \
  base-devel cmake ninja pkgconf qt6-base layer-shell-qt \
  wayland wayland-protocols hyprland wl-clipboard \
  tesseract tesseract-data-eng

Build and install:

cmake -S . -B build -G Ninja \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_INSTALL_PREFIX="$HOME/.local"
cmake --build build --parallel
cmake --install build

The install step places:

  • ~/.local/bin/omasnap
  • ~/.local/share/applications/omasnap.desktop
  • ~/.local/share/licenses/omasnap/Neucha-OFL.txt

Ensure ~/.local/bin is on PATH, then verify the installed CLI:

omasnap --version
omasnap --help

CLI capture modes

Running without arguments opens freeform region selection:

omasnap

Explicit starting modes:

omasnap --capture-region
omasnap --capture-window
omasnap --capture-fullscreen

Compatibility positional names are also accepted:

omasnap region
omasnap windows
omasnap fullscreen
omasnap smart       # maps to region selection

These options choose what is initially selected; the editor still controls whether the result is copied, saved, or both.

Quick output skips the annotation editor. Add --copy to copy only, --save to save only, or both flags to copy and save. Region and window captures output after selection; fullscreen captures output immediately. Quick output cannot be combined with --file, --clipboard, or --pin.

One instance, toggled by the same hotkey

Only one capture overlay runs at a time, guarded by a lock file in the runtime snapshot directory. Starting omasnap while an overlay is open sends the running instance SIGTERM, which it handles with a clean Qt shutdown; the new process then exits without capturing. Pressing PRINT therefore opens the overlay and pressing it again dismisses it.

Every capture invocation dismisses this way, quick output included: --copy/--save while an overlay is open closes the overlay and outputs nothing, rather than screenshotting the overlay that is still on screen.

Editing an existing image is never cancelled this way: --file, --clipboard, or an image path stops the running instance, waits up to two seconds for the lock, and opens the editor on that image. That is how a pin’s Edit button and a notification click always land in the editor.

A lock left behind by a crashed instance is removed and reclaimed. A lock file that cannot be read or written at all is reported on stderr instead of being mistaken for a running instance.

Exit codes:

CodeMeaning
0Success, including dismissing a running overlay
1Capture, image, or single-instance lock failure
2Usage error

Edit an existing or clipboard image

Point omasnap at any readable image and it opens straight into the annotation editor with the whole image selected, skipping the screen-capture step:

omasnap ~/Pictures/Screenshots/screenshot-2026-08-11_10-00-00.png
# or
omasnap --file /path/to/capture.png

To open the image currently on the Wayland clipboard:

omasnap --clipboard

The clipboard must offer readable image data. Text-only clipboard contents return an error instead of opening an empty editor.

File URLs are accepted too. A saved capture notification’s “Click to edit” action launches omasnap on the finished screenshot, so it can be reopened and re-annotated. Captures copied without saving are not retained on disk and therefore have no delayed edit action.

Environment overrides:

OMASNAP_SCREENSHOT_DIR="$HOME/Pictures/Captures" omasnap
OMASNAP_OCR_LANGS="eng+deu" omasnap
# Thai plus English:
OMASNAP_OCR_LANGS="tha+eng" omasnap

Install the corresponding Tesseract language data before adding a language to OMASNAP_OCR_LANGS. When unset, omasnap falls back to Omarchy’s OMARCHY_OCR_LANGS (which commonly includes the user’s script, e.g. tha+eng), then to eng.

Controls

Capture selection

InputAction
DragSelect a region, with its native pixel size shown at the pointer
SpaceToggle region/window selection
SUPER + ArrowMove among windows in window mode
EnterCapture the highlighted window
Ctrl+ASelect the full focused monitor
Esc, EscDismiss

Annotation editor

InputAction
VSelect/move/resize layers; drag empty canvas for a marquee; wheel scales the selected layer
AArrow
SSpotlight/loupe; press again to cycle ellipse, rectangle, rounded
LStraight line
FFreehand stroke
IEyedropper in the color popover · sample the image as the custom color
CNumbered marker
RRectangle; hover the shape button for rectangle, ellipse, and fill controls; Alt+wheel rounds corners
EEllipse; shares the shape submenu and filled/hollow toggle
DRedact; press again to toggle randomized pixelation or solid redaction
XCut out a band; drag to preview the crossed-out strip, then release to remove and collapse it
TNeucha text on a cream readability pill; Enter adds a line, clicking away keeps the text; press T again to toggle the pill
ORecognize and copy all text in the current image
BCycle backdrop
18Set annotation color; 7 is black and 8 is white
WheelScale selected layer, magnify the spotlight under the cursor, or change active tool size (Alt+wheel: rectangle corner radius or spotlight border); while just viewing a zoomed capture, scroll it like a document
Shift+wheelScroll a zoomed capture sideways (a wide stitch); never changes the zoom
Ctrl+wheel · middle-dragZoom about the cursor · pan by dragging
+ / - / 0 (also with Ctrl)Zoom in / out / fit
Hold Shift while draggingMake rectangles, ellipses, and spotlights 1:1; snap lines and arrows to 45°; while dragging a selected layer’s handle, keep a rectangle, redaction or spotlight’s aspect ratio (lines and arrows: 45°)
Hold Alt while draggingCenter rectangles, ellipses, and spotlights on the press point; add Shift for a centered square/circle
Nudge the selected layer 1 px; hold Shift for 10 px (a held key is one undo step). With nothing selected, pan a zoomed capture
Double-click textReopen text editing
DeleteDelete selected layer
Alt+DDuplicate selected layer (offset down-left, or away from a nearby edge); the copy becomes the selection
Ctrl+ZUndo
Ctrl+Shift+Z, Ctrl+YRedo
Ctrl+CCopy PNG only
Ctrl+SSave PNG only
EnterCopy and save
PPin the capture on screen and close the editor
EscReturn to Select; press again to close
Right-clickReturn to Select; cancel active drawing

Pinned captures

P renders the current capture, writes it to a pin-<pid>-<n>-<random>.png under the runtime snapshot directory, and launches the same omasnap executable in detached pin mode. Active pins stack from the bottom-right and can be dragged by the image background. The layer stays visible on every workspace without compositor window rules. It preserves the image aspect ratio, with a maximum width of one third of the screen and a maximum height of one half.

Pinning neither touches the clipboard nor writes to the screenshot directory; it is a fourth output alongside copy, save, and copy-and-save. P closes the editor and releases the single-instance lock immediately. Pins from separate captures accumulate as independent processes.

Hover the pin to reveal its controls:

Input on a pinAction
Edit buttonReopen the full-resolution PNG in Omasnap and replace the pin
Link buttonCopy the source file path
Copy button, Ctrl+CCopy the full-resolution PNG
Double-wide top-left drag handleDrag the PNG into a file-capable drop target
WheelResize within the screen caps, preserving aspect ratio
Close button, Esc, middle-clickClose

Image and path copying use wl-copy rather than QClipboard, so clipboard data remains available after the pin is closed. No font-based symbol set or compositor-specific window rule is required; the controls use the same vector icon renderer as the annotation toolbar.

Creation tools return to Select after one placement without selecting the new layer. In Select mode, arrows and lines show only their two endpoint handles; other layers show a selection boundary. The eight blue/white handles outside the image recrop its corners or edges.

Development and verification

make check

The smoke executable exercises region/window/fullscreen startup modes, capture selection, working-document persistence (source plus op-log JSON), annotation tools, undo/redo replay, vector movement and scaling, text editing, OCR, native-DPI output, endpoint-only line selection, external crop handles, and the native-pixel measurement readout on a scaled monitor.

.github/workflows/build-linux.yml runs the same make check build, interaction smoke, and available static-analysis checks in an Arch Linux container, stages the CMake installation, and uploads a versioned Linux artifact. A v* tag also attaches that artifact to the corresponding GitHub release.

Acknowledgements

The capture and annotation workflow is inspired by three excellent screenshot tools:

  • Shottr — fast region/window capture, OCR, and polished backdrops.
  • Satty — a focused, Wayland-native annotation workflow.
  • Flameshot — selection-first capture and an approachable annotation toolbar.

Thanks to their authors and contributors for establishing the interaction patterns that made this project possible. Omasnap is an independent implementation and is not affiliated with those projects.

Project history

This standalone repository was extracted with git filter-repo from the original Omarchy system-customization repository. The former omasnap/ directory was promoted to the repository root while retaining its relevant commit history.

The bundled Neucha font is distributed under the SIL Open Font License; its license is in assets/OFL.txt and is installed with the application.

tobi lutke (@tobi): Better annotating screenshot tool coming to Omarchy Quattro.

Similar Articles

BasedHardware/omi

GitHub Trending (daily)

Omi is an open-source AI second brain platform that captures screen and conversations, provides real-time transcription, summaries, and context-aware chat across desktop, mobile, and wearable devices. It has 300,000+ users and is fully open source with multi-platform support.