Medical student in Istanbul, building web apps on the side.
Currently: ReadKinetic (readkinetic.com), a local-first RSVP speed-reading PWA. Runs entirely in the browser; your library never leaves your device.
Submissions
Show HN: ReadKinetic – a free, local-first speed reader for your own books
We've got up and down arrows, or you can drag vertically to adjust. Funny, you're not the only one who missed that today, so the interface definitely isn't making it obvious. Fixing that is definitely a priority for me.
What you're getting at, about having a separate speed for each book, that’s a good idea and worth exploring. Right now, the speed is just one setting for everything. So if you slow things down for a book that needs a more leisurely pace, you have to remember to speed it back up manually when you switch to something else. Someone else mentioned the same thing earlier. It makes sense that it should remember the pace for each book, just like it remembers where you stopped reading.
That's the profile I keep bumping into, people who already read a lot and want the volume rather than a shortcut. What does your load actually look like, out of interest? I'm trying to work out where the line sits between the reading you'd want this for and the reading you'd want to slow down for. Everyone seems to draw it somewhere slightly different and I don't think I've got it right yet.
A lot of what you're saying here resonates with me, I've touched on some of these points myself in this conversation. It definitely isn't great for anything that requires actual thought. Your comprehension does suffer as your reading speed increases. The whole industry surrounding this stuff really does oversell its capabilities, which is why I tend to set a practical limit rather than touting some massive number.
Where I think the argument starts to break down is by lumping all reading into a single category. Reading a novel for pleasure, and wading through forty pages of background information before you get to the five crucial ones, are fundamentally different activities. I'm a medical student, and the majority of my reading consists of that second type. You can't really "digest" a literature review in a way that makes it enjoyable. The only real goal is to get through it once, without getting bogged down.
Regarding the pauses, that's actually the area I put the most work into. It lingers three times longer at the end of sentences and twice as long at commas, specifically because a consistent, flat pace feels like reading a script rather than actual prose. And, of course, you can pause whenever you feel the need; there's no pressure to keep moving forward.
The part I'd really push back on is who this is actually for. The people who've given me the most in-depth feedback today are clearly avid readers. It's not really a tool for people who don't read much.
The hypothesis is that much of the time spent reading is not spent deciphering the words but rather on moving the eyes around. Your eyes flicker around constantly, lock onto a word, then sometimes flicker backwards to previous words (those are called regressions) and constitute somewhere between 10-15% of your reading time. The RSVP (rapid serial visual presentation) takes away this freedom, by displaying the word in a fixed place, and thus removes all of these eye movements. In principle this leaves you with just the time needed for word recognition, which is presumably what you want.
In practice, this is probably not as good as using your own eyes and here's why, in addition to the argument above about skipping words. You no longer can skip words, which people do all the time, especially short function words. You already have to preview the next word or two in order to know when you've lost your place, so even if you had perfect peripheral vision you would be no better off than before. There is also the fact that you can no longer backtrack if you lose your place or simply get bored. In principle, of course, this could be solved by always allowing the reader to step back to a previous line, but this requires extra time and in general these features are a mixed blessing.
As to whether you would want to use such a device, and assuming you could use it with other media, I would say not particularly. Unless you are an especially fast reader, in which case there just isn't anything for you to gain. The people most likely to benefit from this sort of device are the people who normally have the most regressions or lose track of where they are. It makes the sort of prose that is meant to be read in one sitting much easier, faster, and less confusing. But it fails spectacularly on more dense material or on material where the visual presentation is important in any way. It also does not help anyone who simply can't visualize a text in the same way others do.
Some people just don't have the right kind of brain, and this isn't really their fault.
Nice, always good to see another implementation! Were you able to get past the pivot alignment issue? Because in a proportional font, the word seems to slide around your eye as it shifts the spacing of the characters immediately adjacent to the pivot, so I anchored the pivot character and allowed the rest of the word to extend freely from both sides.
What stood out to me as a major difference was pacing though - a flat interval makes for a pretty robotic reading experience since there's no sentence structure, and I found that using multipliers on the base duration was more effective, getting about 3x for sentence ending punctuation, 2x for commas, and a little extra for long words overall was more noticeable than any other adjustments I made.
I'm curious if DuoBook is actually trying to implement reading in a second language as a learning tool as the name suggests, and if so, how does that affect things? I would imagine the pacing would be overall lower (particularly for punctuation) and recognition of the words you're actually reading would have more impact on comprehension than the ones you're just learning to read.
That's the one, thanks. Spritz is where most people discovered it and the reason why the highlighted pivot letter is the norm.
However, RSVP itself has a long history that dates back to reading research in the seventies done in the context of how quickly one can read words without eye movements. Spritz's main innovation was the optimal position of the recognition point, allowing to keep it fixed while the word around it moves to form a new word, plus the framing elements at the top and bottom. I'm using them, so no need to patent something that others have already pioneered.
What I didn't like about theirs is that it was only available as an SDK inside other apps, and not as a standalone reader. It came up on a Samsung watch and a couple of other readers, but you couldn't really submit your own epub. This is what gave me the idea to make this one.
You are the third person this afternoon asking for this extension, therefore the obvious next task is creating it. One person emailed me this morning asking to paste a url and have the article read to them, and it came up again in another thread here.
Of your two options, I think the forwarding version is the better primitive. Selection is always a possibility, but right clicking on the highlighted text and telling it to forward it to you doesn't require as many parsing heuristics, since the user already told you what they want. Whole page mode could be layered on top as an option with a readability pass.
The panel version is tempting because the reader itself is already a self-contained static app, and would require little modification to appear as a side panel in another app, but then I would have to maintain two apps for little purpose.
The cool thing is that no server is required at all! A content script on readkinetic.com could write directly to the app's indexedDB from your extension in the same origin, so the script merely takes the text from the page you already have open and gives it to the local copy of the reader. Nothing passes through my servers, which is the whole point of the thing.
The embedded version is something I haven't thought about before, but is actually really cool. Using the exact same trick in reverse, the embedded version already exists in the visitors browser, so there isn't a fetch to do at all! The only wrinkle is styling it such that it doesn't get mangled by the host app, hence the shadow dom and small bundle.
Up/down arrows, or dragging up/down on the reader itself. An overlay appears stating the new speed.
Which would be a great answer, except that several other folks have made the same comment today, so I'm afraid it's my fault and not yours. I checked it myself; the hint line in the reader says "Hold to read · ←→ scrub" and nothing about speed control. You followed the instructions I published, which were wrong. Just fixed it; a discoverability pass is now at the top of the queue this week.
The minimap is, in fact, the best idea anyone has given me today (and I think it addresses a concern 3 other people brought up in this thread). The underlying problem with all the suggestions is that you lose all the scaffolding, the paragraph breaks, the line spacing, the sense of where you are in the text that makes it easy to just jump into the text anywhere in the first place. I think this peripheral low fidelity map addresses it because you don't have to actively engage with it. Your concern about the control to not draw attention from the text is the entire point of this design. You can't make it too salient because that makes it steal the focus from the main text, which defeats the entire point.
I already have the info on paragraph and chapter breaks in the reader already, so this is more of a rendering issue rather than info display. The reason why I particularly like your first suggestion is that it lets you know something like a poem or different paragraph style is about to start so you can change your reading pattern accordingly rather than stumbling into it when you're already in prose mode reading at 400 wpm.
On the 2 modes thing, I feel like there isn't really a good reason to do it the other way. It was more that it happened that way rather than it needed to happen that way, and you're right that the main one should probably scroll and have bookmarks rather than making the user make a choice between 2 different interfaces.
Theme circles is definitely a solid suggestion, being a more practical implementation of visualising the underlying theme. Being able to see the actual colours of the background/text rather than an abstract blob is good, so that's a definite maybe.
Code isn't public yet, but extensions are something I've wanted to try for a while. In fact, someone sent me an email this morning asking precisely for that, to be able to paste a link and read articles. It can't be done directly in the page because of CORS policies, and doing it server side would involve routing the reading of articles through my server which is probably not ideal for everyone. An extension that pulls the article from whatever page you're on would be the most ideal version of this, from a privacy standpoint, so I'm considering it.
And finally, your last point is actually the first pushback I've had all day on the controls/interface. As far as 4 other people having difficulty finding the thing, I think you're right that something needs to be done, but I don't think hiding the options behind discovery is really the answer. There is a conflation in my brain between 'controlls are easily found and accessible' and 'controls are not hidden beneath layers of menus/bookmarks', and I think it's a false conflation, I had been treating them as one. Thanks for that.
That's the right answer, and it's pretty much what I’ve been considering since someone earlier in the thread asked about figures.
Epub makes it manageable because the images are just files in the zip. They are positioned at a set point in the spine, so I know exactly where in the word stream a figure belongs. Show it there, pause, and wait for a press to continue instead of auto advancing. You can pace text, but you can't pace a graph. There’s no sensible way to guess how long someone needs to view it.
The detail I keep reconsidering is captions. Right now, a caption flows into the stream as regular words, so you see "Figure 3 shows the relationship between" appearing one word at a time with no figure in sight. Those should be linked to the image and displayed alongside it instead.
Your question also made me realize that tables should probably be images too. Extracting text flattens a table into a series of values in reading order, which is worse than useless. Rendering the region as an image and pausing would be much better than what I do now.
Pdf is more challenging since I’d have to determine which images are real figures and which are rules and logos. Storage increases significantly too; everything is stored in IndexedDB on your device. So, a book full of plates is very different from a novel. I’ll probably need to downscale on import.
Where did you see it before? I’d really like to check out how they handled it.
E-ink is the frustrating part because it's where people actually read books, yet it's the display least capable of doing this. Partial refresh allows for a handful of updates each second, but it comes with ghosting. At 300 words per minute, which is a word every 200 milliseconds, you'd be reading through the residue of the last two or three words. Full refresh clears that, but it flashes the entire panel and takes long enough that you would only read about a word per second.
Your idea about sentences does affect the experience, but I don’t believe that makes it worse; it’s just a different approach. Once a whole sentence appears on screen, your eyes move across it again, so the no eye movement part is lost. What remains is the return sweep, the long jump back to the start of the next line, and the moment when you lose your place on a dense page. Those are real challenges in normal reading, and chunking by sentence removes both. You would end up closer to guided pacing than RSVP, which might suit a book better anyway.
Let me know how the procrastinated book turns out.
Oh nice, the pre-processing hooks are a way cleaner way of solving the format issue than I was doing. When you are on the terminal you can shell out to pdftotext or pandoc and people use the format convertor that they already know and trust. But when you are writing stuff for the browser you have to include the format convertors in the download so I was including pdf.js, JSZip and mammoth in the build and still could not handle formats that I had not seen.
Your method also nicely solves that thing that I keep on getting asked for which is copy and paste a url and have it fetch the article and display the text. I had somebody email me about that today! On the terminal you just get something like: curl some_url | readable and you are pretty much done. On the browser it's a cross origin request so you will want to include a server that fetchies it and well that would kinda be missing the point of having local rendering.
Something that i was wondering is if monospaced text would have made it easier for you to find the alignment for the pivot? Fixed-width is simple, since your optimal offset is just a character offset. For proportional text i'm just taking my best effort pivot character and anchoring it, and then extending word fragments from that point in both directions. Otherwise the words can tend to wander as you eye flows from character to character.