Tables are worse than dropped - PDF extraction de-flattens them into a stream of values in reading order, so you just get a torrent of disconnected numbers flitting past which don’t mean a great deal.
I would read figures in the normal way for this type of book and then use the tool for the prose. It’s not really fixable at the format level too, there is no good way of showing a person a graph word by word. I suppose what I really should add is some kind of flag to say there was a figure here instead of just letting the process go ahead and drop everything. Otherwise, you can’t really know that you’re missing things.
PDF is significantly the worst. We use pdf.js, and it has to page by page to retrieve the text layer, so a large book takes a little while and the tab feels 'busy' while doing so. EPUBs are considerably faster, it's mostly a case of unzipping and parsing xhtml.
The main thing that was the difference maker was separating storage into two IndexedDB stores, one for metadata, and one for the full text. When we open the library list we only read from the metadata store, not pulling the entire content of all books you own into memory. We only pull in the one you actually want to read.
The biggest edge case by far are scanned PDFs that have no text layer (there is no OCR, so nothing is returned) that are currently not failing audibly enough to make it clear.
tommytman•1h ago
SamuraiLion•35m ago
It started as a flat interval and felt terrible. Every word got the same slot, so sentences never landed and it read like a stock ticker.
Now there's a base duration from the WPM setting, with per word multipliers on top: 3x on sentence-ending punctuation, 2x on commas and semicolons, and an extra 0.7x if the word is 8 characters or longer.
The punctuation weights came from reading passages out loud and noticing where I actually stopped. Those are the breath points, so giving them proportionally more time puts the sentence structure back in. The long word bump is closer to the eye tracking literature, where fixation duration scales with word length. It felt wrong for a 12 letter word to get the same slot as "the".
The actual numbers were tuned by ear over a lot of real reading. I tried syllable estimates and word frequency weighting too, but neither was noticeably better than punctuation plus length, and they made the rhythm less predictable, which turned out to matter more than being clever.