Free AI subtitle generator that runs in your browser

Subtitle any video, without uploading it anywhere.

OpenSubs transcribes the speech, translates it, styles it and burns it into the picture — all inside your browser. The video file never leaves your machine, because there is nowhere for it to go.

No account. No upload. No watermark. Open source.

Looking for an existing subtitle file to download? See where to find subtitles.

Subtitle your video

Video

Subtitles

Whisper runs here, in your browser, and writes the subtitles from the video’s own audio. Nothing is uploaded and no account is needed.

Four steps, none of them on a server.

The four steps above, in more detail. Every one of them runs on your own machine unless you explicitly choose otherwise.

Features

Free

Transcribe the speech

Whisper runs in your browser, on the GPU where your machine has one. Pick a model between 40 MB and 250 MB; it downloads once and is cached after that. Only the model is fetched — the audio stays put.

Free

Translate into 20 languages

Chrome's built-in translation runs on your device at no cost. Bring your own Claude, OpenAI or DeepL key for better results on long dialogue, or use ours and pay in credits. How subtitle translation works

Free

Style it, and see it

Twelve presets, from clean broadcast captions to bold social styles, each previewed over your own footage. Words can grow and glow as they are spoken.

Free

Burn it into the video

Export a finished MP4 with the subtitles in the pixels, encoded in the browser with WebCodecs. Or take the .srt, .vtt or .ass and use them elsewhere.

A subtitle editor for the part the machine gets wrong.

Transcription is good and it is not perfect. A name, a piece of jargon, a word swallowed by a passing lorry — those are the lines you will want to touch, and they are the ones this is built for.

Type over it

Every cue is a plain text box. Rewrite the wording, or press return inside it to split a line in two, and the captions over your video update as you go.

Hear the line you are fixing

The timestamp beside each cue is a button. Click it and the video jumps to that moment, which is faster than scrubbing for it and is usually the only way to tell what was actually said.

Bring a file you already have

Open an .srt or .vtt from a translator, an editor or another tool and edit it here. If the characters arrive garbled, pick the file’s text encoding and it is read again.

What it will not do

The timings are fixed. You can rewrite what a cue says, but not when it starts or how long it stays, and cues cannot be added, deleted or merged. A file that is out of sync with its video needs a different tool.

The same engine, in three other places.

The page above needs nothing installed. These do, and in return they do things a page cannot — subtitle a video already playing in a tab, or burn a two-hour file without a browser in the way. All of it is the same Rust engine, so the output is identical.

Free

Browser extension

Subtitles over whatever is playing in the tab, generated as it plays. Chrome, Edge and Firefox. Not in the stores yet — the build is a .zip you load yourself.

Get the extension

Free

Desktop app

macOS, Windows and Linux, for long files and batches. It drives ffmpeg to burn, so it needs one built with the ass filter — brew install ffmpeg-full on macOS. The builds are unsigned.

Download

Free

Command line

One command per file, for scripting and for CI. Same engine, same presets, same output. Build it from source; it has the same ffmpeg requirement as the desktop app.

Read the source

AGPL-3.0

All of it, open

The engine, the web app, the extension, the desktop app and the command line are one repository. Read what runs on your machine rather than take this page's word for it.

View on GitHub

Current builds are release candidates. They are complete and tested; the version number says they have not been through a stable release yet.

“Private” here means there is no server to send it to.

Most subtitle tools upload your video, process it, and promise to delete it. OpenSubs is built the other way round.

The video never moves

It is read through an object URL and decoded by your browser. There is no upload endpoint in this product, so a footage leak is not something we have to promise against — it is not possible.

What can leave, and only if you ask

Subtitle text, if you pick a cloud translator. Or the audio span you trimmed, if you pick cloud transcription. The on-device options send nothing at all, and they are the defaults.

Your key stays in the tab

Bring your own API key and it is used from your browser and never stored, never sent to us, and never written to disk.

Free for everything that runs on your machine.

Which is nearly all of it. We charge only where we spend money on your behalf, and we tell you the price before you press the button.

Credits
$5  for 1,000 credits
  • Cloud translation on our backend
  • No key and no account with anyone else
  • The price of a job is shown before you run it
  • You are charged exactly that, never more
  • A job that fails costs nothing
  • Credits never expire

Before you start.

Is my video uploaded anywhere?

No, and not because we promise not to: there is no upload endpoint in the product. OpenSubs reads the file directly in your browser, and transcription, styling, translation on your device and burning all run on your own machine. You can check it rather than take it on trust — open the Network tab and subtitle a video: after the page and the speech model have loaded, there are no requests. The only things that can ever leave your machine are subtitle text or audio, and only if you choose a cloud option.

Is my API key saved?

No. An API key you enter to use your own provider is held only in the page's memory. It is never written to localStorage, sessionStorage, IndexedDB or cookies, and your browser sends it directly to the provider you picked — OpenAI or another OpenAI-compatible server, Anthropic or DeepL — without passing through OpenSubs servers. Reloading or closing the tab clears it, so you enter it again next time.

Do I need an account to use OpenSubs?

No. Transcription, translation on your device, styling, trimming, burning and every export work with no account and no sign-in. An account is only needed if you choose to pay for cloud translation on our backend.

How do I add subtitles to a video for free?

Drop the video onto this page and generate subtitles from its audio. Whisper runs on your machine, so nothing is uploaded and nothing is charged. Correct any line by editing its text, pick a style, then export the subtitles as .srt, .vtt or .ass, or burn them into an MP4. No account and no watermark.

How does OpenSubs generate subtitles from speech?

It runs OpenAI's Whisper locally — ONNX weights driven by transformers.js, on WebGPU where the machine has it and on WebAssembly otherwise. Three model sizes are offered: Tiny (English only, about 40 MB), Base (about 80 MB) and Small (about 250 MB). The model downloads once and is then cached by the browser; only the model is fetched, never the audio. The spoken language is detected every four seconds rather than once per file, so a video that switches between two languages comes out as one subtitle file containing both.

Can OpenSubs burn subtitles into the video file itself?

Yes. Subtitles are rendered by libass — the same renderer ffmpeg uses — compiled to WebAssembly, and encoded back into an MP4 using WebCodecs. What you see in the preview is what ends up in the pixels, and the audio is copied through untouched.

What does OpenSubs cost?

Everything that runs on your machine is free: transcription, translation on your device, all 12 subtitle styles, word-by-word highlighting, trimming, burning into MP4 and every export format. There is no watermark, no file-size limit and no queue — none of those exist here because there is no server paying for the work. The one paid option is translation on our own backend, at $5 for 1,000 credits, with the price of a job shown before you run it and a failed job costing nothing.

Does it add a watermark?

No. A burned MP4 carries only the subtitles you chose, and the exported .srt, .vtt and .ass files are plain subtitle files. Nothing is added, because the work runs in your browser rather than on a server someone has to pay for.

Which languages can OpenSubs translate subtitles into?

Twenty, including Simplified and Traditional Chinese, Japanese, Korean, Spanish, Portuguese, French, German, Italian, Russian, Arabic, Hindi, Indonesian, Thai, Vietnamese, Turkish, Polish, Dutch and Ukrainian. Fonts for non-Latin scripts are bundled, so Chinese and Arabic subtitles burn correctly instead of coming out as empty boxes.

Does OpenSubs work offline?

After the first visit, largely yes. The speech model is cached by your browser after its first download, and everything except cloud translation runs locally. Translating on your device uses Chrome's built-in translation models, which are also downloaded once.

Is OpenSubs open source?

Yes, under the AGPL-3.0. The same engine — cue segmentation, line breaking, reading-speed limits, the style presets, the ASS writer — is compiled to WebAssembly for the browser and to a native binary for the desktop app and command-line tool, so all three produce identical output.

How do I add captions to a video?

Drop the video on this page. The speech is written down in the tab, you correct any line that came out wrong, pick a style, and then either burn the captions into the picture or export them as a file to send alongside. Nothing is uploaded, and there is no account or watermark.

Can it generate an SRT file from a video?

Yes, and that is the usual way to leave with one. Once the subtitles are written and corrected, export .srt, .vtt or .ass. An .srt is a plain text file holding a line number, a start and end time, and the words — anything that takes subtitles will read it.

Can I edit the timings as well as the words?

Not here. Cue text is editable; the start and end times are not, and cues cannot be added, deleted or merged. If a file needs retiming rather than rewording, a dedicated subtitle editor is the right tool and this one is not.