Browser-local SRT validation
Validate an SRT subtitle file
Choose an SRT file or paste supported SRT text. Subtitle Preflight checks cue numbering, timestamp syntax, timing, and profile-based readability rules in your browser, then shows cue-level findings you can export locally.
What does an SRT validator check?
An SRT validator checks cue numbering, comma-millisecond timestamps, timing order, overlaps, gaps, duration, reading speed, and line limits. Subtitle Preflight runs these checks in the browser and reports issues without editing or uploading the file.
Choose an .srt file or paste supported SRT text to begin.
Check a supplied subtitle file
Supported: .srt, .vtt, and .webvtt text files. Current browser-local limits: 5 MiB and 10,000 cues.
Or drag and drop one supported subtitle file here.
Privacy: Analyzed in this browser; subtitle contents are not sent to our application server in the default workflow.
Findings
No subtitle loaded
Choose a file, paste subtitle text, or load a synthetic sample to see cue-level findings here. Export becomes available after analysis succeeds.
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.
SRT structure at a glance
An SRT cue normally contains a numeric sequence value, one timing line, one or more text lines, and a blank line before the next cue. This parser expects comma-millisecond timestamps in the form HH:MM:SS,mmm --> HH:MM:SS,mmm.
Minimal valid SRT example
1
00:00:01,000 --> 00:00:03,000
Synthetic subtitle example.
2
00:00:03,120 --> 00:00:05,000
Second synthetic cue.Synthetic example. The second cue starts after the first cue ends and uses a blank line between blocks.
Invalid SRT example
1
00:00:01.000 --> 00:00:03.000
Dot milliseconds are not accepted by this SRT parser.
3
00:00:04,000 --> 00:00:03,500
The sequence skips 2 and the end is not after the start.Synthetic example. The parser reports dot-millisecond syntax, the sequence gap, and the invalid timing order. It does not repair the file.
Common SRT errors this validator reports
| Issue | Expected syntax or condition | Finding or diagnostic ID | What to review |
|---|---|---|---|
| Missing or out-of-sequence cue number | Numeric cue values follow the expected sequence | SRT_INDEX_MISSING_OR_OUT_OF_SEQUENCE | Check the cue number and nearby block boundaries. |
| Invalid SRT timestamp | HH:MM:SS,mmm --> HH:MM:SS,mmm | TIMESTAMP_SYNTAX_INVALID | Replace dot milliseconds or malformed timing punctuation in the source file. |
| End time is not after start time | Cue end must be later than cue start | TIMESTAMP_END_NOT_AFTER_START | Review the cue start and end values. |
| Overlapping adjacent cues | A cue should not start before the previous cue ends | CUE_OVERLAP | Confirm whether the overlap is intentional for the delivery workflow. |
| Gap below selected minimum | Gap is at least the selected profile value | GAP_BELOW_PROFILE_MIN | Compare the adjacent cue boundary with the selected profile. |
| Duration outside selected range | Cue duration stays within the selected profile range | DURATION_BELOW_PROFILE_MIN or DURATION_ABOVE_PROFILE_MAX | Review timing and the selected profile; do not treat the default as universal. |
| Reading speed above selected maximum | CPS and WPM do not exceed selected profile values | CPS_ABOVE_PROFILE_MAX or WPM_ABOVE_PROFILE_MAX | Review cue text, duration, language, and the actual delivery requirement. |
| Too many lines or characters per line | Line values stay within selected profile limits | LINE_COUNT_ABOVE_PROFILE_MAX or CHARS_PER_LINE_ABOVE_PROFILE_MAX | Review line breaks and the applicable client or platform rule. |
| Empty cue text | A parsed cue contains visible text | CUE_TEXT_EMPTY | Check whether text is missing or the block is malformed. |
| Adjacent duplicate text | Adjacent cues do not contain the same normalized text | ADJACENT_TEXT_DUPLICATE | Confirm whether the repetition is intentional. |
| Malformed SRT block | Block contains supported sequence, timing, and text structure | SRT_BLOCK_MALFORMED | Review the reported source line and surrounding blank lines. |
What this SRT validator supports
.srtfile selection and pasted SRT text;- numeric cue sequence checks;
- comma-millisecond timestamp parsing;
- recoverable parser diagnostics with source-line context;
- deterministic timing, duration, CPS, WPM, line, empty-text, and adjacent-duplicate findings;
- editable named rule profile;
- local CSV and self-contained HTML export after a fresh check.
What it does not verify
The checker does not edit or repair the supplied SRT file. It does not compare subtitles with audio or video, and it cannot verify transcription accuracy, completeness, speaker identification, meaningful sounds, visual placement, accessibility or legal conformance, or acceptance by a client or platform.
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.
Review an SRT file before delivery
Run the browser-local check, inspect each cue-level finding, and download a local report when the result is fresh.
Frequently asked questions
Does the SRT validator upload my subtitle file?
In the implemented default workflow, parsing, checks, and report generation run in your browser. Subtitle content is not intentionally sent to an application server.
Does it repair invalid SRT files?
No. The checker reports supported parser and rule findings without changing the supplied file.
Should SRT timestamps use commas or dots?
This declared SRT parser expects commas for milliseconds, as in 00:00:01,000. Dot-millisecond syntax is reported as invalid SRT timing.
Does a clean SRT report prove accessibility compliance?
No. A file-only technical and readability preflight cannot verify source media, legal conformance, or client and platform acceptance.
Can I change the reading-speed and line limits?
Yes. Edit the visible profile for the applicable workflow, then rerun the check so the findings and export use the current values.