Reproducible lab · Synthetic subtitle evidence
Subtitle timing and accessibility boundary benchmark
Exercise the real local SRT/WebVTT engine across safe, blocking, uncertain, malformed and adversarial inputs. The benchmark measures deterministic parser decisions and byte integrity—not language quality, media synchronization or platform acceptance.
Engine, sources and results reviewed 2026-08-09. This lab contains no advertising.
Method
- Hash exact core, renderer and synthetic fixture source bytes.
- Compute the engine manifest from the core and renderer hashes; abort artifact generation if that identity is absent.
- Run the three named fixtures and 70 adversarial cases through the same bounded engine used by the browser.
- Generate same-format output, conditional conversion, CSV, JSON, SVG, Markdown and Receipt v1 at a fixed clock.
- Repeat artifact generation three times and compare filename, body bytes and SHA-256.
- Exercise Chromium and WebKit at desktop, 390 px and 320 px in EN/TR and light/dark: 24 tool cases, 445 assertions.
- Mutate one artifact byte and one receipt-core field, then prove the original declared hash no longer matches.
Expected versus observed
| Scenario | Expected | Observed | Evidence boundary |
|---|---|---|---|
| Supported 3-cue SRT, declared 8 s | PASS | PASS · 7 artifacts | Receipt core 1204f9ff64aac95dc5359d7c7c64259b7b6390ce20cb67105a4f64a81a236b05 |
| Overlap plus cue beyond declared media | BLOCK | BLOCK · 7 artifacts | Every output is review-only; receipt core 9ac24f4089fcf8c24b46b708c6db8b187fdc7168fd87542b8a18e2a55a5267a0 |
| WebVTT STYLE, REGION, settings and dense text | INDETERMINATE | INDETERMINATE · 6 artifacts | Unsupported rendering surfaces remain explicit; receipt core 360825c4bd5085bc7033f99d0f111e0ba424d8024d15eb68f610e3a5f71038d5 |
| Missing media duration | INDETERMINATE | INDETERMINATE | The engine cannot prove the out-of-media boundary. |
| WebVTT non-breaking-space timing separator | Reject | Rejected | invalid_timing_line; no artifact published. |
| 10,001 cues or input over 5 MiB | Reject | Rejected | Bounded input fails closed before delivery output. |
| WebVTT cue IDs converted to SRT | No lossy conversion | Conversion withheld | Same-format VTT evidence remains available. |
| Formula and script-shaped cue text | Inert evidence | PASS | CSV is formula-neutralized, HTML is inserted as text, and SVG omits raw cue text. |
Tamper experiment: integrity fails visibly
Original fixture receipt
Declared receipt-core SHA-256
1204f9ff64aac95dc5359d7c7c64259b7b6390ce20cb67105a4f64a81a236b05Declared normalized SRT SHA-256
b6a82ed5491773946c10d62df8de6c99016b4b9e6f4cb81ec369f61bb8dc847bOne-field / one-byte mutation
Changing result_summary.cue_count from 3 to 4 recomputes the receipt core as:
322afec69b36dbbed29e648a55dc239070eb0666e41ddeb20d04e977afca87ddFlipping one byte in the SRT recomputes it as:
d05db1fcecd691c2ce7cad4c240b0add006048fc8b505b8e51d3601938c67ae9Observed: both mismatches are BLOCK conditions.
This detects integrity drift only. A matching receipt does not establish authorship, source authenticity, factual correctness or accessibility.
Coverage and deliberate uncertainty
Syntax and timing
SRT/WebVTT structure, timestamp grammar, start/end order, source order, overlap, media boundary, gaps and bounded inline timestamps are checked.
Review heuristics
Duration, estimated characters per second, line count and line length are deterministic profile signals. Crossing one requires review; it is not automatically an accessibility failure.
Unsupported surfaces
WebVTT STYLE, REGION, cue settings, markup and identifiers are inventoried. Where faithful rendering or conversion is not proven, the engine returns uncertainty or withholds conversion.
Not measured
Audio accuracy, shot changes, frame-level sync, translation, meaningful non-speech audio, speaker correctness, player rendering, safe area and real-user comprehension.
Exact source and report manifest
- Tool page
b3d2a7367895c5cf1e1c6e0854c649174edb1b39a0978bde6e9e6cfdf74ed3af - Engine core
478b13db5ea9551a3d4ea8c16853b9b443477166831ba56f1745b8e815a6e87f - Renderer
a48e2b82e59e6c53cdcc13ebc202738d534354eba6ee58a847fa2a4822ffb8fb - Synthetic fixture module
8e80ae62e039a57fcd3a5058bd375e73636b46d1c268e2cec582eb6c250ef967 - Engine manifest
e7424750d6c2376baad7472d2074c5a74294458a9717883e44940ede77246604 - Unit report
172f53011dda6a77e335b8eeab6ab77c05424d5367752ef044361417a4c7ce60 - Browser report
2a31604bddffa620a4dc3947a22c35381970130e3dd3588f3b28cb20c07793ac - Independent red-team report
b22a153d57dfefb7ded5941c300310358c067f9ecf29b7a32d14aef403014467
Reproduce
shasum -a 256 app/tools/subtitle-qa-studio/index.html \
app/js/renderers/subtitle-qa-core-20260809.js \
app/js/renderers/subtitle-qa-20260809.js \
app/fixtures/subtitle-qa-v1/fixtures.mjs
node scripts/subtitle_qa_unit_20260809.mjs
node scripts/subtitle_qa_browser_20260809.mjs
node scripts/subtitle_qa_independent_redteam_20260809.mjs
node scripts/subtitle_cluster_gate_20260809.mjsRun from the repository root with Node.js, Chrome/Chromium and Playwright WebKit available. A source change must update its evidence; copying old hashes into new content is a failing provenance condition.
Sources, privacy, limits and correction
- W3C WebVTT, 20 May 2026 Candidate Recommendation DraftFormat and parsing basis; reviewed 2026-08-09.
- W3C WAI Captions/SubtitlesAccessibility context, not a claim that this parser audits WCAG.
- Netflix timing guidancePlatform-specific editorial reference, not a FastTool certification profile.
- BBC Subtitle GuidelinesBroadcaster-specific editorial reference, not a compliance claim.
Fixtures are synthetic; no user subtitle data is collected by this lab. The linked workbench processes supported bytes locally. Normal static assets and consented analytics may use the network, but user subtitle text, filenames and hashes are excluded from analytics.
Supported input and claim boundaries are detailed in the paired workflow guide. Verify packets with the Receipt Verifier. Report a reproducible defect to corrections@fasttool.app with the scenario, source hash and observed output.