Skip to content
← Projects
2026 ·Released v0.1.2 · GitHub Releases (not yet notarized)

SnapKeep

A native macOS capture tool — region/window/full-screen screenshots, screen recording, annotation, and on-device OCR — that never touches the network.

Swift 6SwiftUIScreenCaptureKitVision
Visit project

The problem

Privacy-conscious Mac users and creators want fast capture, annotation, and short screen recordings without sending anything to the cloud. SnapKeep does it all on-device: no accounts, no telemetry, no cost — a menubar utility that captures, annotates, and keeps.

Challenges

Making screen-recording permission painless

macOS Screen Recording permission is notoriously awkward — it typically forces users to quit and relaunch the app before capture works. SnapKeep triggers the system permission prompt at the right moment on launch and then re-checks authorization every time it comes back to the foreground, so returning from System Settings picks up the newly-granted permission automatically, with no manual restart.

Low-latency recording and real-time encoding

Screen frames arrive continuously on a background thread and must be encoded to video without ever blocking the UI or dropping behind real time. The recording engine runs entirely off the main thread on its own synchronized queue and deals with the real constraints of hardware H.264 — dimensions rounded to even numbers, a real-time encoding budget, a bounded backlog, and starting the video timeline from the first captured frame before audio is mixed in.

One annotation model, identical on screen and export

Every markup tool — pen, marker, arrow, shapes, text, numbered steps, pixelate — is described by a single data model with one shared drawing routine used both for the live editing canvas and the final exported image, guaranteeing what you see is exactly what you save. Pixelate redaction carefully maps between on-screen coordinates and the image's true pixel grid so a redacted region can be cropped, downscaled, and re-enlarged into a solid mosaic that can't be reversed.

Fully offline OCR and a menubar-only lifecycle

Copy-Text extracts text from any capture using Apple's on-device text recognition — no image ever leaves the machine — and reorders the results to match natural reading order. The app lives entirely in the menu bar with no Dock icon, allows only one running instance, and registers truly system-wide keyboard shortcuts so capture fires no matter which app currently has focus.

Implementation

Concurrency-safe capture pipeline

Capture is isolated behind Swift's strict-concurrency model so it can run off the main thread safely. It supports full-display capture that follows the active screen, single-window capture that stays with a window regardless of what's in front of it, and region capture that automatically excludes SnapKeep's own overlay windows from the shot.

Video and GIF export

Recordings are written as H.264 MP4 with optional AAC audio, and any finished clip can be re-exported as a looping animated GIF by sampling its frames. A post-recording studio adds preview, trim, automatic silence detection, and on-device speech-to-text captioning.

Database-free local storage

Captures are saved as timestamped PNG/JPEG files in the user's Pictures folder and copied to the clipboard immediately. The history view is simply the newest files read back from that folder — there is no database and no network, which keeps the "everything stays on your Mac" promise honest and the storage format completely transparent.

Reproducible builds and one-click distribution

The Xcode project is generated from a declarative spec so it can be recreated cleanly on any machine (Swift 6, hardened runtime, Apple silicon, macOS 14+). Pushing a version tag runs a CI workflow that builds a signed disk image and publishes a GitHub Release. The build isn't Apple-notarized yet, so the docs walk users through clearing the quarantine flag on first launch.

Why this stack

Swift 6
Its compile-time concurrency checking makes the off-main-thread capture and recording pipeline provably data-race-free rather than hopefully so.
SwiftUI + AppKit
SwiftUI drives the menu-bar UI and reactive state; AppKit and Core Graphics handle the low-level window and pixel work SwiftUI alone can't reach.
ScreenCaptureKit
Apple's modern capture framework, providing both high-quality stills and live video with the ability to exclude specific windows or apps from a capture.
Vision
On-device text recognition powers Copy-Text with zero network dependency, matching the fully-offline promise.
AVFoundation
Handles the video encoding, audio, and frame sampling behind MP4 recording and GIF export.
Global hotkeys
System-level shortcut registration is the only reliable way to trigger capture regardless of which application is focused.

What it does

  • Region, window, full-screen, and recapture-last capture with freeze-frame overlay, live dimensions, and a magnifier loupe
  • Screen recording to H.264 MP4 or animated GIF, with a post-recording Studio (trim, captions, silence detection)
  • Annotation editor: pen, marker, arrow, shapes, text, numbered steps, pixelate/redact, undo/redo
  • On-device Vision OCR, Beautify (gradient backdrop, padding, shadow), and pin-to-desktop
  • Menubar history grid — click to copy, drag out, pin/reveal/share/delete — plus native sharing
  • 100% local: no network calls, no telemetry, no accounts