TimecodaLabsubtitle timeline studio
Open the full studio

CPS calculator — reading speed, both directions

Reading speed is one division: characters ÷ seconds on screen. This page does that division for a single cue, scans a whole subtitle file and lists the worst cues, and solves the reverse problem — give it a character count and a target speed and it tells you how long the text needs to stay on screen. Everything runs in your browser.

1 · One cue: text + time on screen

2 · A whole file: every cue, worst first

Drop an .srt / .vtt / .ass file here
or click to choose one · nothing leaves this page

3 · Reverse: how long does this text need?

The same question at the three speeds this site uses most: 17 cps (Netflix preset), 21 cps (YouTube preset) and 20 cps (short-form preset) — read from the same preset file the checker uses.

CPS arithmetic, computed on this page

Characters17 cps21 cps20 cps

Milliseconds needed to stay within the limit, rounded up — the shortest hold that still passes. Every cell is produced by the code that runs the tools above; nothing in this table is copied from a document or typed by hand.

Time on screen17 cps21 cps20 cps

The inverse: characters that fit in a given hold time, rounded down. Read the two tables together: a line that needs more milliseconds than the cue actually has is the cue the file scan flags.

The four presets, and where their numbers come from

Rule setCPLCPSMin durationMax durationMax linesStatus

Two published values behind the strictest preset here, both from Netflix's partner documentation (retrieved for this page): English (USA) Timed Text Style Guide — 42 characters per line, reading speed up to 20 characters per second for adult programmes and 17 for children's; Chinese (Simplified) Timed Text Style Guide — 16 characters per line, up to 9 characters per second for adult programmes and 7 for children's. The Netflix preset on this site uses 17 cps, the stricter of the two published figures, so a file that passes it also passes the published adult limit for English. The YouTube and short-form presets are industry rules of thumb, marked indicative because nobody publishes them as requirements.

When the CPS number passes but the line still does not read

EffectWhy the metric does not see itWhat to check as well
Two lines shown at once CPS divides the cue's characters by the cue's time. It has no model of the eye moving from the end of line one back to the start of line two, so two packed lines and one roomy line score the same Line count, and CPL for the longest line — both are separate checks in the guideline checker
Punctuation, dashes, brackets Every character counts the same, so a full stop costs exactly as much as a letter, even though dialogue with dashes, ellipses and bracket labels takes longer to parse than plain prose of the same length How the line reads aloud, not just its length — the metric is a floor, not a verdict on comprehension
Scripts where one character carries more CPS counts characters regardless of script, which is exactly why the published limits differ per language: 20/17 cps for English (USA) against 9/7 cps for Chinese (Simplified) Use a limit meant for the language of the file. A CJK file judged against a Latin-script preset is measured with the wrong ruler, not failing by accident
Cue boundaries and gaps The calculation is per cue, so a run of cues that each pass the limit can still leave a viewer with no recovery time between them Overlaps and the gap between cues — also separate checks, and a run of back-to-back cues reads harder than one cue of the same total length
Zero or missing duration A cue whose end is not after its start has no time at all, so its reading speed is infinite no matter how short the text. Empty cues report zero characters Both are reported as their own statuses in the file scan instead of being quietly counted as passing

Calculating for a whole season?

The studio runs the same checks on every open file and exports the per-cue numbers as a CSV or JSON report you can attach to a delivery. Pro is a $9 one-time licence — lifetime, up to 3 devices — with a 7-day refund while the key is unactivated. Calculating and scanning one file here stays free.

Open the studio

Questions people ask before using it

What exactly counts as a character here?

The count the guideline checker uses: the cue's lines joined with a single space, runs of whitespace collapsed to one, then the length of that string — spaces and punctuation included. It is a JavaScript string length, so a character outside the Basic Multilingual Plane (rare emoji, a few CJK extension glyphs) counts as two units.

My lines are under the character limit but the file still fails on CPS. Why?

Reading speed is measured over the whole cue, not per line: all characters in the cue divided by how long the cue is on screen. Two lines of 40 characters held for three seconds is 80 characters over three seconds — roughly 27 characters per second. Line length and reading speed are separate checks, and a file can pass one while failing the other.

Is there one international CPS limit?

No. The published limits differ per language because a character carries different amounts of information in different scripts — Netflix's English (USA) guide allows up to 20 characters per second for adult programmes and 17 for children's, while the Chinese (Simplified) guide allows up to 9 and 7. Pick the limit that matches the language and the deliverable; the presets above are presets, not law.

Does the calculator fix the timing too?

No, it measures and computes. Bringing a cue under the limit means shortening the text, splitting one cue into two, or holding it longer — editorial decisions. This page tells you which cues need it and by how much (the reverse solver returns the exact number of milliseconds); the studio applies the mechanical parts such as re-timing and splitting.