ReadCommons

Self-hosted reader · MIT

Hear the translation. See the original page.

ReadCommons holds a book's text, its scanned pages and its audiobook on the same sentence. The panel below is the reader, playing a real book. Press play, then click a sentence.

Loading the excerpt…
0:00

Nothing above is a mockup. The voice, the timings and the scan are the files ReadCommons produced for this book: a French translation read aloud, aligned against the English first edition of 1889, which is in the public domain. The alignment is computed once, offline, and stored next to the book.

Three things to try on that panel

Click any sentence. The voice jumps to it. Every sentence carries the second it was spoken at, so seeking is exact rather than approximate.

Switch to Page. You keep your sentence, and the scan turns with the reading. Diagrams, plates and tables stay where the printer put them.

Change the speed. The highlight keeps up, because it follows the clock and not a recording of the highlight.

A library, not a folder of files

Covers, shelves, genres, languages and reading status. The search runs over the full text of every book at once, so a half remembered sentence finds its book.

One click resumes at the exact sentence you stopped on.

The spoken sentence, marked as you read

Type size, line width and typeface are yours to set. The highlight is a wash, never a box, because a box in a wall of text is a distraction.

Speed from 0.5x to 3x, keyboard shortcuts for everything.

The original page, figures intact

Some books cannot be read as plain text: the diagram is the argument. ReadCommons renders the real page and keeps your place in it.

When the scan and the text are in the same language the spoken sentence is outlined on the page itself. When it cannot be located with certainty, nothing is outlined: a box over the wrong paragraph is worse than no box.

Run it on your own machine

Point it at the folder your books already live in. It is opened read only.

git clone https://github.com/Topxl/readcommons
cd readcommons
cp .env.example .env
# point READCOMMONS_LIBRARY_ROOT at your books
docker compose -f docker/compose.yml up

Then open http://localhost:8710/app/. Books appear straight away; the audio alignment is a separate pass you run when you want it, and a book without one still reads and still plays. Putting it on a public address? Set a password first with python -m readcommons hash-password.

Why it is called that

A commons is what nobody owns and everybody may use. Books were that long before software existed, and the tools for reading them should be too. ReadCommons is MIT licensed, sends nothing anywhere, stores nothing outside your machine, and depends on no service that could be taken away.