Text Shot is a free, open-source macOS OCR app that lets you select any area of your screen, extract its text on-device, and instantly copy it to your clipboard. Use it to copy text from images, videos, PDFs, and other non-selectable content without uploading screenshots or creating an account.
- Keyboard-first macOS users
- People who extract text from videos, images, or on-screen content
- Users who prefer local-first utilities
- Fully local OCR processing
- Smart line formatting
- Lightweight native macOS experience
- No login or account required
- Optional native app updates in signed release builds
- Fast capture-to-text workflow
- macOS 13 or later
- Xcode Command Line Tools (
swift,codesign,hdiutil,install_name_tool,otool) - Node.js and npm
Download the DMG from Releases, open it, and move Text Shot into your Applications folder. Launch the app, grant Screen Recording permission, set your preferred shortcut, and start capturing text.
- Use your keyboard shortcut to start a quick screen selection.
- Select the area that contains the text you want.
- Text Shot extracts the text and copies it to your clipboard.
- Paste the result anywhere immediately.
Default shortcut:
Cmd + Shift + 2
- Text Shot captures the selected screen region.
- It runs on-device Vision OCR and reconstructs the layout with line grouping.
- It places the result on your clipboard without uploading screenshot content to an external OCR service.
Text Shot is designed to stay local.
- OCR runs on the Mac itself
- Screenshot content is not uploaded for recognition
- The app does not require an account or login
- Screen Recording permission is needed only so the app can capture the selected region
For developers who want to build Text Shot locally:
npm install
npm run build
npm start
npm testTo create a distributable DMG:
bash scripts/release-native.sh --set-version <x.y.z>Make sure the Sparkle signing key is available either in the login Keychain or via SPARKLE_PRIVATE_ED_KEY before publishing dist-appcast/.
Typecheck:
npm run typecheckClean:
npm run cleanSee docs/TESTING.md for the full manual regression checklist.
Generated build and release outputs live under .generated/, dist-appcast/, and release/.
- If Screen Recording permission is missing, open
System Settings > Privacy & Security > Screen Recording, enable Text Shot, and fully quit and relaunch the app. - If capture still fails after permission is granted, remove the permission entry and grant it again when macOS prompts.
- If the hotkey does not open the capture overlay, confirm the shortcut shown in
Settings..., re-record it if needed, then relaunch the app. - If the settings window does not appear, open
Settings...from the menu bar item and relaunch from/Applicationsor the freshly built app bundle.
Text Shot is a native Swift menu bar app.
native/settings-app- main app runtime, including menu bar item, hotkey handling, capture flow, OCR, permissions, settings UI, confirmation toast, and Sparkle update integrationscripts- build, test, typecheck, clean, and release helper scripts for the SwiftPM native app bundlebuild- entitlements and export configuration for packaging and signingassets- app icon and tray assets
Contributions are welcome.
- Keep commits focused and descriptive.
- Run
npm run typecheckandnpm testbefore opening a pull request. - If the change affects packaging or user-facing behavior, also run the relevant manual checks in
docs/TESTING.md. - Every DMG release must bump the version, keep
package.jsonaligned, and leave only the latest DMG and checksum inrelease/.
- Uses KeyboardShortcuts for global hotkey recording
- Uses Sparkle for native macOS updates
- See ThirdPartyNotices.txt for bundled third-party notices
MIT License. See LICENSE for full text.
