Skip to content

PangMo5/SwiftyCrow

Repository files navigation

SwiftyCrow

Latest release Download macOS 26+ License: MPL-2.0

On-screen translator for macOS, fully on-device. Captures any region of the screen with ScreenCaptureKit, recognizes text with Vision, and translates with the Apple Translation framework — no cloud APIs, no keys, no quotas.

SwiftyCrow demo

Features

  • Lives in the menu bar — no Dock icon; open the popover from the menu bar item, ⌘, for Settings
  • Region capture — drag to select any part of the screen (or press Space to highlight and click a whole window, like the macOS screenshot tool); it's translated and shown in a floating preview with each line blurred behind its translation. Save the image, copy it, or copy the original / translated text
  • Live overlay — pick a target the same way (drag a region, or Space to click a window) and an overlay snaps onto it and keeps translating as the content changes. It always lets clicks and scrolling pass through to the app underneath; its built-in LIVE handle pauses/resumes and the × closes it. Show the translation in place over the source, or in a separate window while the overlay stays a thin region frame
  • Reads the layout — recognition follows the document structure: vertical (top-to-bottom) Japanese/Chinese and multi-column text are read in reading order and the translation is laid out to match — vertical text stays vertical, in place over the original
  • Instant re-captures — translating the same screen again is cached
  • Languages from your Mac — source/target lists are the languages installed on your system; pick the pair that matches the text, or set the source to Auto to detect it per line (handy for mixed-language screens)
  • Customizable shortcuts — capture, live overlay, pause/resume Live, display mode (In-place / Window), and the save/copy keys, all in Settings → Shortcuts
  • Launch at login — start SwiftyCrow automatically when you log in (Settings → General)
  • Editable config file — a plain-text file you can hand-edit, kept in sync with the in-app Settings

Install

Requires macOS 26+.

Homebrew (recommended):

brew install --cask PangMo5/tap/swiftycrow

Direct download: grab the latest .dmg from the Releases page, open it, and drag the app to Applications.

On first launch, grant Screen Recording permission in System Settings → Privacy & Security, then relaunch the app. The app keeps itself up to date afterward.

Usage

  1. Pick the Source and Target languages in Settings (⌘,).
  2. Capture a region: trigger Capture Region (the popover button or your hotkey), then drag over the text — or press Space to highlight and click a whole window. A floating preview window shows the translation over the screenshot — ⌘S save, ⌘C copy image, ⌘O copy original, ⌘T copy translation, Esc to close.
  3. Or use the live overlay: trigger Live overlay… (menu bar or hotkey), then drag a region — or press Space to click a window — and an overlay snaps onto it and starts translating live. Use the LIVE handle to pause/resume, ⌘C to copy the joined translation, and × to close.

All hotkeys are customizable in Settings → Shortcuts.

Troubleshooting

"Unable to translate" or a missing-model hint

SwiftyCrow translates with Apple's on-device Translation framework, which needs a language model installed for each language you translate. If translation fails — or SwiftyCrow shows a "Translation model not installed" hint — the model for the detected language usually isn't downloaded yet.

To install translation models:

  1. Open System SettingsGeneralLanguage & Region
  2. Scroll down to Translation Languages…
  3. Click Download next to your source and target language (1–3 GB each). With Auto source, install every language that might appear in your captures
  4. Relaunch SwiftyCrow and try again

The in-app hint has an Open Settings button that jumps straight there (and a Don't show again once you've got the point). Models are managed by macOS and stored locally — free up space by removing unused ones from the same panel.

For more details, see docs/LANGUAGE_MODELS.md.

Configuration

Settings live in ~/.config/SwiftyCrow/config.toml, grouped into tables that mirror the in-app Settings tabs — [capture], [languages], [overlay], [shortcuts], [translation], and [updates]. Edits made in the app or by hand are kept in sync.

See docs/CONFIGURATION.md for the full reference — every key, its default, and the shortcut syntax.

Development

Requirements

  • macOS 26+
  • Xcode 26+ / Swift 6.3+
  • mise (manages Tuist + SwiftFormat versions via .mise.toml)

Building from source

export TUIST_DEVELOPMENT_TEAM=YOUR_TEAM_ID   # your Apple Developer Team ID
mise install               # installs Tuist + SwiftFormat
tuist install              # resolves SPM dependencies
tuist generate             # generates the Xcode workspace
open SwiftyCrow.xcworkspace

TUIST_DEVELOPMENT_TEAM makes the Debug build sign with the same Apple Development certificate every time. Skip it and macOS will treat each build as a new binary and re-prompt for Screen Recording permission on every launch. Persist it in your shell profile or in ~/.mise.local.toml:

[env]
TUIST_DEVELOPMENT_TEAM     = "YOUR_TEAM_ID"
TUIST_SPARKLE_PUBLIC_ED_KEY = "YOUR_SPARKLE_PUBLIC_KEY"

SPARKLE_PUBLIC_ED_KEY is baked into Info.plist at generate time so the app can verify update signatures. For local debug builds it can be empty.

Tech stack

  • Tuist generated workspace (Project.swift, Tuist/Package.swift)
  • TCA (swift-composable-architecture) for app + capture state; dependencies wired with @DependencyClient
  • swift-sharing with a fileStorage strategy bridged to swift-toml
  • Magnet for global hotkey registration, plus a small custom recorder view
  • Sparkle for in-app updates
  • Apple Vision for OCR, Apple Translation for translation, ScreenCaptureKit for capture
  • Source style enforced by the Airbnb SwiftFormat configuration in .swiftformat

License

Mozilla Public License 2.0. Originally MIT (2021); relicensed to MPL-2.0 in 2026.

MPL-2.0 is file-level copyleft: modifications to existing source files must remain under MPL-2.0, but you can add new files under any compatible license. App Store distribution is supported.

About

Fully on-device on-screen translator for macOS — region capture + live overlay, powered by Vision OCR and Apple Translation

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors