Reading Speed and Why Fixed Chunks Fail

May 10, 2026 · blog

Following up on my grouping algorithm — it produces natural-feeling breaks, but some groups are still unreadable. Not because the break points are wrong, but because the speaker is just fast.


The 25 Characters Per Second Threshold

I went looking for research on subtitle readability. The psycholinguistics literature is pretty clear: comfortable reading speed for subtitles is 20–25 characters per second. Above that, viewers start skipping words or lose comprehension.

25 chars/sec is my ceiling. Any caption group that exceeds it needs to be split, regardless of how natural the break points are.


A Real Example

Take this sentence spoken in 1.1 seconds:

"There was a forecast of getting rain and snow at high elevations."

That's 68 characters in 1.1 seconds = 61.8 chars/sec. More than double the comfortable limit. The grouping algorithm kept it together because there's no pause — the speaker rattled it off without breathing.

Correct behavior: split it. But where?


Scoring Split Points

I can't just chop at word 4. That might break mid-phrase. I need to find the best split point — the place where a break feels least jarring.

I built a scoring system for each potential split position:

For the example above, the best split ends up after "rain" — near the middle, "and" starts a new phrase, no orphan on either side:

"There was a forecast of getting rain"
"and snow at high elevations."

33 chars / ~0.55s ≈ 60 chars/sec for each half... still fast but at least the viewer gets two shots at it instead of one long string.


The Merge Pass

Opposite problem: sometimes the grouping algorithm creates tiny groups. A 200ms caption — you can't even read it before it's gone.

Anything under 300ms gets merged into its neighbor. Simple rule, big improvement. Sub-300ms captions are just flickers; they confuse more than they help.


Before and After

Before (fixed 5-word chunks):

"There was a forecast of"     ← awkward mid-phrase break
"getting rain and snow at"    ← another mid-phrase break
"high elevations."            ← orphaned fragment

After (7-rule grouping + reading speed split):

"There was a forecast of getting rain"   ← natural clause boundary
"and snow at high elevations."           ← complete thought

The second version reads like a human placed those breaks. The first reads like a machine counted to five.


What's Still Broken

Grouping and speed are solid now. But I keep noticing another issue: on bright scenes, the white text just vanishes. Beach shots, sky shots, anything with a light lower third. I need to figure out positioning next — either move the text or darken the background behind it, per-scene.


← back to blog