Native macOS utility for extracting text from anywhere on the screen.
Tagline: Instant screen-to-text for macOS.
textgrab_vid.mp4
- Press the global TextGrab shortcut (default:
⌘⇧2) - Select a region of the screen
- TextGrab captures that region
- Apple Vision performs local OCR
- Recognized text is copied to the clipboard
Shortcut → Select → Capture → OCR → Clipboard
- Global shortcut — Configurable system-wide hotkey for instant capture
- Saved area capture — Secondary shortcut (
⌘⌥2by default) to re-capture the last selected region without re-selecting - Multi-monitor support — Works across all connected displays
- Three extraction modes:
- Text — General purpose text extraction with language correction (Fast or Accurate, Fast by default)
- Code — Optimized for code snippets: rebuilds indentation from layout, joins OCR-split punctuation, always uses Accurate recognition
- Table — Extracts tabular data as GitHub-flavored markdown: space-aligned and pipe-delimited columns, wrapped-cell and hyphen rejoining, always uses Accurate recognition
- Smart recognition policy — Text mode is user-configurable (Fast/Accurate); Code and Table always run Accurate automatically since Fast misses isolated digits and small cells
- OCR robustness — Auto-retry chain for tricky captures: Accurate retry and image inversion for white text on dark backgrounds (dark-mode IDEs, dark theme apps)
- Pipeline timeouts — Capture, OCR, and AI steps are race-guarded so a hung system call can never leave the app stuck
- Multi-language OCR — Add custom languages (e.g.,
fr-FR,ja-JP,zh-Hans)
- Clipboard history — Optional history with configurable max items (10–200) that survives app relaunches (stored locally, bounded, wiped when disabled)
- One-click recopy — Click any history item to copy it again
- Rich-text tables — Markdown tables are also placed on the clipboard as HTML so pasting into Notes/Pages/Word preserves the table
- Speak captured text — Built-in TTS with play/stop controls in the menu bar
- On-device correction — Uses Apple Intelligence to fix OCR errors before copying (runs entirely on-device, no cloud)
- Summarize — Generate a concise summary of captured text with one click
- Compact — Create a condensed version preserving key information
- Privacy-first — All processing happens locally; no data leaves your Mac
- Polished popover with material cards, a prominent Capture button, and hover highlights
- Custom extraction mode selector (Text/Code/Table) with live switching
- Real-time processing status and inline error reporting
- Selectable last-capture preview, window nudged away from the screen edge
- GitHub Releases based — Checks the latest release once a day on launch (opt-out toggle)
- Check Now — Manual check in Settings with live status and semantic version comparison
- Download & install — Downloads the DMG and opens it for drag-to-install; no signing infrastructure required
- Update notifications — Notifies when a newer version is available
- 5 languages — English (source), Hindi (हिन्दी), French (Français), German (Deutsch), Spanish (Español)
- The UI follows the system language automatically via String Catalogs
- 100% local processing — No data sent to external servers
- Permission management — Built-in UI for Screen Recording
- Relaunch helper — One-click app restart after granting permissions (spawns a fresh instance)
- General — Shortcuts, notifications, history
- OCR — Mode, recognition level, language correction, Apple Intelligence, languages
- Permissions — Grant/check Screen Recording
- Advanced — Updates, version info, user guide, links to source/privacy
- Native Swift/macOS implementation
- Fast screen-to-text workflow
- Local OCR; no cloud service required for the core path
- Menu-bar-first UX
- Multi-monitor support
- Minimal external dependencies
- Strong privacy defaults
- Language: Swift 5.9+
- UI: SwiftUI + AppKit
- Frameworks: Vision, ScreenCaptureKit, CoreGraphics, CoreImage, Foundation, Carbon (for global shortcuts), UserNotifications, AVFoundation, ServiceManagement, FoundationModels (Apple Intelligence, macOS 26+)
- Architecture: MVVM with
@ObservableObject/@StateObject - Testing: XCTest (unit), XCUITest (UI)
- External dependencies: None
# Debug build
xcodebuild -project TextGrab.xcodeproj -scheme TextGrab -configuration Debug build
# Release archive + DMG (outputs build/TextGrab-1.2.0.dmg)
./scripts/build-release.sh
# Run tests (12 unit + 2 UI)
xcodebuild -project TextGrab.xcodeproj -scheme TextGrab -configuration Debug testSince TextGrab is open-source and not notarized, macOS will block it on first run.
Option 1 (Easiest):
Right-click TextGrab.app → Select "Open" → Click "Open"
Option 2: Build from source — ./scripts/build-release.sh
Option 3 (Terminal):
xattr -d com.apple.quarantine /Applications/TextGrab.appLocally-built DMGs use ad-hoc signing. Each build gets a unique signature, so macOS treats updates as new apps and requires re-granting Screen Recording permission.
Workaround: In System Settings → Privacy & Security → Screen Recording, toggle TextGrab off then on after updating.
MIT — see LICENSE
See SECURITY.md for vulnerability reporting.