This page lists every check the Subtitle Validator and Fix Subtitles run on a subtitle file, what each one detects, what the fixer changes, and the threshold it uses. Each threshold names the file and line in the VideoText source it comes from, so you can see exactly what a "fixed" or "reported" result means.
Last reviewed: 2026-10-25, against commit d16bdcb.
Two tools do this work:
- Subtitle Validator runs in your browser. It reads the file line by line, reports problems, and repairs only the SRT problems that have one correct answer. A VTT file is reported but not rewritten.
- Fix Subtitles runs on the server. It re-breaks lines, gives fast captions more time, resolves overlaps, and writes the file back in the format you uploaded (SRT or VTT).
What neither tool can judge, such as whether the words or a translation are right, is covered in what stays manual on the Fix Subtitles page.
Subtitle Validator checks
Every check below runs on both formats unless the Formats column says otherwise. The repair column applies to SRT files only; on a VTT file every row is reported, not rewritten (client/src/lib/srtHealth.ts:464).
| Check (code name) | Formats | What is detected | What the repair does | Threshold or setting | Limitation or what stays manual |
|---|---|---|---|---|---|
timestamp-format |
SRT | A timing line not written as HH:MM:SS,mmm --> HH:MM:SS,mmm, such as a dot instead of a comma or missing hours. |
Rewrites the timing line in standard SRT format. No time changes. | Fixed pattern, client/src/lib/srtHealth.ts:132 |
None. |
unparseable-timing |
SRT | A line with an arrow that cannot be read as a timing line. | Reported only, not rewritten. The repair does not run on the file until the line is fixed, so no dialogue is dropped. | Fixed rule, client/src/lib/srtHealth.ts:237, client/src/lib/srtHealth.ts:442 |
Fix the line by hand, then check again. |
text-before-first-cue |
SRT | Text with no timing line before the first cue. | Reported only, not rewritten. The repair does not run until it is removed. | Fixed rule, client/src/lib/srtHealth.ts:267 |
Remove the text or give it a timing line. |
missing-blank-line |
SRT | A cue that runs straight on from the one before it, with no blank line between them. | Adds the blank line. | Fixed rule, client/src/lib/srtHealth.ts:251 |
None. |
stray-text |
SRT | Text after a blank line inside a cue. | Keeps that text with the cue it belongs to. | Fixed rule, client/src/lib/srtHealth.ts:273 |
None. |
numbering |
SRT | Cue numbers that are missing, repeated or out of sequence. | Renumbers cues 1, 2, 3. | Fixed rule, client/src/lib/srtHealth.ts:383 |
None. |
mixed-line-endings |
SRT, VTT | Windows and Unix line endings in the same file. | Makes line endings consistent. | Fixed rule, client/src/lib/srtHealth.ts:419 |
Shown as a note, not an error. |
empty-cue |
SRT, VTT | A cue with no text, or only formatting tags. A cue that reads only "<laughs>" counts as text. | Removes the cue. | Fixed rule, client/src/lib/srtHealth.ts:292, client/src/lib/srtHealth.ts:307 |
None. |
end-before-start |
SRT, VTT | A cue that ends before it starts. | Reported only, not rewritten. Listed under "Needs a decision". | Fixed rule, client/src/lib/srtHealth.ts:312 |
Either time could be the typo, so you choose. Fix Subtitles can repair it (see below). |
zero-duration |
SRT, VTT | A cue that starts and ends at the same time, so it never shows. | Reported only, not rewritten. | Fixed rule, client/src/lib/srtHealth.ts:315 |
The right end time is not in the file. |
short-duration |
SRT, VTT | A cue on screen for less than 0.8 seconds. | Reported only, not rewritten. | 0.8 seconds, fixed, client/src/lib/srtHealth.ts:128 |
Fix Subtitles can give it more time. |
out-of-order |
SRT, VTT | A cue that starts before the cue above it. | Sorts cues into time order. No time changes. | Fixed rule, client/src/lib/srtHealth.ts:336 |
None. |
overlap |
SRT, VTT | A cue that runs into the next one, where ending it early still leaves it readable. | Moves the earlier cue's end to the next cue's start. Start times never move. | The trimmed cue must stay on screen at least 0.7 seconds and keep at least half its time; fixed, client/src/lib/srtHealth.ts:124, client/src/lib/srtHealth.ts:363 |
None. |
overlap-unsafe |
SRT, VTT | An overlap where trimming would hide a caption: both cues start together, one sits entirely inside the other, or the trim would fall under the limit above. | Reported only, not rewritten. | Same limits as overlap, client/src/lib/srtHealth.ts:351 |
Decide which cue comes first, or check the real timing. |
flicker-gap |
SRT, VTT | A gap between two cues longer than zero and shorter than 0.1 seconds, which makes the caption blink. | Off by default. With "Also close gaps shorter than 0.1 s" ticked, extends the earlier cue to the next one. | 0.1 seconds, fixed, client/src/lib/srtHealth.ts:126. The option is user-configurable, client/src/components/SubtitleHealthChecker.tsx:403, client/src/lib/srtHealth.ts:512 |
Shown as a note. |
long-line |
SRT, VTT | A line longer than 42 characters, counting only visible text. | Reported only, not rewritten. | 42 characters, fixed, server/src/utils/subtitleQuality.ts:22, client/src/lib/srtHealth.ts:324 |
Re-breaking lines is done in Fix Subtitles. |
fast-reading |
SRT, VTT | A cue that needs more than 20 characters per second to read. A line break counts as one space. | Reported only, not rewritten. | 20 characters per second, fixed, server/src/utils/subtitleQuality.ts:23, client/src/lib/srtHealth.ts:330 |
Giving the cue more time is done in Fix Subtitles. |
mojibake |
SRT, VTT | Garbled accents and punctuation such as "é" for "é", from a file read in the wrong encoding. | Restores the original characters, but only when every character maps back exactly. Otherwise reported only. | Fixed rule, client/src/lib/srtHealth.ts:137, client/src/lib/srtHealth.ts:392 |
Text that cannot be recovered exactly stays as it is. |
replacement-char |
SRT, VTT | Characters already lost and shown as "�". | Reported only, not rewritten. | Fixed rule, client/src/lib/srtHealth.ts:400 |
The letters are not in the file. Retype them from the source. |
vtt-structure |
VTT | A block that cannot be read as a cue, such as missing or unreadable timing. | Reported only, not rewritten. | Fixed rule, client/src/lib/srtHealth.ts:427 |
Fix the block by hand. |
| File encoding notice | SRT, VTT | A file saved as Windows-1252 or UTF-16 rather than UTF-8. | Reported as a notice. The file is read in its real encoding. | Fixed rule, client/src/lib/srtHealth.ts:84 |
None. |