ByteScope

Video Subtitles

Local Gemini Nano turns a recording into SRT or VTT — the file never leaves this tab.

Your files never leave your browser — all processing is local.

Drop a video or audio file. Chrome's on-device Gemini Nano transcribes it here — the file is not uploaded.

The first run on this machine may download the local Nano model (often multiple gigabytes). That is the model, not your recording. Progress below is the browser's own `downloadprogress` figure, not an estimate we invented.

Drop a video or audio file here

mp4, webm, mov, mp3, wav, m4a — or click to browse

Browser support

Transcription uses Chrome's Prompt API with audio input. Firefox and Safari do not ship it. Edge is Chromium, but this column only claims what was actually measured.

FeatureChromeEdgeFirefoxSafari
Prompt API (`LanguageModel`)Web Prompt API from Chrome 148. Chrome 138 is extensions only. Edge is untested here.YesPartial / untestedNoNo
Multimodal audio promptNeeds `expectedInputs: [{ type: "audio" }]`. Chrome 148+ exposes the API; this machine can still report unavailable (hardware or a pending model download). If it does, there is no Whisper fallback. Edge is untested here.YesPartial / untestedNoNo
Decode audio in the tabAudioContext / OfflineAudioContext. Window-only, so the decode cannot run in a worker; the downmix and resample do.YesYesYesYes

This browser, right now

  • LanguageModel
  • LanguageModel audio
  • AudioContext.decodeAudioData

About this tool

A class recording or a meeting dump should not have to go to a cloud speech service. Drop a video or an audio file and Chrome's on-device Gemini Nano transcribes it in this tab, through the Prompt API (LanguageModel.availabilitycreate → a multimodal prompt that carries { type: "audio" } plus the instruction). There is no Whisper, no transformers.js, no ONNX pack, and no upload. You get SRT, VTT or plain text, and a small table to nudge timestamps before you download. Subtitle Converter and Subtitle Sync sit next door for format changes and a global shift.

How the audio reaches the model

The page decodes the soundtrack with AudioContext / OfflineAudioContext. Web Audio is Window-only, so that step cannot move into a worker — though the browser runs the codec on its own decoding thread. Decode asks for 16 kHz; if that context cannot be built, the worker resamples. Only the first audio track of a container is decoded. The downmix and any resampling do run in a worker. WAV windows then go to Nano one chunk at a time so a long file cannot fill the context window. The first use on a machine may download the local model — often multiple gigabytes — and the progress you see is the browser's own downloadprogress event, not a spinner we invented. Burning captions into the picture is out of v1: that would drag in ffmpeg.wasm for a need that is still unproven here.

What this will not do

Firefox and Safari do not ship the Prompt API. Edge is Chromium, but this page only claims what was actually run. Audio multimodal also needs hardware the model will accept; unavailable is a normal answer, not a bug, and there is no cloud fallback. The transcript is as good as Nano on that clip — misses and drifted times are edited in the table, or taken to Subtitle Sync if every line is late by the same amount.

Frequently asked questions

Is my video or audio uploaded?

No. Decode, chunking and the Prompt API call all run in this tab. The only download is the on-device Nano model the first time this machine needs it, and your recording is not attached to that request.

Which browsers can actually transcribe?

Chrome with the Prompt API and audio input. Firefox and Safari cannot. Edge may work as Chromium but is marked untested in the matrix until someone measures it. The table stays on the page even when this browser cannot run the tool.

Why does the first run download something huge?

That is Gemini Nano, not your file. Chrome fetches the on-device model once (often multiple GB, with real disk and GPU/RAM gates). The percentage is downloadprogress from LanguageModel.create({ monitor }). After that, transcription can run offline.

Can I burn the subtitles into the video?

Not in this version. Download SRT or VTT and mux them in your editor. Hard-burning would mean ffmpeg.wasm, which this batch deliberately skipped.

The times are wrong, or a sentence is missing — now what?

Edit the table. Nano is not a studio ASR; chunks can drift or drop a line. If every cue is late by the same amount, take the file to Subtitle Sync for a shift. If you need ASS or SBV, use Subtitle Converter.