CaptionPass JSON IR and the developer-json preset
Sometimes you are not shipping to a social platform — you are building tooling, tests, or a pipeline that needs a structured timeline you can diff, merge, and re-emit. CaptionPass defines a small JSON interchange (IR) for that workflow. The developer-json preset keeps rules loose so automation is not fighting readability limits meant for YouTube or TikTok.
Format tag and version
Parsed JSON IR carries format: "captionpass-json" and a version integer (today 1). If the version does not match what the parser expects, you may see a diagnostic warning while cues still load — treat that as a signal to migrate before a future engine update tightens validation.
When JSON IR is the right choice
- You control both producer and consumer and want stable fields (
cues[]with start/end in milliseconds). - You round-trip through multiple transforms and want fewer ambiguous text encodings than SRT blocks.
- You feed QA or analytics that read JSON more easily than subtitle text.
For human delivery to hosts, you still usually ship SRT or WebVTT. JSON IR is a developer surface — not a universal upload format.
HTTP API pairing
The versioned API documented at /docs/api accepts the same caption formats as the web converter. Set preset=developer-json to receive JSON IR in the output string alongside the structured report (diagnostics, fixes, QA score).
Try JSON IR on the home page by uploading a supported file and choosing the developer preset where the UI exposes it.
More guides
- SRT vs VTT — when each format silently failsComma vs dot timestamps, WEBVTT headers, and where YouTube, TikTok, and HTML5 bite.
- Caption file encoding — UTF-8, BOM, and garbled textWhy uploads show mojibake or blank cues: UTF-8 vs legacy encodings and quick fixes.
- Burned-in vs soft subtitles — what to deliver whenOpen captions burned into the picture vs separate SRT/VTT tracks — tradeoffs for editors and clients.
- Reading speed for captions — CPS, line length, and platformsCharacters per second, lines per cue, and where YouTube, TikTok, and HTML5 push back.
- Why your captions are not showing — a triage guideHTML5, YouTube, and TikTok checks when subtitles vanish after upload.
- Fix overlapping subtitlesWhat overlap means and why some players drop overlapping cues.
- TTML and DFXP — broadcast-style timed text on the webNamespaces, timing, styling stripped in practice, and when TTML is the right interchange vs SRT or WebVTT.
- Timecode, frame rate, and caption syncWhy captions drift or jump: drop-frame vs non-drop, fractional frame rates, and export settings that survive upload.
- WCAG-minded captions — reading speed, sound tags, and burned-in contrastHow WCAG 1.2.x thinking maps to real files: CPS, line length, SDH-style cues, and contrast for open captions.