Skip to content
Brian Sithu

Let’s Hear It

Local text-to-speech reader for macOS

Let’s Hear It is a personal macOS app for listening to English EPUBs and text-based PDFs. You import a book, pick a voice, and listen while the current sentence is highlighted. Book files, extracted text, speech generation, playback, and progress stay on the Mac.

Architecture

The app has two processes. A native SwiftUI app owns the interface, library, and audio playback. A Python worker runs the speech models through MLX Audio on Apple Silicon. The app starts the worker and talks to it over stdin and stdout; no HTTP server is involved.

Let’s Hear It architecture: a book file and the updates feed flow into the macOS app, which exchanges JSON messages with the speech worker. The app reads and writes library storage; the worker loads models from the model cache. importSparkleread / writeloadJSONstdioBook fileEPUB · text PDFUpdates feedDMG · appcastmacOS appSwiftUI · PDFKit · AVFoundationSpeech workerPython · MLX AudioLibrary storageSQLite · books · covers · audioModel cachePinned Kokoro / Chatterbox

Components

Listening loop

  1. The reader splits the current chapter into sentence units.
  2. The app requests the current sentence and a bounded look-ahead from the worker. Each request carries an ID.
  3. The worker writes the audio atomically and reports its path and measured duration.
  4. The player queues the file and advances the highlight when that sentence finishes playing.
  5. Seeking or changing voice cancels obsolete requests. Late results with stale IDs are discarded.

Generated audio is cached by text, model revision, voice, and text-processing version, so a different voice or model never reuses old audio. The cache has a 2 GB default limit and evicts least-recently-used audio without touching books or progress.

Releases

The application source is private. A release script builds an Apple Silicon DMG, signs the update feed, and publishes the DMG, checksums, and appcast.xml to the publicletshearit-updates repository. It stays public so the app can fetch updates without credentials.

Scope

Requires an Apple Silicon Mac on macOS 15 or later. Scanned PDFs, OCR, voice cloning, audio export, and phone sync are not included.