Keep your original
Paste text or choose one UTF-8 SRT or VTT file, up to 5 MiB and 10,000 cues. Keep an unchanged copy. The checker never needs your video or an account.
Practical guide · SRT and WebVTT
Find overlapping captions, move every caption earlier or later by a chosen amount, and choose the right subtitle download. Follow these fictional examples in the same checker used for your own files—without uploading your subtitles.
Workflow updated October 18, 2026. Original editorial sources were reviewed August 9; the new shift section lists its own format reference. No advertising.
00:00:03.080, then choose Apply caption and recheck. The 500 ms overlap becomes an 80 ms gap. Cue 3 still needs review: fixing one caption does not silently fix the rest. With real subtitles, use your video—not this example—as the timing reference.For a different boundary, Review styled WebVTT includes styling and dense text that require player review. A missing or unsupported check stays uncertain; it is not silently treated as a pass.
Paste text or choose one UTF-8 SRT or VTT file, up to 5 MiB and 10,000 cues. Keep an unchanged copy. The checker never needs your video or an account.
Enter its exact duration in seconds when you know it. This lets the checker find a caption ending after the video. Leaving it blank does not make a zero-length clip; the boundary check remains unverified.
Start with Balanced review. Concise, Relaxed and Custom change the reading-speed, duration, gap and line-length thresholds. These are FastTool review heuristics, not universal rules or broadcaster approval.
Select Analyze subtitles. Read the first findings and the affected cues, not just the overall status. Use your actual video to decide how timestamps or line breaks should change.
The supported syntax, declared boundary and selected FastTool profile produced no blocking or review finding. It does not prove word accuracy, audio sync, speaker attribution, visual placement or target-player rendering.
Do not deliver the normalized preview. Select the affected caption, correct the timestamps against your video and choose Apply caption and recheck. Review neighboring cues and any remaining findings.
Do not relabel uncertainty as PASS. Inspect the unsupported surface or heuristic flag against the media and the actual delivery specification; record the reviewer decision outside the engine result.
BLOCK > INDETERMINATE > PASS. A style or reading-speed review cannot hide an overlap or out-of-media blocker.
Invalid timestamps, an end before the start, blank lines that would split the cue, and edits beyond the declared video length are rejected. WebVTT IDs, layout settings, NOTE, STYLE and REGION blocks are kept; unsupported styling still requires player review. Inline WebVTT timestamps must remain compatible with the edited cue interval.
A constant offset means the first, middle and last captions are all wrong by approximately the same amount. If captions become progressively further out of sync, one offset will not fix the drift. Check that your subtitle and video are the same edit, and use a dedicated subtitle editor when timing needs to be stretched or aligned to speech.
Choose Earlier · 1.250 seconds. A caption at 00:00:05.000–00:00:07.000 becomes 00:00:03.750–00:00:05.750. Its two-second reading time stays intact. This example demonstrates the calculation, not the correct offset for your video.
A first caption at 0.800 seconds cannot move 1.250 seconds earlier without a negative start. The entire shift is rejected. No cue is dropped, shortened or clamped to zero. Check the chosen direction and the media edit before trying again.
Known video duration is checked too: a shift ending beyond it is rejected. Valid inline WebVTT timestamps move with their cue; IDs, dialogue, layout settings, comments, styles and regions are retained. Files with X-TIMESTAMP-MAP are not shifted because their external media-clock mapping needs a different workflow. This is manual timing adjustment, not automatic speech synchronization.
Shift and check a subtitle file
Whole-file shift workflow added October 18, 2026. WebVTT timing structure was checked against the W3C specification; this tool's bounded parser does not implement every possible WebVTT feature.
WebVTT can contain information this tool cannot preserve in SRT: cue IDs, NOTE comments, header metadata, STYLE rules, REGION definitions, cue markup and positioning settings. The result tells you what was found. Keep the WebVTT file rather than deleting meaningful information to force conversion. Even plain files must pass a second parsing check that compares cue text, timing and order.
Not for ordinary playback. Your subtitle files are the primary downloads. Open Optional reports, file hashes and verification only when you need a cue-by-cue review log or to identify exact file bytes. Hashes do not prove that words are accurate, synchronized or approved by a platform.
The engine has no waveform or frame context. A syntactically tidy cue can still begin on the wrong word or remain across the wrong shot.
Netflix and BBC references help reviewers reason about editorial choices; they are not silently imported as universal policy, and FastTool does not certify conformance to either.
Removing cue IDs, regions, settings or style merely to obtain a conversion can erase intended semantics. Keep the original and route the file to a target-player review.
A screenshot cannot prove the analyzed input, exported bytes or review profile. Deliver the files, hashes and receipt together.
The archive below records the August 9 engine, not the current cue editor. Do not use its old hashes as a certificate for a new download. Current downloads carry the engine identity of the version that produced them.
shasum -a 256 app/fixtures/subtitle-qa-v1/fixtures.mjs \
app/js/renderers/subtitle-qa-core-20260809.js \
app/js/renderers/subtitle-qa-20260809.js
node scripts/subtitle_qa_unit_20260809.mjs
node scripts/subtitle_qa_browser_20260809.mjs
node scripts/subtitle_qa_independent_redteam_20260809.mjs63b9ba1801c9f719e1ec76e17b3640a149520daa1b5286d004f32855c40413d6478b13db5ea9551a3d4ea8c16853b9b443477166831ba56f1745b8e815a6e87fa48e2b82e59e6c53cdcc13ebc202738d534354eba6ee58a847fa2a4822ffb8fbe7424750d6c2376baad7472d2074c5a74294458a9717883e44940ede772466048e80ae62e039a57fcd3a5058bd375e73636b46d1c268e2cec582eb6c250ef967d33b5834801592af1fee57c9ea1627aed6db0547e364e1aab95dd02eb14907742a160766fdcfc53fad0d23874f67e457edcfec4509444a449468c4be59eb375bb37044634d5b88a50016a05c3e2a30e843f46f7fd2eb22ad722d13775674cc5bPaths and counts describe the 2026-08-09 checked-in run. Verify the current bytes before relying on them; a changed source invalidates this manifest.
Subtitle bytes are parsed in the active browser tab. This workflow page does not accept a file. The linked tool states its own local processing boundary; normal static page assets and consented analytics can still make network requests, but raw subtitle text, filenames and hashes are not analytics fields.
Supported scope is UTF-8 SRT and WebVTT text, up to 5 MiB, 10,000 cues, 120,000 lines, 16,384 code points per line and 65,536 code points per cue. There is no OCR, speech recognition, translation review, audio alignment, video/frame inspection, legal advice, WCAG audit or Netflix/BBC certification.
Verify a produced packet with the Receipt Verifier. Report a material error to corrections@fasttool.app with this URL, the fixture or artifact hash, observed result and a reproducible correction.