Chapter detection
Extracts the text, finds chapter boundaries, and skips cover, copyright and index pages.
Plenty of books you own will never be recorded.
Point it at any .epub and get a folder of clean, chapter-named
audio files. Then read along while it plays, with the current
sentence highlighted in time using the speech engine's own word timings. It
handles English, Mandarin and Cantonese, runs entirely on
your own machine, needs no API key, and costs nothing.
Microsoft edge-tts neural voices, with no API key and no
per-character billing.
languages, including Cantonese — with the sentence splitting and font handling each one actually needs.
Each chapter is written atomically. Re-run after a crash and it skips what is already done.
Per-chapter files with ID3 tags and cover art, or one audiobook file with chapter markers.
↓ the first thing it does
Before synthesising anything it parses the book and shows you what it found. This is a real run against a 45,000-word book — note that it separates actual chapters from front and back matter, estimates the finished runtime, and works out how many parts each chapter needs:
$ python "App V6/epub_to_audiobook_v6.py" --list "What I Talk About When I Talk About Running.epub" [*] Loading: What I Talk About When I Talk About Running.epub Title : What I Talk About When I Talk About Running Author: Haruki Murakami Voice : en-US-GuyNeural Rate: +0% Subs: on [*] 14 chapters - ~45,646 words - ~5h 4m estimated - ~12 min/part 1 Contents ~ 95 w (1 file) [junk?] 2 Foreword ~ 751 w (1 file) 3 Chapter One ~ 5,326 w (3 parts) 4 Chapter Two ~ 6,294 w (4 parts) 5 Chapter Three ~ 5,281 w (3 parts) 6 Chapter Four ~ 4,817 w (3 parts) 7 Chapter Five ~ 3,679 w (2 parts) 8 Chapter Six ~ 4,990 w (3 parts) 9 Chapter Seven ~ 3,133 w (2 parts) 10 Chapter Eight ~ 4,002 w (2 parts) 11 Chapter Nine ~ 5,832 w (3 parts) 12 Afterword ~ 1,221 w (1 file) 13 Also by Haruki Murakami ~ 62 w (1 file) [junk?] 14 Copyright ~ 163 w (1 file) [junk?] (dry run — nothing synthesised)
The [junk?] flags are the useful part. Contents, "Also by", and
the copyright page are marked so you can untick them in one click instead of
finding out three hours later that your audiobook opens with a list of
trademarks.
↓ the reason to build this rather than buy one
The player highlights each sentence as it is spoken, driven by the timing data
edge-tts emits alongside the audio rather than by guessing from
character counts. For a language learner that is the whole feature: you hear
the sentence and see exactly which words are producing the sounds.
It is also why the Chinese support took real work. Splitting on 。!?;
rather than on periods, estimating length by characters rather than words,
and picking the right font and voice automatically are each small things that
the naive version gets wrong in a way that makes the highlight drift out of
sync within a paragraph.
Extracts the text, finds chapter boundaries, and skips cover, copyright and index pages.
Each chapter is written atomically, so an interrupted run leaves no half-file and a re-run resumes.
Light and dark themes, adjustable speed, font and size, auto-advance, resume, a sleep timer and keyboard shortcuts.
Per-chapter .mp3 with ID3 tags and embedded cover, or a
single .m4b with chapter markers.
↓ six versions of one lesson
The version history is a fair summary of what building a desktop tool is actually like. V1 was the pipeline. V2 added the timing sidecars that make the read-along possible. V3 and V4 were the interface. V5 was Chinese.
V6 is almost entirely robust ffmpeg discovery, so that speed
control and .m4b export work on a fresh machine without the user
editing their PATH — with actionable errors when they still do not, and the
option to ship ffmpeg next to the app. That is an unglamorous release, and it
is the one that decides whether anybody else can run the thing.
↓ what you should know
This is a Python desktop app with a Tkinter interface, not a web app. There is
nothing to click into from a browser — you install a few dependencies and run
it, with launchers provided for Windows and macOS and a script that builds a
double-clickable macOS .app.
It also ships code only. No books, no audio. Synthesis needs the internet, because the voices are Microsoft's hosted neural ones; ffmpeg is optional and only needed for speed control and single-file export.
Point it at books you own or public-domain titles. The repository contains no copyrighted text and the output is for personal use.
A note on this page: there are no screenshots of the player here yet. The interface is real and the CLI output above is a genuine run, but a capture of the desktop window was blocked by a macOS screen-recording permission prompt and has not been retaken.
Finish · what it is built on
edge-tts neural voices — no API key, no costedge-tts's own word-timing data, not estimatedebooklib + BeautifulSouppygamemutagen for tags and cover art; ffmpeg for speed control and .m4b