Castwright — turn a book into a full-cast audiobook, cast and rendered on your own machine
Castwright — turn a book into a full-cast audiobook, cast and rendered on your own machine
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|---|
I queued up the AI narrator everyone recommends for a fantasy novel on a long drive and gave up after four minutes — the thirteen-year-old apprentice, the seventy-year-old swordsmith and the dragon all read in the same slightly bored voice. The cast collapsed into one observer; I was hearing words, not a story. The full-cast tools that do exist sell to the author, meter through a cloud, or forget the cast when the book ends — so I built one for the reader.
Castwright turns a book into a full-cast audiobook — every character in its own voice, kept the same across a whole series — running locally. It’s source-available (FSL), not OSI open source (more below). Solo project, still in beta, and I’m looking for people to run a real book through it.
Sample (one narrator vs full cast): Chapter 1 (5 voices) — one narrator vs full cast; or hear it on the demo page.
How it works: Drop in a book — .md .txt .epub .pdf .mobi .azw3. An LLM analyser (Qwen via Ollama) extracts characters, chapters, and per-sentence speaker tags → you assign a voice to each character → it renders per-chapter audio → you listen, fix a line in place, and export to M4B or MP3 (drops straight into Audiobookshelf, too).
What’s a bit different from the other local tools:
- Voices stay consistent across a series — a character keeps its voice from book to book, and the app shows you the carried cast and exports a shareable card of it. No other local tool does cross-book consistency yet.
- Every rendered chapter goes through automatic QA — dead air, over-long lines, timing drift, whether it said the right words (ASR), plus an opt-in acoustic check that catches a voice drifting out of character even when the words are right. Bad takes light up amber on the waveform before you hear them.
- Five languages, full-cast: English, Russian, Spanish, French, German — detected on import.
- The voices: Kokoro catalogue voices and Qwen3-TTS, which designs a distinct voice per character from the text — no cloud key required. (Reading in your own voice is in development.)
- Listen anywhere at home: Android app (iOS at launch) plus listen-from-any-browser on your home network (
castwright.local). The audio never leaves the house.
Why source-available: I want it usable by anyone, not just people who can drive a Python install — signed installers, a notarised Mac app and the app stores cost money a solo dev doesn’t have up front, and the one-time Cast Pass (seven dollars, once) funds them; it’s all free during the beta.
- To be clear: the app is free — every book, the full cast, five languages, local rendering, the quality gate, and M4B/Audiobookshelf export, no limits;
- the Cast Pass only adds cross-book series memory, companion-app pairing and a few power-user extras. The licence only stops a cloud provider reselling the local engine, and each release goes Apache-2.0 after two years.
Where I’d love help (beta, solo):
- people on different GPUs, OSes and Macs to run a whole book — AMD especially (supported via ROCm, but I’ve never run it on an AMD card);
- readers of Spanish, French or German to push a large series through the analysis and QA and tell me where it slips (I only truly read English and Russian);
- and anyone who finds a better setting in the Advanced panel so that the defaults can improve.
Which language should come next — Chinese, Japanese, Korean, Italian, Portuguese? I’d love to know.
Honest limits: no OCR for scanned/image-only PDFs yet; the analyser runs fully local via Ollama or a free cloud tier, and synthesis is always local.
Requirements: a 6 GB GPU gets you started; 8 GB is the sweet spot (NVIDIA, AMD, or Apple Silicon via Metal — no drivers); a second card can share the load.
On my RTX 4070 laptop, a book renders at about real-time end-to-end, QA and re-records included. 16 GB of RAM is recommended; AMD cards are supported via ROCm but are untested (I have no AMD hardware — AMD testers especially wanted); CPU-only works but is slow.
Feedback is exactly what I’m after — and if you’d like to help build it, say hello at hello@castwright.ai. What would make this work for your library?
Site + demo: castwright.ai · full docs & guides in the wiki.







