VTT — STYLE Blocks, Regions and Inline Markup
WebVTT exercising the parts of the format beyond plain text: a STYLE block with ::cue selectors, a named REGION, voice spans, cue classes, and inline bold/italic/underline/ruby markup. A parser that handles only timestamps and text will render the tag names as visible characters.
WEBVTT
STYLE
::cue {
background-color: rgba(0, 0, 0, 0.75);
color: #ffffff;
font-family: sans-serif;
}
::cue(.speaker-a) { color: #7dd3fc; }
::cue(.speaker-b) { color: #fca5a5; }
REGION
id:overlay width:60% lines:2 regionanchor:0%,100% viewportanchor:20%,90%
1
00:00:01.000 --> 00:00:04.000 region:overlay
<v Alex><c.speaker-a>Styled with a cue class</c>
2
00:00:04.500 --> 00:00:08.000 region:overlay
<v Sam><c.speaker-b>A different speaker colour</c>
3
00:00:08.500 --> 00:00:12.000
<b>Bold</b>, <i>italic</i>, <u>underline</u> and <ruby>漢<rt>kan</rt></ruby> markup
Specifications
- Cues
- 3
- Blocks
- STYLE, REGION
- Inline Tags
- v, c, b, i, u, ruby/rt
- Cue Classes
- speaker-a, speaker-b
What is a .vtt file?
WebVTT (VTT) is the W3C subtitle and caption format used by the HTML5 <track> element for timed text on the web. It extends the SubRip model with cue settings, positioning, styling, and metadata, and requires a WEBVTT header. It is the standard format for browser-based captions.
How to use this file
Use an example VTT to test HTML5 <track> caption rendering, cue-setting and positioning parsers, and converters between WebVTT and SRT.
How to use this file for testing
“VTT — STYLE Blocks, Regions and Inline Markup” is a deterministic Novus Examples fixture for Subtitle parsing, Video QA, Caption encoding. The same captions across SubRip, WebVTT, ASS/SSA, SBV, and TTML, plus a synced LRC lyric file — for testing subtitle parsers, players, burn-in tools, and format converters against known timings.
Documented properties for this file: 3 cues. Compare results against paired or grouped companions on this page when present (clean↔damaged, searchable↔scanned, or format twins) so scores stay reproducible across runs.
Download the file once, keep the path stable in CI or local scripts, and treat the spec table as the contract: dimensions, seeds, field lists, and roles are intentional. Corrupt or invalid samples are labelled as such — expect parsers to fail loudly rather than silently accept them.
Media fixtures are short and synthetic by design. Prefer waveform or transcript ground truth in the same group when measuring ASR, trim, upscale, or sync tools; do not assume broadcast-quality masters.
Parse the cues and check timings against the documented count; the same captions ship across subtitle formats so you can diff a converter against a known target.
Code examples
<video controls src="clip.mp4">
<track kind="captions" srclang="en" label="English" src="styled.vtt" default>
</video>Related files
- sccSCC — Broadcast CEA-608 CaptionsBroadcast closed captions as Scenarist SCC: SMPTE timecodes followed by hexadecimal CEA-608 byte pairs, with odd parity set on every byte as the standard requires. Uses pop-on mode — RCL to load, ENM to clear non-displayed memory, a preamble address code for row 15, the character pairs, then EOC to display. This is the fixture that exposes decoders which treat captions as text: the parity bits, the two-byte control codes and the frame-accurate timecodes all have to be handled.

- srtSRT — CJK (Japanese)Japanese captions mixing kana, kanji and full-width punctuation. Full-width characters occupy two columns in a monospaced renderer, so line-length limits computed in code points under-count them.

- srtSRT — CyrillicCyrillic captions — outside ASCII but still single-width and left-to-right, which isolates encoding handling from layout handling.

- srtSRT — Emoji and combining marksCharacters above the Basic Multilingual Plane, a composed/decomposed accent pair, and a zero-width-joiner sequence. Anything that measures caption length in UTF-16 code units rather than graphemes miscounts these.

- srtSRT — Mixed CRLF and LF Line EndingsOne file with both line-ending conventions — CRLF for the opening cues and bare LF for the rest, the shape a caption file takes after being edited on two platforms or assembled from two sources. Parsers that detect the convention once from the first line and then apply it to the whole file mis-split everything after the switch.

- srtSRT — No Trailing NewlineIdentical to the reference file except the final newline is missing, so the last cue is terminated by end-of-file rather than by a blank line. SubRip separates cues with a blank line, and parsers that split on a double newline and discard the remainder drop the final cue entirely — a bug that is invisible until a file happens to end this way.

Generated by generation/video_timedtext.py. Free for any use, no attribution required — license.