Add the required 'WEBVTT' header line at the very top of the file — SRT files have no header and start directly with the first cue index
Replace every comma millisecond separator in timestamps with a period: change '00:01:12,500 --> 00:01:15,000' to '00:01:12.500 --> 00:01:15.000' — this is the only timing change needed
Decide whether to keep cue sequence numbers: WebVTT makes them optional, so you may strip them or replace them with meaningful cue identifiers (e.g., 'intro-1') for JavaScript cue events
Add WebVTT cue settings if positioning is needed — append settings after the timestamp arrow on the same line, such as 'align:center position:50% size:80%'; SRT has no equivalent
Validate the output with a WebVTT parser or the W3C Nu validator — common failures include missing WEBVTT header, BOM encoding issues, and stray Windows line endings (CRLF inside cue text)
Serve WebVTT files with Content-Type 'text/vtt' and ensure CORS headers allow cross-origin fetch if the file is on a different domain from the video player
Known gotchas
SRT uses commas as the millisecond separator; WebVTT uses periods — a missed substitution will silently break cue timing in all browsers
WebVTT supports markup tags inside cue text (<b>, <i>, <ruby>, <c.classname>) while SRT supports only a subset and parsers vary — strip unsupported tags before conversion
A UTF-8 BOM at the start of a WebVTT file is valid but many parsers reject it — strip the BOM when writing the output file
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp