Skip to content
MMFoundationPublic

About

A native macOS capture tool: screenshots, recordings, annotation, pins and on-device OCR, built to cost nothing while it waits in the menu bar. Apple silicon, macOS 26+.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Repository files navigation

OhMyShot

A native macOS capture tool — screenshots, recordings, annotation, pins, and on-device OCR — built to cost nothing while it waits in the menu bar.

一个原生 macOS 截图工具:截图、录屏、标注、贴图和端侧 OCR,常驻菜单栏时几乎不耗电。

Status: not released yet macOS 26 or later on Apple silicon Swift 6, SwiftUI and AppKit License: GPL-3.0 Pull requests welcome

English | 简体中文

Why OhMyShot ·  Features ·  Power budget ·  Getting started ·  Contributing ·  Changelog

Note

Not released yet. There are no builds or version tags; build it from source for now, and ⭐ star or watch the repository to hear about the first release. It is developed and tested on macOS 27 beta on Apple silicon (a 6K ultrawide beside a built-in XDR display). It builds for macOS 26 but has not been run there.

Why OhMyShot

🪶 Idle means idle

In the menu bar it runs no timers, polls nothing, and holds no capture streams or event taps: 0 wakeups and 26 MB after launch. Every number is measured and published, misses included.

🔤 Text in pixels is data

Copy the text from any part of the screen, search your capture history by it (Chinese included), translate it in place, and read tables, formulas, and charts with optional on-device model packs.

🔒 Private by default

Everything is read on your Mac. There is no OhMyShot server: uploads go only to storage you own, and a cloud OCR model runs only with your own API key, when you turn it on.

🍎 Native, free, and open

Swift 6, SwiftUI, and AppKit, following macOS conventions down to permissions and VoiceOver. GPL-3.0, with no subscription and no paid upgrades.

Features

Feature What it does
📸 Screenshots Area, window (with or without its shadow, on a background), full display, the previous area, and a self-timer. Areas can cross displays, and the screen freezes while you choose. All-In-One sets up any of them from one bar.
🗂️ Quick Access and Capture History A card for each capture to copy, save, mark up, pin, upload, or drag out, and a history you can search by the text in the pictures.
✏️ Annotation An editor, or drawing straight on the frozen selection: arrows, shapes, text, a highlighter that snaps to text, counters, blur and pixelation (with redaction suggestions from the text it reads), crops, backgrounds, combined images, and project files you can open again.
🔤 Text from pixels Capture Text copies the text in an area; the Recognized Text window shows it beside the picture with tables, links, and codes, and translates it, also over the original. Optional model packs read Chinese a second time, formulas as LaTeX, and tables and charts.
📌 Pins, color, and measuring Always-on-top pictures, text, and colors; a screen color picker and a pixel ruler that snaps to edges.
🎬 Recording and Studio Screen, window, or area to MP4 or GIF, with system audio, microphone, camera, clicks, and keys. Studio edits a recording afterwards, with automatic zooms that follow the cursor. On macOS 27, with Replay on, the last 15 seconds can be saved at any time.
📜 Scrolling capture Scroll by hand or let Auto-scroll do it, into one long picture.
☁️ Sharing Uploads to your own S3-compatible, WebDAV, or custom HTTP storage; printing, email, and the Share menu.
⚙️ Automation CleanShot X–compatible URL commands under ohmyshot://, actions in Shortcuts and Spotlight, and a Raycast extension.
🌐 Languages English, Simplified and Traditional Chinese, Japanese, Spanish, and French.

OhMyShot also appears in other apps' Share menu (to mark up or pin a picture; switch it on in System Settings › General › Login Items & Extensions › Sharing) and in Finder's Open With for images.

Power budget

Every milestone is gated on measured numbers. The latest, on the Mac above with Debug builds:

Metric Target Measured
Idle CPU after launch (60 s average) 0.0% 0.06–0.09%, from macOS updating the menu bar; no timers of the app's own
Idle wakeups < 1 per second 0 ✅
Memory after launch < 30 MB 26 MB ✅
Memory after use, idle < 60 MB 57 MB after recording ✅; 68 MB after reading formulas and tables ❌
Shortcut → selection overlay p95 < 50 ms p95 9.8 ms ✅
Shortcut → frozen picture p95 < 150 ms p95 47.7 ms ✅
Text from a 1000 × 600 px area < 300 ms p50 187 ms ✅, p95 370 ms ❌
Recording 1080p at 60 fps < 15% CPU 15.7% ❌
App size, without model packs < 30 MB 37 MB (14 MB zipped) ❌

Model packs run in a helper process that exits when it is done, so they cost the app's own memory nothing. The full log, with methods, dates, and caveats, is in Docs/perf.md; measure your own Mac with Scripts/power-sample.sh and Scripts/latency.sh.

Getting started

Requirements

  • macOS 26 or later on Apple silicon
  • Xcode 26 or later, with its Metal Toolchain (the VLM pack's MLX kernels need it): xcodebuild -downloadComponent MetalToolchain
  • XcodeGen: brew install xcodegen

Build and run

git clone https://github.com/MMFoundation/OhMyShot.git
cd OhMyShot
Scripts/bootstrap.sh   # generate OhMyShot.xcodeproj from project.yml
Scripts/run.sh         # build the Debug app ("OhMyShot Dev") and launch it
Scripts/test.sh        # run both packages' unit tests (OhMyShotKit, OhMyShotVLM)

build.sh and run.sh regenerate the project when project.yml changes. Debug builds use their own bundle identifier (….ohmyshot.dev), URL scheme (ohmyshot-dev://), and default shortcuts (⌃⌥⌘ plus a digit), so they can run next to a release build without fighting over permissions or shortcuts.

Signing and Screen Recording permission

macOS ties the Screen Recording permission to the app's code signature, so an ad-hoc signed build looks like a new app after every rebuild and loses it. To keep it, copy Config/Signing.local.xcconfig.example to Config/Signing.local.xcconfig and fill in your Apple Development team (a free personal team works).

Tip

After you grant Screen Recording, relaunch the app: macOS applies the permission only to new processes. Scripts/reset-tcc.sh clears the Debug build's permissions when you want to start over.

Updates

Release builds check for updates with Sparkle about once a day (Settings › General › Updates), using signed appcasts attached to this repository's GitHub releases; Debug builds never check. How releases are made, signed, and notarized is in Docs/release.md.

Documentation

Document What it covers
Docs/automation.md URL commands, Shortcuts, Spotlight, and the Raycast extension
Docs/ocr.md How text recognition is layered, and its benchmark
Docs/capture-picker.md The magnifier at the pointer while you choose an area
Docs/measurement-snapping.md The pixel ruler's edge snapping
Docs/localization.md Adding or improving a translation
Docs/perf.md Every performance and power measurement
Docs/release.md Building, signing, and notarizing a release
PRODUCT.md and DESIGN.md What OhMyShot is for, and how it should look and feel

Contributing

Contributions are welcome, whether code, translations, bug reports, or measurements from a Mac other than ours.

  • Report a bug or ask for a feature in Issues. Include your macOS version, your displays, and the steps that lead to the problem.
  • Translate. You don't need Xcode: Docs/localization.md explains how.
  • Send a pull request. Run Scripts/test.sh before you push, and write commit messages as Conventional Commits (feat(ocr): …, fix(studio): …). Changes that could affect idle cost or latency should come with numbers from Scripts/power-sample.sh or Scripts/latency.sh. Read PRODUCT.md and DESIGN.md before larger changes.

Contributors

Contributors

Acknowledgments

OhMyShot is built with Sparkle, KeyboardShortcuts, MLX Swift, and Swift Numerics. Their notices are in App/Acknowledgments.md.

License

OhMyShot is free software, licensed under the GNU General Public License v3.0. Copyright © 2026 OhMyShot contributors.

About

A native macOS capture tool: screenshots, recordings, annotation, pins and on-device OCR, built to cost nothing while it waits in the menu bar. Apple silicon, macOS 26+.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages