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.

Synthetic example created for Subtitle Preflight; CC0

Findings

No subtitle loaded

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.

Ready for a subtitle fileChoose an SRT or WebVTT file, paste subtitle text, or load a synthetic sample.
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.

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

IssueExpected syntax or conditionFinding or diagnostic IDWhat to review
Missing or out-of-sequence cue numberNumeric cue values follow the expected sequenceSRT_INDEX_MISSING_OR_OUT_OF_SEQUENCECheck the cue number and nearby block boundaries.
Invalid SRT timestampHH:MM:SS,mmm --> HH:MM:SS,mmmTIMESTAMP_SYNTAX_INVALIDReplace dot milliseconds or malformed timing punctuation in the source file.
End time is not after start timeCue end must be later than cue startTIMESTAMP_END_NOT_AFTER_STARTReview the cue start and end values.
Overlapping adjacent cuesA cue should not start before the previous cue endsCUE_OVERLAPConfirm whether the overlap is intentional for the delivery workflow.
Gap below selected minimumGap is at least the selected profile valueGAP_BELOW_PROFILE_MINCompare the adjacent cue boundary with the selected profile.
Duration outside selected rangeCue duration stays within the selected profile rangeDURATION_BELOW_PROFILE_MIN or DURATION_ABOVE_PROFILE_MAXReview timing and the selected profile; do not treat the default as universal.
Reading speed above selected maximumCPS and WPM do not exceed selected profile valuesCPS_ABOVE_PROFILE_MAX or WPM_ABOVE_PROFILE_MAXReview cue text, duration, language, and the actual delivery requirement.
Too many lines or characters per lineLine values stay within selected profile limitsLINE_COUNT_ABOVE_PROFILE_MAX or CHARS_PER_LINE_ABOVE_PROFILE_MAXReview line breaks and the applicable client or platform rule.
Empty cue textA parsed cue contains visible textCUE_TEXT_EMPTYCheck whether text is missing or the block is malformed.
Adjacent duplicate textAdjacent cues do not contain the same normalized textADJACENT_TEXT_DUPLICATEConfirm whether the repetition is intentional.
Malformed SRT blockBlock contains supported sequence, timing, and text structureSRT_BLOCK_MALFORMEDReview the reported source line and surrounding blank lines.

What this SRT validator supports

  • .srt file 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.

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.

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.