100% in your browser — nothing uploaded

Sync subtitles automatically

Re-time an out-of-sync subtitle — to a video or audio track's speech, or to a reference subtitle you already trust. Free, private, and fast.

No sign-up No upload Open source SRT · VTT · SUB · ASS
Sync against

Subomatic detects where speech happens in the track and lines your subtitle up to it.

“Accurate” tells speech apart from music & effects. Use “Fast” only for clean, quiet dialogue.

Works with your subtitles

Parse and re-emit any of these — and convert between them with the Output format picker.

SubRip .srt WebVTT .vtt MicroDVD .sub SubStation Alpha .ass / .ssa

How it works

Subomatic lines your subtitle up with when speech happens — it never reads the words, so it's completely language-agnostic.

1

Decode

Your media is decoded to audio by the browser itself — the file never leaves the page.

2

Detect speech

A voice-activity detector finds the spans of time where someone is actually talking.

3

Align

A dynamic program finds the timing shift (and frame-rate fix) that best overlaps the speech.

4

Rewrite

Only the timings change. Text, styling and positioning round-trip untouched.

Read the full technical explainer →

Frequently asked questions

Is anything uploaded? Is it private?

No. Subomatic is a WebAssembly app that runs entirely on your device — your subtitle and media files are never sent anywhere. Once the page has loaded there is no server to talk to.

Which subtitle formats are supported?

SubRip (.srt), WebVTT (.vtt), MicroDVD (.sub) and SubStation Alpha (.ass / .ssa). By default the output keeps the input's format, but you can pick a different one with Output format. Converting between .srt and .vtt keeps inline styling; converting to or from .sub/.ass flattens to plain text.

What's the difference between the two modes?

Video / audio speech listens to the media file, finds when people are talking, and aligns your subtitle to that. Reference subtitle instead copies the timing from another subtitle that's already correctly synced for the same cut of the film — most often one in a different language. It never reads or changes the words in either file; only the timing moves, so the languages don't need to match.

Why did audio mode get the timing wrong on a loud movie?

Make sure Speech detection is set to Accurate. The “Fast” detector keys on loudness, so on music- and effects-heavy films it can mistake the soundtrack for speech and apply a wrong shift. “Accurate” tells real speech apart from the rest and is the default.

It says “decoding audio” for a while — is it stuck?

No. Large videos take time for the browser to decode into audio before syncing can start. The progress bar shows each stage (decoding → detecting speech → aligning); the alignment itself runs off the main thread, so the page stays responsive throughout.

Can it fix frame-rate (PAL speed-up) problems?

Yes. As well as a straight offset, it scans the common play-rate conversions (23.976 / 24 / 25 / 29.97) and corrects the stretch, so a subtitle that slowly drifts out of sync gets fixed too.

What is the “Frame rate” field for?

Only MicroDVD (.sub) files, which store frame numbers rather than timestamps and so need the video's frame rate to convert them. Every other format ignores it.

Is there a command-line version?

Yes — the exact same Rust core compiles to a native CLI (subomatic) that can decode media directly and offers extra options like piecewise shifts for ad-breaks. More in the explainer →