Short answer: CPS vs WPM

CPS measures visible non-whitespace characters per second; WPM measures whitespace-separated words per minute. Neither is a universal pass/fail rule—use the threshold required by the client, platform, language, audience, or program.

What characters per second measures

CPS divides the count of visible, non-whitespace characters by cue duration in seconds. The implemented engine removes markup tags, counts Unicode characters, and rounds displayed values to one decimal place.

CPS = visible non-whitespace characters ÷ duration in seconds

What words per minute measures

WPM divides whitespace-separated words by cue duration in minutes. It can better reflect word density, while CPS captures punctuation and long words differently.

WPM = word count ÷ (duration in seconds ÷ 60)

Worked CPS and WPM examples

The examples below use synthetic cue text: “Read this now”. Markup is absent, the text contains 11 non-whitespace characters and 3 whitespace-separated words, and the cue lasts 2 seconds.

CPS example

11 visible non-whitespace characters ÷ 2 seconds = 5.5 CPS

Subtitle Preflight counts Unicode characters after markup removal, excludes whitespace from the character count, and displays CPS to one decimal place.

WPM example

3 words ÷ (2 seconds ÷ 60) = 90 WPM

The implemented calculation uses whitespace-separated words. Language, tokenization, punctuation, markup, and cue duration can make CPS and WPM tell different stories.

These calculations explain the implemented formulas. They do not establish a universal reading-speed limit.

Why CPS and WPM can disagree

A cue with several short words may have high WPM but moderate CPS. A cue with fewer long words may show the reverse. Language, tokenization, punctuation, and markup choices also affect the measures.

Choose thresholds for the actual workflow

General readability v1.0 uses 20 CPS and 160 WPM as accepted product defaults. Those values are editable and recorded in exports. They are not presented as a legal, accessibility, platform, broadcaster, or universal limit.

Review reading speed in a supplied file

Open the local subtitle checker to inspect cue-level duration, CPS, and WPM findings alongside overlap, gap, and line checks.

Technical/readability preflight only — not certification or a substitute for media review.

The checker does not compare subtitles with audio or video and cannot verify accuracy, completeness, speaker identification, meaningful sounds, visual placement, accessibility or legal conformance, or client/platform acceptance.

Check reading speed in a subtitle file

Run a browser-local check to review cue-level duration, CPS, and WPM under the visible profile. Edit the thresholds for the applicable workflow, then rerun before exporting.

Frequently asked questions

Should I use CPS or WPM?

Use the measures required by the applicable client or style guide; reviewing both can expose different reading-load patterns.

Does the checker account for language-specific segmentation?

No. Language-specific tokenization and reading models are outside the MVP.

Can I edit both thresholds?

Yes. Profile edits mark existing findings stale until the analysis is rerun.

How does Subtitle Preflight count characters for CPS?

It removes markup tags, counts visible non-whitespace Unicode characters, divides by cue duration in seconds, and displays the result to one decimal place.

Are 20 CPS and 160 WPM universal limits?

No. They are editable Subtitle Preflight product defaults, not legal, accessibility, platform, broadcaster, or universal requirements.