Private, local text-to-speech for Apple silicon Macs. Say It turns selected or copied text into speech with open models running through MLX Audio—your text and generated audio stay on your Mac.
![]() |
![]() |
- Speak from anywhere. Select text in another app and press the configurable selection hotkey, choose Services → Say It, or use the separate clipboard hotkey.
- A native menu-bar player. Read the clipboard, pause, seek, change playback speed, follow the spoken text, and revisit history without leaving your current app.
- Open models from Hugging Face. Download supported MLX models in the app, including Qwen3 TTS, Kokoro, Chatterbox, and OmniVoice. Compatible community models can be added by Hugging Face repository ID.
- Create voices. Models expose the features they support, from built-in voices and voice descriptions to random voice discovery and voice cloning.
- Efficient model loading. Only one model is kept in memory, and it is automatically unloaded after a configurable period of inactivity (ten minutes by default).
- Local by design. Synthesis works offline after model download. There is no analytics, cloud inference, or passive clipboard monitoring.
- Hear your coding agent work. The bundled Say It agent skill provides live, hands-free spoken progress updates while an agent works.
For models with voice-cloning support, Voice Studio guides you through recording or importing a clean reference sample, checks its quality, and saves it as a reusable voice profile. You stay in control of the recording: voice samples and profiles remain on your Mac, and cloning runs locally.
Only clone a voice when you have the speaker's permission.
Say It requires macOS 15 or later on an Apple silicon Mac.
- Install and launch Say It.
- Choose and download a model during onboarding.
- Optionally allow Accessibility access, select text in another app, and press Control–Option–S. You can also copy text and press Control–Option–V, or choose Services → Say It.
Both shortcuts can be changed in Settings. Say It queries the current selection or reads clipboard text only when you explicitly invoke the matching action.
The app includes a sayit CLI for speech, playback, models, voices, and
automation:
sayit "Read this aloud"
printf 'Read standard input' | sayit
sayit status
sayit pause
sayit resume
sayit skill pathRun sayit --help to see all commands and options.
Ask a compatible coding agent to load the skill file returned by:
sayit skill pathA good generic prompt is:
Load the Say It skill and use it for live spoken updates. Run `sayit skill path` to get the skill path.
The Say It agent skill narrates meaningful progress and the final handoff without blocking the underlying task, while keeping concise written updates for details you may need to copy. Resolve the path again after upgrading Say It so the guidance stays aligned with the installed CLI.
The native SwiftUI frontend is separate from a per-user backend service that
owns model downloads, synthesis, playback, and history. The app and CLI talk to
that service over XPC. A narrowly scoped accessibility helper retrieves the
frontmost app's selection only when requested. An optional, token-protected HTTP
server exposes the same synthesis engine to other local apps through a
versioned REST API bound to 127.0.0.1.
The synthesis layer is built primarily on MLX Audio, with the native Swift integration provided by mlx-audio-swift.
Install Xcode with Swift 6.2 or later and XcodeGen, then run:
brew install xcodegen
./Scripts/build-app.shLocal builds compile independent targets and Swift source batches in parallel,
using all available logical CPUs by default. Set SAYIT_BUILD_JOBS to cap the
number of concurrent build operations. Signed release builds keep whole-module
optimization; set SAYIT_SWIFT_COMPILATION_MODE=wholemodule to reproduce that
behavior in an ad-hoc local build.
Local builds are written to Build/DerivedData-Local; signed builds use
Build/DerivedData-Release. The build stops if the app at its selected output
path is still running, so quit Say It before rebuilding it.
For a stable Accessibility grant across Debug rebuilds, set
SAYIT_SELECTION_SIGN_IDENTITY to the same Apple Development signing identity
used for the app. The build does not select a certificate from your keychain
automatically.
Tests run with swift test --disable-sandbox.
Say It is available under the MIT License. Models are distributed under their own licenses; review the model card before downloading or using one.
Say It checks daily and offers Update Now or Later. Update Now downloads, installs, and restarts Say It and its helpers. Later postpones reminders for 24 hours; automatic checks can be disabled in Settings. See software update and release details.

