Free tool · the file stays on your device
Subtitle CPS checker
Check a subtitle file for reading speed, line length, overlapping cues and lines that stay on screen too short. The report lists every cue with its characters per second. Everything runs in your browser — the file is never uploaded.
The report
| Cue | Time | On screen | Characters | CPS | Longest line | Lines | Text | Problem |
|---|
No cue has a problem: every line fits the limits and every cue stays on screen long enough to be read.
Every cue of the file
| Cue | Time | On screen | Characters | CPS | Longest line | Lines | Text | Problem |
|---|
Four steps from a subtitle file to a list of fixes.
- 1 · Give the tool the file
- Drop an .srt or a .vtt file on the block, or pick it with the button. If the subtitles are not in a file yet, paste the text into the field below the limits. The file is read in the page: no request carries it and nothing is stored.
- 2 · Pick the limits
- Two presets are on the page. The standard one is the set of defaults of the Sonix subtitle API: 20 characters per second, 45 characters in a line, two lines. The comfortable one lowers the speed to the 15 characters per second a reader manages while the speech is playing. Every number has its source and the day it was read.
- 3 · Read the report
- The chart shows the speed of every cue, and the table under it lists the cues with a problem: the speed above the limit, a line that is too long, more lines than allowed, a cue that is too short to be read, a cue with no time on screen, or a cue that starts before the previous one ends.
- 4 · Fix the file and check again
- Download the report as a CSV with one row per cue, or copy it as text to send to the editor. Then fix the timings and the lines and run the file through the tool again: the report is a checklist, not a verdict.
Where every number of this tool comes from.
Two published numbers do the work: 20 characters per second as the limit of the Sonix subtitle API, and about 15 characters per second as the speed of comfortable reading. The rest follows from them.
| Preset | Characters per second | Characters in a line | Lines | Where the number comes from |
|---|---|---|---|---|
| Standard subtitle limits | 20 | 45 | 2 | the defaults of the Sonix subtitle API: max_cps 20, max_characters 45, subtitle_lines 1 or 2 |
| Comfortable reading | 15 | 45 | 2 | about 15 characters per second as the maximum for comfortable reading; the line length stays at the standard 45 characters |
| Reading speed of the “too short” check | 15 | — | — | the same comfortable reading speed: a cue is too short when the text needs more seconds than the cue stays on screen |
Source: Sonix API subtitle settings, https://sonix.ai/docs/api (accessed 2026-10-22); Talkio AI engineering overview, “Speech to text for deaf and hard of hearing users”, https://voicecontrol.chat/blog/posts/speech-to-text-for-deaf-and-hard-of-hearing-users-beyond-accuracy (accessed 2026-10-22). Both are recorded in the data file of the tool, apps/web/assets/tools/subtitle-cps-checker/data/standards.json.
- A character is a letter, a digit, a space or a punctuation mark of the visible text. Formatting tags and entities are resolved first, so & counts as one character and a voice tag does not count at all.
- The characters of a cue are the sum of its lines, and the speed is those characters divided by the seconds the cue stays on screen.
- A cue is too short when the text needs more seconds than the cue lasts at the comfortable reading speed of 15 characters per second.
- Two cues overlap when the second one starts before the first one ends. The report says by how many seconds.
Questions about the check.
- Is my subtitle file sent anywhere?
- No. The file is read in your browser with the file reader of the page, the numbers are counted there and the report is drawn there. There is no form to submit, no upload and no request that carries your subtitles, and nothing about the file is stored.
- What is characters per second?
- It is the reading speed of a subtitle: how many characters of the text a viewer has to read per second of screen time. A cue of 60 characters that lasts three seconds is 20 characters per second, which is the limit of the standard preset. The speed matters because a viewer who cannot keep up stops watching the text and starts watching the picture instead.
- Which files does the checker read?
- SubRip (.srt) and WebVTT (.vtt), the two formats that carry timecodes. The tool also reads pasted text, so a subtitle copied out of a document can be checked without saving a file. The format of the file you add is shown in the report.
- What counts as a cue that is too short?
- A cue whose text needs more seconds than the cue itself stays on screen. The reading time is the number of characters divided by the comfortable reading speed of 15 characters per second, so a cue of 45 characters needs three seconds to be read. A cue of one second with that text is flagged.
- Which limits should I use?
- The standard preset fits the defaults of a widely used subtitle API and is a good first pass. The comfortable preset is stricter and better for subtitles that carry information a viewer has to follow, such as instructions or names. Both presets use the same 45 characters a line and the same two lines.