Storyteller

Self-hosted server that syncs ebooks with audiobooks

E-books & Media Library ★ 1.5k stars Medium setup AGPL-3.0

Storyteller is a self-hosted platform that synchronizes the text of an ebook with its audiobook narration. This lets you seamlessly switch between reading and listening while keeping your place.

Key features

  • Syncs ebook text with audio
  • Switch between read and listen
  • Self-hosted server
  • Companion mobile apps

Pros & cons

Strengths

  • Unique read-listen sync
  • Privacy friendly

Trade-offs

  • Newer project
  • Processing is resource intensive

Storyteller replaces

Last reviewed Sep 13, 2026 · 840 words

Storyteller takes an EPUB and the matching audiobook, transcribes the audio, aligns the transcript to the text, and writes out a single EPUB with media overlays where every sentence knows its timestamp. The result is a book you can read on the train, tap play at the exact paragraph you stopped, and listen while it highlights along, on your own server with no Amazon account involved. Nothing else self-hosted does this. The price is processing: aligning a 10-hour audiobook on a CPU-only box is a job measured in hours, and the catalogue's 1 GB minimum is the floor, not the comfortable number.

The alignment step is where the work happens

Under the hood the server runs a Whisper-family speech-to-text model over the audio, then forced-alignment matches the transcript against the ebook's actual text, which is what makes the sync sentence-accurate rather than approximate. The output format is standard: EPUB 3 with Media Overlays is the same spec that publishers use for read-aloud children's books, so the finished file opens with synced narration in any reader that supports overlays, Apple Books included. That decision is why I trust the project: the valuable artefact is a portable file, not a proprietary database, and if Storyteller disappeared tomorrow the books it made would keep working.

Quality tracks the transcription model. On a machine with a GPU or a fast modern CPU you can run a larger model and get near-perfect alignment; on a small VPS you will pick a small model and accept the occasional drift around chapter breaks, which the reader lets you correct by tapping. Abridged audiobooks and editions that differ from the ebook text align badly, and there is no fix for that beyond matching editions.

Budget for the processing, not the serving

Serving is cheap; a synced library for 2 people idles at a few hundred megabytes. Processing is the expensive part and it is bursty. Expect the container to pin every core for the duration of a job, and expect the 1 GB minimum to become 4 GB or more in use while a large book aligns, depending on the model chosen. Run it on the box with the most cores you own, not the Pi. If you have an NVIDIA GPU, the upstream instructions cover passing it through and the speedup is dramatic; this is one of the few media-library tools where a GPU is worth the configuration.

The upstream Docker image is on GitLab's registry and the compose file is short: one service, a data volume for the library and the processed books, and a port. Put it behind Caddy with TLS, because the mobile apps talk to it over the network and you will not want them on plain HTTP.

Reading it: apps, web, and any EPUB 3 reader

Storyteller has its own iOS and Android apps that talk to the server, sync position and download books for offline use, plus a web reader. The apps are the polished route and the reason a household can share one server with per-user progress. The alternative route is exporting the finished EPUB and reading it in any app that honours media overlays, which is a shorter list than it should be, but it exists and it is a real exit door.

DRM is your problem, not Storyteller's

The server needs a DRM-free EPUB and DRM-free audio files. It does not, and legally cannot, strip protection from purchases. In practice that means audiobooks from DRM-free stores, books from publishers who sell open files, or your own conversions of media you own where local law permits. The "alternative to Audible" framing in the catalogue is fair on function and misleading on inputs: you cannot point it at an Audible library and get synced books. Plan the library around sources that give you files.

How it sits next to Audiobookshelf

Audiobookshelf is the audiobook and podcast server most people in the ebooks category already run, and it is better at everything about a plain audiobook library: metadata, series, multi-user, playback apps. Storyteller does not replace it. The working pattern is Audiobookshelf as the library and player for audio, Calibre-Web or a similar shelf for plain ebooks, and Storyteller for the subset of titles where you own both formats and want them married. That subset is smaller than you think, which is why I would not make Storyteller the first server in a new media stack.

What I'd do

Run it on the most capable machine I have, GPU if available, behind Caddy, and feed it 2 or 3 books I own in both formats to see whether the read-and-listen habit is real for me. If it is, it earns its permanent slot beside Audiobookshelf. If I only ever listen, Audiobookshelf alone is the right call and Storyteller is a tool I admire but do not need.

Compare Storyteller

18 head-to-head comparisons.

Similar e-books & media library apps