An Android reader for read-along ebooks — EPUB 3 files that carry their own narration and highlight each word as it's spoken. It's built for language learning: tap any word for an on-device translation, save it with the sentence it came from, loop a sentence until it lands, or slow one hard passage down.
Books come from lazyTTS, which narrates a plain ebook offline and writes the word-level timings into the EPUB, then hands it over the local network. Any EPUB 3 with Media Overlays works, though.
lazyREADER is a fork of
Storyteller by Shane
Friedman, taken from upstream commit d23bd35d and used under the MIT License
(see LICENSE). Storyteller is the substance of this app — the
Readium integration, the Media Overlays player, the sync engine and the whole
monorepo it lives in are its work. Please go and look at the original; it solves
a harder problem than this fork does, by force-aligning narration you already
own rather than generating it.
This fork differs in that it drops the self-hosted server and gets its books from lazyTTS over the LAN, and adds the language-learning features above.
Storyteller's own history is preserved in this repository. The only thing removed is roughly 2 GB of Git LFS test fixtures for the server-side alignment libraries, which this fork doesn't run.
Upstream, with thanks:
Shane Friedman Engineer |
![]() Sarah Mitrano Designer (mobile apps) |
The app is at applications/mobile. It's an Expo project with local native
modules, so no prebuild step is needed:
yarn install
cd applications/mobile/android && ./gradlew assembleRelease
Storyteller's forced-alignment algorithm is worth reading about: how it works.
