BITSTAQ
Tool

The One-Shot Subtitle Tool: Captions You Don't Have to Check

The short version

A subtitle tool only earns its keep if you stop checking its work. This one gets there with a two-stage pipeline: ElevenLabs for transcription, a purpose-built segmenter for timing. It's honest about the one thing it still can't do: unfamiliar names.

I couldn't find a subtitle tool that didn't need checking. Every auto-caption feature I tried got me most of the way there and then left me scrolling through line by line anyway, fixing names, nudging timing, wondering if I'd missed something. That defeats the point of "auto." So I built a tool for myself: one command, drag the clip in, get subtitles back that I don't have to check.

The problem with auto-captions

CapCut's built-in auto-captions get you roughly halfway. Text is sometimes wrong. Timing drifts. Names come out mangled. And because you can't trust any of it, you end up scrolling through every single cue anyway — which is the exact task auto-captions was supposed to remove.

Why dedicated subtitle apps aren't the answer either

The dedicated subtitle platforms are worse in a different way. You're learning a new interface: uploads, configuration toggles, export settings. For something as small as a subtitle file, that's a lot of clicking — on top of another monthly subscription for a tool you might use twice a week.

The one condition that actually matters

Strip away the interface complaints and there's one real requirement: I need to trust the output. The moment I don't, I'm back to scanning every line, and the tool has bought me nothing. Trust here means four concrete things — words are accurate, names are handled, no audio gets silently skipped, and timing holds even down to individual words.

"Trust it" isn't a vibe — it's the four things above. If a tool can't hit all four, it hasn't solved the problem, it's just moved where you spend your time.

Three ways to use the output

One run produces three different subtitle formats, because a phrase-level caption track and a word-by-word Shorts caption aren't the same job.

CapCut-ready phrases

A standard phrase-level SRT, segmented and safety-checked for CapCut import (more on what that means below). Drag it onto your timeline and bake it in.

Snappy words for Shorts

One word on screen at a time — the fast-cut style that works for short-form. Rendered as a preview you can check in your browser before you commit to it.

Highlighted words for Shorts

The whole phrase shown at once, with a highlight sweeping word-to-word as it's spoken. Same underlying timing data, different presentation.

All three come from the same run. You're not re-uploading or re-transcribing for each format — you're picking which file to use.

How it's built

One paid call, then everything's free

Your video or audio clip
Stage 1 — ElevenLabs Scribe v2
One paid API call → every word, with timing
cached — re-runs never pay twice
Stage 2 — the segmenter
Deterministic, offline, free to re-run
Phrase SRT — CapCut / YouTube
Snappy words — one at a time, for Shorts
Highlighted words — animated sweep, for Shorts
The two-stage pipeline: one paid transcription call, then everything else is free.

One ElevenLabs call produces the words and their timing; that result is cached, so every output after it — three different subtitle formats — comes from a free, offline, re-runnable second stage.

Transcription runs through ElevenLabs' Scribe v2 model, which returns every word with exact word-level timing — the thing the rest of the pipeline depends on. That's the only step that costs anything, and it's cached: change your mind about which output format you want, and the second stage re-runs offline, for free, against the same transcription.

Transcription is usage-based, not a subscription — and because it runs on ElevenLabs' model rather than one I built myself, every improvement they ship to Scribe improves this tool's output too, with no changes needed on my end.

The segmenter's real trick

The usual rule: stop when full
“the tool”
cut lands here
Cuts exactly where the limit runs out.
What I’d rather do
chosen
“the tool”
limit
Fills toward the limit, then steps back to the last legal pause — never splits “the tool.”

The usual rule cuts exactly where the character limit runs out, even if that lands mid-phrase. What I'd rather do: fill toward the limit, then step back to the last legal pause before it — end of a clause, before 'and', after a comma — so a cut almost never lands mid-phrase.

Where a caption gets cut is what separates a subtitle track you trust from one you have to scan line by line. The usual rule: fill each line until it hits a character or timing limit, then cut — wherever that happens to land, including mid-phrase. What I'd rather do: fill each line toward that same limit, then step back to the last natural pause before the limit — the end of a clause, a comma, the word right before "and."

The practical effect: cues break where a sentence actually pauses, not where the character count ran out.

Why CapCut drops captions you never see missing

Imported as-is
“subtitles I”
“have to check”
“don’t”: under 3 frames, dropped silently.
After the CapCut-safety pass
“subtitles I”
“don’t”
“have to check”
“don’t” is extended to meet the floor. Every cue survives import.
CapCut has a minimum caption duration — about 3 frames at 30fps. Anything shorter gets silently dropped on import.

A caption cue that's too short doesn't error or warn — it just disappears when you import it into CapCut. The tool checks every cue's duration before handing it off and extends or absorbs anything under that floor, so nothing goes missing without you knowing.

Here's a failure mode that's easy to miss because it's silent. CapCut has a minimum caption duration — short cues under that floor don't error, they just vanish on import. You'd never know unless you went back and compared cue counts by hand. The CapCut-specific export pass checks every cue against that floor and extends or absorbs anything too short, before it ever reaches your timeline. The plain YouTube/Shorts sidecar file skips this pass entirely — platforms without that minimum duration requirement don't need it — which is also why the tool exports two versions of every phrase track instead of one.

It chains into other tools

A script, a cron, an agent
The auto-cut tool
A Claude Code skill
$ english-subtitles
Three different callers, one command — the engine underneath doesn't care who's asking.

Because the real engine is a plain command-line tool, it isn't limited to one person typing it by hand. A script, the auto-cut tool, or a Claude Code skill can all call english-subtitles the same way and get the same result.

The Claude Code skill I use day to day is just orchestration on top of a plain command-line tool underneath. That split matters more than it sounds: because the real engine is a CLI, it isn't limited to me typing a command by hand. Another tool — or another AI workflow — can call it as one step in something bigger. My auto-cut tool, for instance, could pick the best takes from a raw recording, hand the finished timeline straight to this subtitle tool, and produce a ready-to-import CapCut project without me touching a file in between.

Where it still needs you

It's a tool I trust, but it isn't magic. Names it's never seen — people, products, anything outside common vocabulary — it can't spell correctly, because it has no way to know them. That's the one gap left after everything above, and it means a single manual pass before you publish is still part of the workflow, not optional. There are exactly two real fixes: keep a custom dictionary of the names you use often, or wait for the underlying model to get better at recognizing them. Both are outside this tool's control, so I'm naming the gap instead of pretending it isn't there.

Build it yourself

Everything above is real enough to build from. The blueprint below has the full command reference, the segmenter's exact rules, and the architecture in more detail. Hand it to your agent, or work through it yourself.

Free download

The One-Shot Subtitle Blueprint

A 26-page build specification: every component, the data passed between them, and the decision rules. Pass it to your AI agent to build it for you, then customise it however you like from that base.

Download the One-Shot Subtitle Blueprint (PDF, 1.8 MB)

I've only built it for my own machine

The blueprint above is the whole architecture. I've only wired it up as a skill on my own machine, and I haven't had the time to clean it up for anyone else. If you're interested, message me and let me know. If there's enough interest, I'll put the time in and package it properly.

Let me know you want it (opens in a new tab)