An open-source native macOS screenshot and screen recording app. A CleanShot X alternative.
3,088
stars
1,206
commits
Swift
primary language
Sep 10, 2026
updated
Native macOS screenshots, recording, annotation, and editing from the menu bar.
Built with SwiftUI, AppKit, ScreenCaptureKit, Vision, and Sparkle.
🇺🇸 English • 🇻🇳 Tiếng Việt • 🇨🇳 ç®€ä½“ä¸æ–‡ • 🇯🇵 日本語
Features • Install • Raycast • Shortcuts • Development • Documentation • Community • Security • Contributing • Contributors • Acknowledgments
Application Capture, default A), including already open third-party menu-bar popovers that would normally close when capture begins (restored visually for selection and saved with transparent rounded corners), area capture with inline annotate (annotate before saving), scrolling capture with live stitched preview, OCR text extraction with Apple Vision or custom OpenAI-compatible endpoints and a native result notification, transparent object cutout capture with optional safe auto-crop, window shadow capture (macOS 14+), multi-format export (PNG/JPG/WebP), hide desktop icons/widgets, quick screenshot during recordingA), remove background with crop-aware auto-crop support, mockup backgrounds with 3D renderer, zoom/pan (pinch + keyboard), drag-to-app with optional keep-editing and editor reactivation behavior, configurable tool/action shortcuts~/.config/snapzy/config.tomlRequires macOS 13.0 or later.
brew install --cask snapzy
# Install a specific version
curl -fsSL https://raw.githubusercontent.com/duongductrong/Snapzy/v1.31.0/install.sh | bash
Snapzy-v<version>.dmgSnapzy.app to /ApplicationsSnapzy is signed and notarized by Apple. macOS will open it without any extra steps.
To completely remove Snapzy, reset all permissions, and clean up app data:
curl -fsSL https://raw.githubusercontent.com/duongductrong/Snapzy/master/uninstall.sh | bash
Or if you cloned the repo:
./uninstall.sh
This will remove the app from /Applications, delete preferences and caches, and reset TCC permissions (Screen Recording, Microphone, Accessibility). You may need to log out or reboot for permission changes to fully take effect.
If you only want to reset TCC permissions (Screen Recording, Microphone, Accessibility) without uninstalling the app:
curl -fsSL https://raw.githubusercontent.com/duongductrong/Snapzy/master/reset-permissions.sh | bash
Or if you cloned the repo:
./reset-permissions.sh
Control Snapzy directly from Raycast using the official extension:
| Action | Shortcut |
|---|---|
| Fullscreen screenshot | ⇧⌘3 |
| Area screenshot | ⇧⌘4 |
↳ Toggle manual/app window mode (Application Capture) | A |
| Repeat last area screenshot | ⌃⌘⇧4 |
| Area screenshot + inline annotate | ⇧⌘7 |
| Scrolling screenshot | ⇧⌘6 |
| Screen recording (start/stop toggle) | ⇧⌘5 |
Pause/Resume recording (optional, recommended ⌘⇧Space) | unset |
| OCR text capture | ⇧⌘2 |
| Object cutout capture | ⇧⌘1 |
| Smart element capture | ⌥⇧4 |
| Open Annotate | ⇧⌘A |
| Open Video Editor | ⇧⌘E |
| Open Cloud Uploads | ⇧⌘L |
| Show shortcuts list | ⇧⌘K |
Hover a Quick Access card, then press the key. Active only while the pointer is over a card.
| Action | Shortcut |
|---|---|
| Copy | ⌘C |
| Save / Open | ⌘S |
| Edit | ⌘E |
| Upload to cloud | ⌘U |
| Pin to screen | ⌘P |
| Delete | ⌘⌫ |
| Close | ⌘W |
Snapzy registers the snapzy:// URL scheme so launchers and automation tools (such as the Raycast Extension, Alfred, or custom scripts) can trigger capture actions. This integration can be toggled on or off under Settings -> Advanced -> URL Scheme integration.
| Action | URL |
|---|---|
| Fullscreen screenshot | snapzy://capture/fullscreen |
| Area screenshot | snapzy://capture/area |
| Repeat area screenshot | snapzy://capture/repeat-area |
| Application window | snapzy://capture/application |
| Active window | snapzy://capture/active-window |
| Area annotate | snapzy://capture/area-annotate |
| Scrolling screenshot | snapzy://capture/scrolling |
| OCR text capture | snapzy://capture/ocr |
| Smart element capture | snapzy://capture/smart-element |
| Object cutout capture | snapzy://capture/object-cutout |
| Screen recording | snapzy://record/screen |
| Application recording | snapzy://record/application |
| Open Annotate | snapzy://open/annotate |
| Combine images | snapzy://open/combine |
| Open Video Editor | snapzy://open/video-editor |
| Open Cloud Uploads | snapzy://open/cloud-uploads |
| Open Capture History | snapzy://open/history |
| Show shortcuts list | snapzy://show/shortcuts |
| Open Settings | snapzy://settings |
| Open Settings tab | snapzy://settings?tab=annotate |
snapzy://open/combine opens the image picker. Automation tools can skip the
picker by passing two or more URL-encoded local paths as repeated file
parameters:
open 'snapzy://open/combine?file=/tmp/first.png&file=/tmp/second.png'
For local setup, source builds, and first-time development workflow, start with docs/DEVELOPMENT.md.
If you need archive, export, or DMG packaging commands, see docs/BUILD.md. If you want the contribution workflow, see CONTRIBUTING.md.
Benchmark date: April 19, 2026. Current OCR numbers come from scripts/run-ocr-readme-benchmark.sh on a clean synthetic wrapped UI/article-text corpus with 12 samples / language across 10 supported languages. Character accuracy is the primary signal, exact match is intentionally strict, and no-output on this corpus is 0% for all languages below.
| Language | Character Accuracy | Exact Match |
|---|---|---|
| English | 100.0% | 100.0% |
| Vietnamese | 100.0% | 100.0% |
| Simplified Chinese | 99.3% | 75.0% |
| Traditional Chinese | 99.0% | 66.7% |
| Spanish | 99.9% | 91.7% |
| Japanese | 99.4% | 66.7% |
| Korean | 99.7% | 83.3% |
| Russian | 100.0% | 100.0% |
| French | 99.3% | 33.3% |
| German | 99.8% | 75.0% |
Real-world screenshots can score lower, especially with emoji, low-contrast footers, unusual punctuation, gradients, blur, or decorative fonts.
Snapzy is not sandboxed — it runs with your user account's privileges. It ships with the macOS Hardened Runtime enabled, is Developer ID signed and notarized by Apple, and declares a minimal set of entitlements; library validation stays on, so the app can only load code signed by Snapzy or by Apple. Network requests are limited to Sparkle update checks, local loopback OAuth callback redirection, user-initiated cloud uploads to your own cloud storage (AWS S3, Cloudflare R2, or Google Drive), and optional user-initiated OCR model downloads from HTTPS/Hugging Face sources the user explicitly defines. Snapzy bundles no OCR models and its model catalog ships empty, so no model is referenced or fetched unless you add one. Model manifests are validated locally and importing metadata performs no download. The default built-in OCR engine runs entirely on-device; if you explicitly add a custom OCR endpoint in Settings, OCR requests (including the captured image) go to that endpoint. Cloud credentials and OAuth tokens are stored exclusively in the macOS Keychain, can be further protected with an optional password (SHA-256 hashed, never stored in plaintext), and can only be transferred via a manual encrypted export/import flow protected by a user-supplied archive passphrase. Custom OCR endpoint API keys are likewise stored only in the macOS Keychain and are never included in config or credential exports. Snapzy collects no telemetry.
To report a vulnerability, please use a GitHub Security Advisory or contact the maintainer privately. See SECURITY.md for full details.
Contributions are welcome. Read CONTRIBUTING.md before opening a pull request.
Thanks to all the people who contribute to Snapzy!
Snapzy is inspired by CleanShot X, an advanced screenshot and screen recording application for macOS.
BSD 3-Clause License. See LICENSE.
Swift
97.7%
Shell
2.1%
An open-source native macOS screenshot and screen recording app. A CleanShot X alternative.
3,088
stars
1,206
commits
Swift
primary language
Sep 10, 2026
updated
Native macOS screenshots, recording, annotation, and editing from the menu bar.
Built with SwiftUI, AppKit, ScreenCaptureKit, Vision, and Sparkle.
🇺🇸 English • 🇻🇳 Tiếng Việt • 🇨🇳 ç®€ä½“ä¸æ–‡ • 🇯🇵 日本語
Features • Install • Raycast • Shortcuts • Development • Documentation • Community • Security • Contributing • Contributors • Acknowledgments
Application Capture, default A), including already open third-party menu-bar popovers that would normally close when capture begins (restored visually for selection and saved with transparent rounded corners), area capture with inline annotate (annotate before saving), scrolling capture with live stitched preview, OCR text extraction with Apple Vision or custom OpenAI-compatible endpoints and a native result notification, transparent object cutout capture with optional safe auto-crop, window shadow capture (macOS 14+), multi-format export (PNG/JPG/WebP), hide desktop icons/widgets, quick screenshot during recordingA), remove background with crop-aware auto-crop support, mockup backgrounds with 3D renderer, zoom/pan (pinch + keyboard), drag-to-app with optional keep-editing and editor reactivation behavior, configurable tool/action shortcuts~/.config/snapzy/config.tomlRequires macOS 13.0 or later.
brew install --cask snapzy
# Install a specific version
curl -fsSL https://raw.githubusercontent.com/duongductrong/Snapzy/v1.31.0/install.sh | bash
Snapzy-v<version>.dmgSnapzy.app to /ApplicationsSnapzy is signed and notarized by Apple. macOS will open it without any extra steps.
To completely remove Snapzy, reset all permissions, and clean up app data:
curl -fsSL https://raw.githubusercontent.com/duongductrong/Snapzy/master/uninstall.sh | bash
Or if you cloned the repo:
./uninstall.sh
This will remove the app from /Applications, delete preferences and caches, and reset TCC permissions (Screen Recording, Microphone, Accessibility). You may need to log out or reboot for permission changes to fully take effect.
If you only want to reset TCC permissions (Screen Recording, Microphone, Accessibility) without uninstalling the app:
curl -fsSL https://raw.githubusercontent.com/duongductrong/Snapzy/master/reset-permissions.sh | bash
Or if you cloned the repo:
./reset-permissions.sh
Control Snapzy directly from Raycast using the official extension:
| Action | Shortcut |
|---|---|
| Fullscreen screenshot | ⇧⌘3 |
| Area screenshot | ⇧⌘4 |
↳ Toggle manual/app window mode (Application Capture) | A |
| Repeat last area screenshot | ⌃⌘⇧4 |
| Area screenshot + inline annotate | ⇧⌘7 |
| Scrolling screenshot | ⇧⌘6 |
| Screen recording (start/stop toggle) | ⇧⌘5 |
Pause/Resume recording (optional, recommended ⌘⇧Space) | unset |
| OCR text capture | ⇧⌘2 |
| Object cutout capture | ⇧⌘1 |
| Smart element capture | ⌥⇧4 |
| Open Annotate | ⇧⌘A |
| Open Video Editor | ⇧⌘E |
| Open Cloud Uploads | ⇧⌘L |
| Show shortcuts list | ⇧⌘K |
Hover a Quick Access card, then press the key. Active only while the pointer is over a card.
| Action | Shortcut |
|---|---|
| Copy | ⌘C |
| Save / Open | ⌘S |
| Edit | ⌘E |
| Upload to cloud | ⌘U |
| Pin to screen | ⌘P |
| Delete | ⌘⌫ |
| Close | ⌘W |
Snapzy registers the snapzy:// URL scheme so launchers and automation tools (such as the Raycast Extension, Alfred, or custom scripts) can trigger capture actions. This integration can be toggled on or off under Settings -> Advanced -> URL Scheme integration.
| Action | URL |
|---|---|
| Fullscreen screenshot | snapzy://capture/fullscreen |
| Area screenshot | snapzy://capture/area |
| Repeat area screenshot | snapzy://capture/repeat-area |
| Application window | snapzy://capture/application |
| Active window | snapzy://capture/active-window |
| Area annotate | snapzy://capture/area-annotate |
| Scrolling screenshot | snapzy://capture/scrolling |
| OCR text capture | snapzy://capture/ocr |
| Smart element capture | snapzy://capture/smart-element |
| Object cutout capture | snapzy://capture/object-cutout |
| Screen recording | snapzy://record/screen |
| Application recording | snapzy://record/application |
| Open Annotate | snapzy://open/annotate |
| Combine images | snapzy://open/combine |
| Open Video Editor | snapzy://open/video-editor |
| Open Cloud Uploads | snapzy://open/cloud-uploads |
| Open Capture History | snapzy://open/history |
| Show shortcuts list | snapzy://show/shortcuts |
| Open Settings | snapzy://settings |
| Open Settings tab | snapzy://settings?tab=annotate |
snapzy://open/combine opens the image picker. Automation tools can skip the
picker by passing two or more URL-encoded local paths as repeated file
parameters:
open 'snapzy://open/combine?file=/tmp/first.png&file=/tmp/second.png'
For local setup, source builds, and first-time development workflow, start with docs/DEVELOPMENT.md.
If you need archive, export, or DMG packaging commands, see docs/BUILD.md. If you want the contribution workflow, see CONTRIBUTING.md.
Benchmark date: April 19, 2026. Current OCR numbers come from scripts/run-ocr-readme-benchmark.sh on a clean synthetic wrapped UI/article-text corpus with 12 samples / language across 10 supported languages. Character accuracy is the primary signal, exact match is intentionally strict, and no-output on this corpus is 0% for all languages below.
| Language | Character Accuracy | Exact Match |
|---|---|---|
| English | 100.0% | 100.0% |
| Vietnamese | 100.0% | 100.0% |
| Simplified Chinese | 99.3% | 75.0% |
| Traditional Chinese | 99.0% | 66.7% |
| Spanish | 99.9% | 91.7% |
| Japanese | 99.4% | 66.7% |
| Korean | 99.7% | 83.3% |
| Russian | 100.0% | 100.0% |
| French | 99.3% | 33.3% |
| German | 99.8% | 75.0% |
Real-world screenshots can score lower, especially with emoji, low-contrast footers, unusual punctuation, gradients, blur, or decorative fonts.
Snapzy is not sandboxed — it runs with your user account's privileges. It ships with the macOS Hardened Runtime enabled, is Developer ID signed and notarized by Apple, and declares a minimal set of entitlements; library validation stays on, so the app can only load code signed by Snapzy or by Apple. Network requests are limited to Sparkle update checks, local loopback OAuth callback redirection, user-initiated cloud uploads to your own cloud storage (AWS S3, Cloudflare R2, or Google Drive), and optional user-initiated OCR model downloads from HTTPS/Hugging Face sources the user explicitly defines. Snapzy bundles no OCR models and its model catalog ships empty, so no model is referenced or fetched unless you add one. Model manifests are validated locally and importing metadata performs no download. The default built-in OCR engine runs entirely on-device; if you explicitly add a custom OCR endpoint in Settings, OCR requests (including the captured image) go to that endpoint. Cloud credentials and OAuth tokens are stored exclusively in the macOS Keychain, can be further protected with an optional password (SHA-256 hashed, never stored in plaintext), and can only be transferred via a manual encrypted export/import flow protected by a user-supplied archive passphrase. Custom OCR endpoint API keys are likewise stored only in the macOS Keychain and are never included in config or credential exports. Snapzy collects no telemetry.
To report a vulnerability, please use a GitHub Security Advisory or contact the maintainer privately. See SECURITY.md for full details.
Contributions are welcome. Read CONTRIBUTING.md before opening a pull request.
Thanks to all the people who contribute to Snapzy!
Snapzy is inspired by CleanShot X, an advanced screenshot and screen recording application for macOS.
BSD 3-Clause License. See LICENSE.
Swift
97.7%
Shell
2.1%