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:
- Punctuation after the word: +3 for comma/semicolon/colon, +4 for period/exclamation/question
- Proximity to middle: +2 for dead center, decaying as you move away from midpoint
- Would create a one-word orphan: −5 (killing this possibility)
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.