Skip to content

Epic: Read Aloud (TTS) — speak selected text via hotkey (local + cloud) #220

Description

@thefourcraft

Read Aloud — the mirror of dictation

Press a hotkey -> grab the currently selected text -> speak it aloud, using a local neural voice or a cloud provider. Parallel subsystem mirroring the existing STT stack (CloudProvider/registry, APIKeyManager/Keychain, HotkeyManager, SelectedTextService, SoundManager).

Decisions (locked)

  • Local engine: sherpa-onnx + Kokoro-82M (Apache-2.0, whisper.cpp-style C lib, neural, offline).
  • Cloud providers: Deepgram Aura-2 (default), Inworld TTS-1.5 Mini, ElevenLabs v3, Gemini 3.1 Flash TTS, OpenAI gpt-4o-mini-tts, Cartesia Sonic-3.5. (All verified current as of 2026-06.)
  • Playback: one shared progressive-PCM pipeline (AVAudioEngine) + whole-file AVAudioPlayer fallback.
  • Text capture: existing SelectedTextService.fetchSelectedText() (AX read -> synthetic-copy fallback). One Accessibility grant already covers it.

Work breakdown

Foundation

Cloud providers

UI + release

Notes / corrections

  • Chatterbox deferred to a later phase: it is 0.5B (not 350M), ~1–3 GB (not 700 MB), has no native Swift binding (sidecar/ONNX only), and watermarks output. Kokoro is the right first neural local engine.
  • Release gating: notary issuer ID + Sparkle EdDSA key are open blockers per release-readiness notes.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions