any book, read aloud and highlighted

Plenty of books you own will never be recorded.

Record them yourself, for nothing, in a voice you can stand.

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.

$0

Microsoft edge-tts neural voices, with no API key and no per-character billing.

3

languages, including Cantonese — with the sentence splitting and font handling each one actually needs.

Resumable

Each chapter is written atomically. Re-run after a crash and it skips what is already done.

.mp3 or .m4b

Per-chapter files with ID3 tags and cover art, or one audiobook file with chapter markers.

↓ the first thing it does

It finds the chapters, and flags the junk

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

Read along, in sync

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.

Chapter detection

Extracts the text, finds chapter boundaries, and skips cover, copyright and index pages.

Crash-safe

Each chapter is written atomically, so an interrupted run leaves no half-file and a re-run resumes.

Player conveniences

Light and dark themes, adjustable speed, font and size, auto-advance, resume, a sleep timer and keyboard shortcuts.

Export options

Per-chapter .mp3 with ID3 tags and embedded cover, or a single .m4b with chapter markers.

↓ six versions of one lesson

V6 is entirely about ffmpeg not being where you left it

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

Desktop only, and you bring the books

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

Free, local, and dependency-light

Voices
Microsoft edge-tts neural voices — no API key, no cost
Languages
English, Mandarin (Mainland and Taiwan), Cantonese (Hong Kong)
Read-along
Driven by edge-tts's own word-timing data, not estimated
EPUB parsing
ebooklib + BeautifulSoup
Playback
pygame
Optional
mutagen for tags and cover art; ffmpeg for speed control and .m4b
Interfaces
A graphical app with the read-along player, and a command-line version
Related
Podcastify takes the same source text and stages it for two voices instead of one

Make the audiobook nobody recorded