Summary
Capture is a macOS menu bar app for people who need to read, translate, or ask questions about content in other apps. Users can select a screen area, extract text locally or with AI, translate it, chat about it, and approve AI-assisted clicks and typing. It also reads text exposed by the active document without taking a screenshot or making an AI request.
Platforms
- macOS
User roles
- Local user: Capture screen regions, read document text, extract and translate text, chat about selections, approve or deny agent actions, and manage preferences. No separate administrator or account roles are implemented.
Features
- Select a screen region using a configurable global shortcut or menu command, with multi-display support and cancellation. — Files: Sources/Capture/CaptureCoordinator.swift, Sources/Capture/Capture/SelectionOverlay.swift, Sources/Capture/Capture/ScreenCapturer.swift
- Extract text from a selection using on-device recognition or an OpenRouter vision model. — Files: Sources/Capture/Features/TextExtractor.swift, Sources/Capture/UI/ResultPanel.swift
- Translate selected content into a chosen language and display the result over the original text or in an editable panel. — Files: Sources/Capture/Features/InPlaceTranslator.swift, Sources/Capture/Features/Translator.swift, Sources/Capture/UI/TranslationOverlay.swift
- Copy original or translated text and open overlay translations as editable text. — Files: Sources/Capture/UI/TranslationOverlay.swift, Sources/Capture/UI/ResultPanel.swift
- Chat about a captured selection with streaming replies, screenshot previews, recapture, retry, cancellation, and conversation reset. — Files: Sources/Capture/Chat/ChatPanel.swift, Sources/Capture/Chat/ChatSession.swift
- Review and approve or deny AI-requested clicks, typing, key presses, scrolling, and screenshot updates. — Files: Sources/Capture/Chat/ChatSession.swift, Sources/Capture/Agent/AgentTools.swift, Sources/Capture/Agent/InputSynthesizer.swift
- Read active document text locally, including available PDF text layers, with partial-read notices and an area-capture fallback. — Files: Sources/Capture/Features/DocumentTextController.swift, Sources/Capture/Features/DocumentTextReader.swift, Sources/Capture/UI/ResultPanel.swift
- Customize capture and document-reading shortcuts, with duplicate-shortcut rejection and registration error feedback. — Files: Sources/Capture/Settings/SettingsView.swift, Sources/Capture/Hotkey/HotkeyManager.swift, Sources/Capture/AppDelegate.swift
- Browse image-capable AI models with pricing, search the catalog, refresh it, or enter a model ID manually. — Files: Sources/Capture/Settings/SettingsView.swift, Sources/Capture/LLM/ModelCatalog.swift
- Save and test an OpenRouter API key, retry failed Keychain access, or explicitly confirm replacement of an inaccessible saved key. — Files: Sources/Capture/Settings/SettingsView.swift, Sources/Capture/Settings/Keychain.swift, Sources/Capture/LLM/OpenRouterClient.swift
- Configure automatic copying, translation display, image size, action approvals, and launch at login. — Files: Sources/Capture/Settings/SettingsView.swift, Sources/Capture/Settings/AppSettings.swift
Main user flows
- Extract screen text: Invoke Capture Area → drag over content → choose Image → Text → review or edit the result → copy it or open a chat about it.
- Translate a selection: Capture an area → choose the target language → select Translate → review the overlay or result panel → copy the translation or original text.
- Chat about screen content: Capture an area → select AI Chat → enter a question → read the streaming response → optionally recapture, retry, stop, or start a new chat.
- Approve agent assistance: Ask the chat agent to interact with the selected content → review a proposed action and any target marker → choose Allow, Allow all, or Deny → review the subsequent screenshot and response.
- Read document text: Focus an external document window → invoke Read Active Document Text → review available local text → copy or edit it → use Capture an area if the document exposes no readable text.
- Recover saved-key access: Open Settings after a Keychain error → retry access or enter a replacement key → explicitly confirm replacement if needed → select Test → retry the AI action.
Integrations and external services
- OpenRouter: AI chat, image-to-text, translation, model discovery, and API-key checks.
- macOS screen capture: Screen Recording permission and display capture.
- macOS text recognition: On-device OCR without an AI request.
- macOS Accessibility: Reading exposed document text and performing approved input actions.
- macOS PDF support: Reading text layers from accessible local PDF files.
- macOS Keychain: Persistent storage of the OpenRouter API key.
- macOS clipboard and login items: Copying results and optional launch at login.
Known limitations
- Supports macOS 14 or later only.
- Each screen selection is confined to one display and must be at least 5 × 5 points.
- AI features require network access, an accessible API key, and a compatible model available through OpenRouter.
- AI actions send selection content and conversation context through OpenRouter and its model providers.
- Screen capture requires Screen Recording permission; document reading and synthesized input require Accessibility permission.
- Document reading depends on text exposed by the source app. Scanned PDFs without a text layer require image-to-text.
- Accessibility document reads have time and traversal limits; partial results are labelled and are not automatically copied.
- Agent execution is limited to 25 tool steps per user message.
- Chat history is session-based; persistent conversation history is not implemented.
- Keychain access can fail because of macOS authentication or app-identity changes and may require user intervention.
- Local builds target the host architecture. The build script does not produce a universal app, installer, or notarized distribution.
- End-to-end behavior is not verified by this code review; successful live chat after the Keychain recovery changes remains unverified.
How to install
Installation document found: yes
Instructions are provided in README.md, CONTRIBUTING.md, docs/DEVELOPMENT.md, and docs/RELEASING.md. No INSTALL.md, environment example file, Docker Compose configuration, or package-manager script manifest was found.
Prerequisites
macOS 14 or later. Xcode 15.3 or later, or a compatible Swift 5.10+ toolchain and macOS SDK. Git for obtaining the source. macOS signing tools, provided with the development tools. An OpenRouter account and API key for AI features only. Screen Recording permission for area capture. Accessibility permission for document reading and agent input.
Install
Obtain the source and enter the project directory. No third-party dependency installation is required.
git clone https://github.com/searchrome/capture.git
cd capture
Configure
- CODESIGN_IDENTITY (optional): Selects the signing identity used when assembling the app; otherwise the script selects an available Apple Development identity or uses ad-hoc signing.
Enter the OpenRouter API key in the app’s Settings and use Test. The key is stored in Keychain, not an environment file. Select the OCR engine, models, target language, and approval preferences in Settings.
Grant Screen Recording and Accessibility permissions in System Settings when needed. Keep the app location and signing identity consistent between builds.
Build
Check compilation, then assemble and sign the release app at build/Capture.app.
swift build
scripts/build-app.sh release
Run
For development, the documented helper stops any running Capture instance, builds a debug app, and launches it.
scripts/run.sh
Alternatively, launch the app bundle already built in the previous step.
open build/Capture.app
Capture appears in the menu bar and has no Dock icon.
Port
Unknown