Synthetic practice corpus · 1.0.0
Choose a case and predict the result
All twenty files are original synthetic text. Defaults: 20 characters/second and 42 characters/line. Structural findings require repair; editorial warnings require judgment; scope warnings identify checks this tool does not perform.
Open the existing subtitle checker, choose a downloaded case, then compare the findings below. Keep this page open as your reference.
Download versioned manifest and exact input strings
srt-clean · SRT clean control (SRT)
Establish a small readable numeric cue.
Establish a small readable numeric cue.
- Structural findings
- None expected within this limited checker.
- Editorial warnings
- None expected within this limited checker.
- Outside this check
- None expected within this limited checker.
1
00:00:01,000 --> 00:00:04,000
Map the room.
srt-unicode · SRT multilingual text (SRT)
Preserve original UTF-8 accents, CJK and emoji.
Preserve original UTF-8 accents, CJK and emoji.
- Structural findings
- None expected within this limited checker.
- Editorial warnings
- None expected within this limited checker.
- Outside this check
- None expected within this limited checker.
1
00:00:01,000 --> 00:00:06,000
Café — 東京 🌍
srt-dot · SRT decimal separator (SRT)
Reject periods under this corpus's comma-based SRT policy.
Reject periods under this corpus's comma-based SRT policy.
- Structural findings
- Cue 1: Invalid SRT timestamp; check separators and minute/second ranges.
- No readable timed cues found.
- Editorial warnings
- None expected within this limited checker.
- Outside this check
- None expected within this limited checker.
1
00:00:01.000 --> 00:00:04.000
Map the room.
srt-range · SRT minute range (SRT)
Reject a minute component of 60.
Reject a minute component of 60.
- Structural findings
- Cue 1: Invalid SRT timestamp; check separators and minute/second ranges.
- No readable timed cues found.
- Editorial warnings
- None expected within this limited checker.
- Outside this check
- None expected within this limited checker.
1
00:60:01,000 --> 00:60:04,000
Map the room.
srt-missing-end · SRT missing end timestamp (SRT)
Require a complete timing line.
Require a complete timing line.
- Structural findings
- Cue 1: Missing or malformed timing line.
- No readable timed cues found.
- Editorial warnings
- None expected within this limited checker.
- Outside this check
- None expected within this limited checker.
1
00:00:01,000 -->
Map the room.
srt-reversed · SRT reversed duration (SRT)
Reject an ending before the start.
Reject an ending before the start.
- Structural findings
- Cue 1: End time must be later than start time.
- Editorial warnings
- None expected within this limited checker.
- Outside this check
- None expected within this limited checker.
1
00:00:04,000 --> 00:00:01,000
Map the room.
srt-empty · SRT empty caption (SRT)
Flag missing caption text under the local delivery policy.
Flag missing caption text under the local delivery policy.
- Structural findings
- Cue 1: Cue text is empty.
- Editorial warnings
- None expected within this limited checker.
- Outside this check
- None expected within this limited checker.
1
00:00:01,000 --> 00:00:04,000
srt-overlap · SRT intentional overlap (SRT)
Prompt editorial review of two simultaneous voices.
Both intervals are well formed. Simultaneous captions can be intentional; inspect the intended player.
- Structural findings
- None expected within this limited checker.
- Editorial warnings
- Cue 2: Cue overlaps an earlier cue; confirm whether simultaneous captions are intentional.
- Outside this check
- None expected within this limited checker.
1
00:00:01,000 --> 00:00:05,000
Left.
2
00:00:02,000 --> 00:00:04,000
Right.
srt-missing-separator · SRT missing blank separator (SRT)
Detect a second timing line swallowed into caption text.
Detect a second timing line swallowed into caption text.
- Structural findings
- Cue 1: Another timing line occurs inside cue text; check for a missing blank line between cues.
- Editorial warnings
- None expected within this limited checker.
- Outside this check
- None expected within this limited checker.
1
00:00:01,000 --> 00:00:10,000
One.
2
00:00:05,000 --> 00:00:06,000
Two.
srt-zero-duration · SRT zero duration (SRT)
Require positive duration.
Require positive duration.
- Structural findings
- Cue 1: End time must be later than start time.
- Editorial warnings
- None expected within this limited checker.
- Outside this check
- None expected within this limited checker.
1
00:00:01,000 --> 00:00:01,000
Map the room.
vtt-clean · WebVTT clean control (VTT)
Accept short WebVTT timestamps.
Accept short WebVTT timestamps.
- Structural findings
- None expected within this limited checker.
- Editorial warnings
- None expected within this limited checker.
- Outside this check
- None expected within this limited checker.
WEBVTT
00:01.000 --> 00:04.000
Map the room.
vtt-settings · WebVTT valid positioning settings (VTT)
Keep valid line, position, size and alignment settings distinct from malformed timestamps.
These settings use forms defined by the pinned draft. The checker leaves all settings unvalidated and asks for player inspection; this is a scope warning, not an editorial defect.
- Structural findings
- None expected within this limited checker.
- Editorial warnings
- None expected within this limited checker.
- Outside this check
- Cue 1: WebVTT cue settings are not validated; inspect positioning in the delivery player.
WEBVTT
00:01.000 --> 00:04.000 line:90% position:50% size:80% align:center
Map the room.
vtt-bom · WebVTT UTF-8 BOM (VTT)
Accept an optional initial byte-order mark with original UTF-8 text.
Accept an optional initial byte-order mark with original UTF-8 text.
- Structural findings
- None expected within this limited checker.
- Editorial warnings
- None expected within this limited checker.
- Outside this check
- None expected within this limited checker.
WEBVTT
00:01.000 --> 00:04.000
Café 🌍
vtt-note-identifier · WebVTT comment and identifier (VTT)
Skip an original NOTE block and accept a nonnumeric cue identifier.
Skip an original NOTE block and accept a nonnumeric cue identifier.
- Structural findings
- None expected within this limited checker.
- Editorial warnings
- None expected within this limited checker.
- Outside this check
- None expected within this limited checker.
WEBVTT
NOTE original practice note
No source recording exists.
room-label
00:01.000 --> 00:04.000
Map the room.
vtt-comma · WebVTT wrong separator (VTT)
Reject SRT-style commas in WebVTT.
Reject SRT-style commas in WebVTT.
- Structural findings
- Cue 1: Invalid VTT timestamp; check separators and minute/second ranges.
- No readable timed cues found.
- Editorial warnings
- None expected within this limited checker.
- Outside this check
- None expected within this limited checker.
WEBVTT
00:01,000 --> 00:04,000
Map the room.
vtt-range · WebVTT second range (VTT)
Reject a seconds component of 60.
Reject a seconds component of 60.
- Structural findings
- Cue 1: Invalid VTT timestamp; check separators and minute/second ranges.
- No readable timed cues found.
- Editorial warnings
- None expected within this limited checker.
- Outside this check
- None expected within this limited checker.
WEBVTT
00:60.000 --> 01:04.000
Map the room.
vtt-missing-end · WebVTT missing end timestamp (VTT)
Require an end timestamp.
Require an end timestamp.
- Structural findings
- Cue 1: Missing or malformed timing line.
- No readable timed cues found.
- Editorial warnings
- None expected within this limited checker.
- Outside this check
- None expected within this limited checker.
WEBVTT
00:01.000 -->
Map the room.
vtt-start-order · WebVTT decreasing start times (VTT)
Classify decreasing start times as a structural violation of the pinned draft.
The start times are out of order, but these two intervals do not intersect. Do not invent an overlap warning from the largest earlier end time.
- Structural findings
- Cue 2: Cue starts before the preceding cue.
- Editorial warnings
- None expected within this limited checker.
- Outside this check
- None expected within this limited checker.
WEBVTT
00:05.000 --> 00:08.000
First.
00:01.000 --> 00:04.000
Second.
vtt-overlap · WebVTT intentional overlap (VTT)
Allow overlapping cues whose start times remain ordered.
The pinned draft permits overlapping subtitle cues. Placement and simultaneous voices need editorial review; chapters are outside this corpus.
- Structural findings
- None expected within this limited checker.
- Editorial warnings
- Cue 2: Cue overlaps an earlier cue; confirm whether simultaneous captions are intentional.
- Outside this check
- None expected within this limited checker.
WEBVTT
00:01.000 --> 00:05.000
Left.
00:02.000 --> 00:04.000
Right.
vtt-header-separator · WebVTT missing header separator (VTT)
Require a blank line after the WEBVTT signature.
Require a blank line after the WEBVTT signature.
- Structural findings
- Separate the WEBVTT header from the first cue with a blank line.
- No readable timed cues found.
- Editorial warnings
- None expected within this limited checker.
- Outside this check
- None expected within this limited checker.
WEBVTT
00:01.000 --> 00:04.000
Map the room.
Practice a three-error repair with the walkthrough and reference. Playback and wording still need a separate review.
Who this is for, and who can skip it
Use this corpus if you hand SRT or WebVTT files to a client, a platform or a translator and want to recognise a broken file before someone else does. It is also useful for reviewers who receive subtitle files and need to tell a hard error from a judgment call.
You can skip it if you only deliver captions burned into the picture, because there is no separate file to break. You can also skip it if your platform already rejects malformed files on upload and you always watch the result; the corpus mainly saves time when nobody downstream will tell you a file is wrong.
The rules the cases are built on
WebVTT has a written specification. The W3C Candidate Recommendation Draft of May 20, 2026 says a file starts with the WEBVTT signature, must be UTF-8, and needs two or more line breaks between the header and the first cue. Timestamps use a full stop before three millisecond digits, and the hour field is optional when it is zero. Each cue end time must be greater than its start time, start times must not decrease through the file, cue identifiers must be unique and cannot contain the arrow separator, and cue blocks are separated by blank lines. The draft also says different cues can overlap. [1]
SRT has no equivalent W3C specification, so the corpus follows a documented local convention: numbered cues, comma before milliseconds, and a blank line between cues. YouTube lists SRT as a basic format that must be plain UTF-8 and ignores styling and positioning, while it lists WebVTT as supporting positioning with styling limited to bold, italic and underline. [2] That is why the same text can look different depending on which format you deliver.
All twenty cases and their expected results
Expected results were written before running the checker. A structural error means the file breaks the stated rule. An editorial review means the file is valid but a person should confirm the choice was intended.
| Case | Format | Expected result | What it teaches |
|---|---|---|---|
| Clean control | SRT | No findings | Baseline for a minimal valid cue |
| Multilingual text (accents, CJK, emoji) | SRT | No findings | UTF-8 text should survive unchanged |
| Full stop before milliseconds | SRT | Structural error; no readable cues | SRT under this convention uses a comma |
| Minute value of 60 | SRT | Structural error; no readable cues | Minutes run 00 to 59 |
| Missing end timestamp | SRT | Structural error; no readable cues | A timing line needs start and end |
| End before start | SRT | Structural error (invalid duration) | Reversed ranges cannot display |
| Empty caption text | SRT | Structural error under the local delivery policy | A timed cue with nothing to read |
| Two voices overlapping | SRT | Editorial review (overlap) | Overlap can be intentional |
| Missing blank separator | SRT | Structural error (missing separator) | A second cue gets swallowed into the first |
| Zero duration | SRT | Structural error (invalid duration) | Start equal to end shows nothing |
| Clean control with short timestamps | WebVTT | No findings | Hours can be omitted when zero [1] |
| Valid position, line, size and align settings | WebVTT | No findings | Cue settings are not timing errors |
| UTF-8 byte order mark | WebVTT | No findings | An initial BOM is allowed [1] |
| NOTE comment and named identifier | WebVTT | No findings | Comments and nonnumeric IDs are valid |
| Comma before milliseconds | WebVTT | Structural error; no readable cues | WebVTT uses a full stop [1] |
| Seconds value of 60 | WebVTT | Structural error; no readable cues | Seconds run 00 to 59 |
| Missing end timestamp | WebVTT | Structural error; no readable cues | Same rule as SRT |
| Start times going backwards | WebVTT | Structural error (start order) | Start times must not decrease [1] |
| Two voices overlapping, ordered starts | WebVTT | Editorial review (overlap) | Overlap is allowed by the draft [1] |
| No blank line after WEBVTT | WebVTT | Structural error; no readable cues | The header needs its own gap [1] |
Worked example: three one-character fixes
The most common failures in this corpus are tiny. The SRT full-stop case reads 00:00:01.000 --> 00:00:04.000; changing both full stops to commas makes it match the clean control. The WebVTT comma case is the mirror image: 00:01,000 must become 00:01.000. Files converted between formats by hand often carry exactly this mistake.
The WebVTT header case has WEBVTT on the first line and the first timing line directly beneath it. Adding one empty line after WEBVTT is the whole repair. In each case, keep the original, fix a copy, rerun the check, and only then open the file with the video. A one-character fix that parses can still be paired with the wrong cut.
How to practise with the corpus
- Pick one case and write down what you expect before opening the checker.
- Run the checker and compare its report with the expected result in the table and the downloadable manifest.
- Treat structural errors as must-fix. Treat overlap warnings as a question for the editor: two speakers talking at once is a legitimate reason to overlap.
- Repair a copy, never the original fixture, and recheck the edited copy.
- Finish by loading a real subtitle file of your own with its video in the player you deliver to. The fixtures have no video, so they cannot test synchronisation.
Method and boundaries
Version 1.0.0 contains twenty original UTF-8 text fixtures. Findings were specified independently of the checker and split into structural findings, editorial warnings and checks outside scope. WebVTT cases follow the May 20, 2026 W3C draft; SRT cases follow the local convention above. [1]
The corpus does not claim complete validation of either format. A clean report does not establish correct words, synchronisation, styling, reading speed or accessibility. Advanced WebVTT features such as regions and styling blocks are outside its scope.
Questions before you decide
Is an overlapping cue an error?
Not by itself. The W3C WebVTT draft says different cues can overlap, as long as start times stay in order. The corpus reports overlap as an editorial review item so a person can confirm it was intended, for example when two people speak at once.
Will YouTube keep the bold text or positioning in my SRT file?
No. YouTube lists SRT as a basic format with no styling or positioning recognised and requires plain UTF-8. WebVTT supports positioning there, with styling limited to bold, italic and underline.
Does a clean checker report mean my subtitles are ready?
No. It only means the file structure matches the rules tested. You still need to check the words against the audio and watch the file with the final video in the destination player.
Sources & verification
Product details and prices can change. Check the linked provider before buying.
- W3C WebVTT Candidate Recommendation Draft, May 20, 2026 Accessed 29 Oct 2026
- YouTube Help: supported subtitle and closed caption files Accessed 29 Oct 2026
Sources link directly to providers. Product buttons may use separately labeled affiliate links. Read our disclosure.
