DFXP — TTML Under Its Other Extension
Timed text as DFXP — byte-for-byte a TTML document, just under the extension Netflix, Adobe and older captioning tool-chains still use. Same tt root, same head/body/div/p structure, same styling and region attributes. It exists to check that a caption parser dispatches on document content rather than on the file extension: a parser that accepts .ttml but rejects an identical .dfxp is exactly the bug this catches.
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling" xml:lang="en">
<head>
<styling>
<style xml:id="base" tts:fontFamily="sansSerif" tts:fontSize="80%" tts:color="white"
tts:backgroundColor="black" tts:textAlign="center"/>
</styling>
<layout>
<region xml:id="bottom" tts:origin="10% 75%" tts:extent="80% 20%" tts:displayAlign="after"/>
</layout>
</head>
<body region="bottom" style="base">
<div>
<p begin="00:00:01.000" end="00:00:03.000">Novus Examples — timed-text fixture</p>
<p begin="00:00:03.500" end="00:00:06.000">Second cue, two lines:<br/>this is the second line</p>
<p begin="00:00:06.500" end="00:00:09.000">Third cue with <span tts:fontStyle='italic'>italic</span> markup</p>
<p begin="00:00:09.500" end="00:00:12.000">Fourth cue — em dash, curly “quotes”, ellipsis…</p>
<p begin="00:00:12.500" end="00:00:15.000">Final cue.</p>
</div>
</body>
</tt>
Specifications
- Grammar
- W3C TTML 1
- Extension
- .dfxp
- Styling
- tts:fontStyle, region layout
- Cues
- 5
- Language
- en
- Regions
- 1
What is a .dfxp file?
DFXP (Distribution Format Exchange Profile, .dfxp) is the original name for what became TTML, and the extension is still in wide use — notably by Netflix, Adobe, and older captioning tool-chains. The bytes are TTML: the same tt root element, the same head/body/div/p structure, the same timing and region attributes. The extension signals provenance, not a different grammar.
How to use this file
Use an example .dfxp file to check that a caption parser dispatches on document content rather than on the file extension. A parser that accepts .ttml but rejects a byte-identical .dfxp is exactly the bug this file exists to catch.
How to use this file for testing
“DFXP — TTML Under Its Other Extension” is a deterministic Novus Examples fixture for Subtitle parsing, Conversion testing, Video QA. 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: 5 cues · en. 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="captions.dfxp" default>
</video>Related files
- assASS — Karaoke Timing and Override TagsAdvanced SubStation Alpha using the features that distinguish it from SubRip: per-syllable \k karaoke timings in centiseconds, a full V4+ style definition with primary and secondary colours, and an \an override that repositions a line. Converting this to SRT necessarily loses all of it, which makes it a good test of whether a converter warns about that or drops it silently.

- csvCSV — Cue Timing ReportPer-cue timings and text metrics for the shared cue list, as a caption QC tool would export them: start, end, duration, line count and character count. Useful as the expected output when testing a caption analyser, and as a quick way to check reading-rate calculations against known values.

- jsonJSON — Timed-Text Suite IndexA machine-readable index of all 67 timed-text, streaming-manifest and ad-signalling fixtures in this wave, with id, format, path and byte size for each. Useful as a work-list when running a parser across the whole suite, and as a manifest to diff against after regenerating.

- lrcLRC — Enhanced Word-Level TimingEnhanced LRC with per-word timings in angle brackets alongside the usual per-line timestamps — the format karaoke and lyric-sync apps consume. Includes the standard metadata tags, an offset field, and a final empty timestamp that clears the display. Simple LRC parsers read only the line timings and silently render the word markers as visible text.

- ttmlTTML — IMSC Nested Spans and RegionsTTML using the features broadcast caption profiles rely on: two layout regions, named styles including a text outline, a declared frame rate and media time base, and spans nested two deep so styles cascade. Converting this to SubRip necessarily flattens all of it. Tests whether a TTML implementation resolves style inheritance or only reads the leaf text.

- webmAlpha Channel — Opaque VP9 TwinThe same codec and container with NO alpha plane, as the control for the alpha clip in this group. Useful for checking that alpha detection reads the pixel format rather than assuming every WebM is transparent — and for confirming a compositing bug is in the alpha handling rather than in the player.

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