Local, voice-cloned generative audio for long-form text. Audible runs Chatterbox TTS on Apple Silicon through MLX, turning EPUB passages into natural WAV narration while keeping the model, voice references, and generated audio on your own machine.
Long-form narration has a different set of constraints from a one-off text-to-speech request: inference should not block listening, repeated text should not be rendered twice, and unfinished work must survive a restart. Audible treats those as first-class parts of the generation system.
- Voice-conditioned synthesis: Chatterbox generates speech from text plus a local reference recording.
- MLX-native execution: A dedicated worker owns model loading and inference, matching the thread-local GPU model lifecycle on Apple Silicon.
- Playback-first scheduling: A priority queue puts the passage the listener requested ahead of background book precaching.
- Content-addressed audio: Each WAV cache key covers text, model, reference voice, language, and synthesis controls, making generation deterministic and deduplicated.
- Durable generation jobs: SQLite records precache state and segment attempts so longer jobs resume after an app restart.
The reader is the proving ground for the pipeline: upload a book, configure a reference voice, and have the next passage ready when it is needed.
- Upload EPUB files into a persistent local library.
- Create a voice from a reference recording with Chatterbox TTS on Apple Silicon.
- Read in a focused, adjustable reader while the active passage is highlighted.
- Resume a book after a reload, move by chapter, and seek with familiar audiobook controls.
- Start synthesis at the passage being played; optional background precaching fills in the rest without blocking the listener.
FastAPI exposes the library, reference-audio, TTS, cache, and job APIs. A lightweight Vite application, written in vanilla JavaScript and styled with Tailwind, handles the reader and player. EPUBs receive content-hash identifiers; generated audio and the job ledger are stored locally in SQLite-backed runtime data.
Audible is intended for a machine on your local network. Python 3.11+ and Node.js are required; voice cloning currently uses MLX, so Apple Silicon is the intended runtime.
git clone https://github.com/d-r-e/audible.git
cd audible
python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e .
cd web
npm install
npm run build
cd ..
python -m audibleOpen http://127.0.0.1:8765, upload an EPUB, then add a short voice reference from the voice settings sheet. The first narration request loads the model and will take longer than later requests.
For frontend iteration, run npm run dev from web/; Vite proxies API and reference-audio requests to the backend on port 8765.
audible/ FastAPI app, EPUB processing, TTS providers, cache, and job ledger
web/ Vite frontend and reader/player UI
tests/ Parser, API, cache, library, and integration coverage
data/ Local SQLite library, voice references, covers, and audio cache (ignored)
Books, voice references, generated audio, and reading progress remain in the local data directory. Use recordings and books only when you have the right to do so.

