What this does
Drop in a video and the speech in it becomes a subtitle track: text, split into lines, with a start and end time on each one. From there it is an editor — you play the video back, fix the words the model misheard, and drag the timing until each line appears when the person actually starts speaking. When it reads the way you want, you export an SRT or a VTT file and upload that alongside your video wherever it is going.
All of it happens inside this page. The video is opened from your disk the same way a media player opens it; the speech model runs on your own processor or graphics card; the subtitle file is written by your browser and saved to your downloads folder. No part of your video is sent anywhere, which is also why there is no length limit and no per-minute price — there is no server bill to pass on to you.
The model does the bulk, you do the last ten percent
Automatic speech recognition is good now, but it is not finished work. It will get ordinary sentences right and then spell a person's name three different ways, drop a question mark, or run two speakers together into one line. Planning for that is the difference between a subtitle tool you can use and one you fight: the goal is not a model that never makes mistakes, it is an editor where fixing thirty mistakes takes four minutes.
So the editing side is built for speed rather than for features. Click any line and the video jumps there. Press Enter in the middle of a line and it splits at the playhead. Arrow keys step through lines, space plays and pauses, and every change is undoable. A small number next to each line shows its reading speed in characters per second — when that number goes orange, the line is on screen too briefly for anyone to finish reading it, which is the single most common defect in machine-made subtitles.
Why there is a waveform
Most browser subtitle editors give you a list of lines and a video player, and nothing else. That is enough to fix a spelling mistake and hopeless for fixing timing, because timing is an audio problem: you need to know where the speech actually starts, and a list of text cannot tell you that. The usual workaround is to scrub back and forth listening for the first syllable, which takes about ten seconds per line and is why people give up on timing and ship subtitles that are half a second late all the way through.
The timeline underneath the video draws the audio itself. Silence is flat, speech is a block, and the gap between two sentences is visible as a gap. Subtitle blocks sit on top of the same time axis, so lining one up with the speech under it is a single drag. Hold ⌘ or Ctrl and scroll to zoom in until one second fills the screen when you need frame-level precision, or zoom out to see the shape of the whole conversation.
What runs on your machine, and what that costs you
The speech model is Whisper, running through WebGPU where your browser supports it and WebAssembly where it does not. The first time you generate subtitles, the model file downloads once and is then cached — after that the whole tool works with the network switched off. Three sizes are offered: a fast one for a quick draft or a long recording, a balanced one that is the default, and a larger one worth the extra wait when the audio is difficult, the accent is strong, or the vocabulary is technical.
The honest trade-off is speed. A service that uploads your file runs the same kind of model on a rack of datacentre GPUs and can be faster in wall-clock terms once your upload finishes. Here you are using your own hardware, so a laptop with WebGPU will transcribe several times faster than the same laptop falling back to WebAssembly, and an hour-long recording is a coffee break either way. What you get for the wait is that nothing left the room, there is no quota, and the tenth video costs exactly what the first one did.
Working from a subtitle file you already have
You do not have to start from a video. If you already have an SRT or VTT — exported from another tool, downloaded from a platform, or sent to you by someone else — open it directly and it loads into the same editor. Add the video afterwards and the two line up, which is the usual way to fix a subtitle track that drifts out of sync with its picture.
The parser is deliberately forgiving, because real subtitle files are messy: missing sequence numbers, Windows line endings, WebVTT cue settings, inline styling tags from a platform export, a missing newline at the end of the file. All of it is accepted and cleaned up on the way in. Export gives you back a well-formed file — SRT for the widest compatibility, VTT for the web, or plain text with the timings stripped out when what you actually wanted was a transcript.