ByteScope

Live Captions

Captions for what you say — or for what your computer is playing: pick a speech engine, add on-device translation, and float the captions over a full-screen slide deck or stream.

Recognition audio does leave your browser — it is transcribed by the browser vendor's servers.

Where your audio actually goes

While captions are running the audio being captioned — your microphone, or the tab or screen you shared — is streamed to Google's (or, in Edge, Microsoft's) speech service, and the text comes back over the network. Nothing this page does can pull that audio back once it has left. Treat a confidential meeting accordingly.

Translation is on-device either way: it runs on a model downloaded to your own machine, so caption text is never sent anywhere to be translated. ByteScope itself stores nothing — captions live in this tab's memory and are gone when you close it.

Caption window

Sample loop

Waiting for the first words…

This is a canned sample, not your microphone. Set the size and display mode until it reads well from the back of the room, then start.

Your browser will ask for the microphone. Stopping releases it again — the recording dot goes out.

The floating window needs its own click: browsers only open one straight from a button press. It floats over full-screen slides, and you can drag it or pull its edges to resize.

checking…

Caption setup

What to caption

Caption a person talking into a microphone, or caption the sound this computer is playing — a video, a livestream, a call in another tab. The second one opens your browser's share picker when you press start.

The captions listen to this input. Picking the wrong one raises no error at all — the captions still appear, just of the wrong microphone — so check it before you go on. You can also switch part-way through a talk.

Tick this if the input above is a virtual device carrying your system sound — BlackHole, Loopback, VB-Cable. It turns off echo cancellation, noise suppression and automatic gain control, which are tuned for a person in a room and quietly eat music, applause and anything that is not a voice.

Pick the language that will actually be spoken. Chrome cannot work it out while you talk, and the wrong pick does not raise an error — it invents confident nonsense in the language you chose. You can also switch part-way through a talk.

The translated line is the one your audience reads, so it is drawn larger and in the accent colour.

Speech recognition
Compare all models
Translation
Compare all models

Chrome Speech Recognition decides where its own sentences end, so this setting does not apply to it.

Chrome Speech Recognition writes words while they are being spoken. Every other engine runs on this computer and captions one sentence at a time, a few seconds after the sentence ends.

Where recognition runs

Chrome 139 and later can transcribe with a model on your own machine. Left off when the model still has to be downloaded, so a talk about to start is never held up by a fetch nobody asked for.

Checking whether this machine can recognise speech on its own…

Window size

Starting size of the floating window in pixels. You can still drag its edges afterwards, and the type scales with the window.

Text size

100%

Scales the caption text without changing the window, from 43% to 405%. Useful in “Both”, where two rows have to share the height — make the window wide and short, then push the text up until the back row can read it.

Appearance

Changes both windows at once, mid-talk if you like. Slate is the panel this page has always drawn; Clear and Ribbon drop it so the captions read as burnt-in subtitles; Contrast is flat black for a lit room; Paper suits a light slide deck.

A floating window cannot be made see-through to the desktop — no browser allows it. Clear is the closest: no panel, just outlined text. Chroma key fills the window with broadcast green so a video mixer can key it out.

Backdrop

100 %

Show

Translation

When the speaker changes language

On, every finished line is checked against the speaking language you chose. A line that turns out to be in your target language is left alone instead of being translated a second time — which is what produces those mangled translations — and a line in a third language is translated from that language when this device already has the model for it. Uses a small on-device model; nothing is sent anywhere.

Checking whether this device can identify languages…

The transcript itself can only follow one language at a time. The browser fixes the recognition language when captions start, so speech in another language is transcribed as though it were still the one you picked, whatever this setting says. If the speaker has switched for good, switch the speaking language below — captions reopen in a second and the words already on screen stay.

Session transcript

Everything recognised since Start, with times counted from the start of the session. Download it when the talk or stream ends — nothing is kept after you close the tab.

Nothing recorded yet.

Include

Browser support

Four separate browser features can be involved. Captions need the first one; the rest only make them better or more private.

FeatureChromeEdgeFirefoxSafari
Live captions (Web Speech API)Safari ships the prefixed API but ends a session after every utterance and ignores continuous mode, so a long talk stutters. Where the audio goes is the next row's question, not this one's.✓Supported✓Supported✗Not supported◐Partial
On-device recognition (Chrome 139+)Transcribes with a model on your own machine, so no audio is uploaded. Which languages have a model is per machine and per platform, so the page asks at runtime rather than listing them. Edge is Chromium-based and very likely has it; that has not been verified here.✓Supported◐Partial✗Not supported✗Not supported
Captured playback audio (getDisplayMedia)Captions the sound of a tab, a window or the whole screen. Firefox and Safari show a share picker and then hand the page video only, which is the entire point of this row. Tab audio works wherever the row does; a native app's sound needs Chrome 141+ on macOS 14.2+, and the page measures that below rather than guessing from the browser.✓Supported◐Partial✗Not supported✗Not supported
On-device translation (Translator API)Chrome 138 and later. Detected at runtime — without it the page runs captions only.✓Supported◐Partial✗Not supported✗Not supported
Floating window (Document Picture-in-Picture)Chrome and Edge 116 and later. Without it, captions stay in the page.✓Supported✓Supported✗Not supported✗Not supported

Captured audio on this machine

Checking what this machine can share…

This session

Recognition audio does leave your browser — it is transcribed by the browser vendor's servers.

Detected in this browser

  • SpeechRecognition checking…
  • SpeechRecognition.available checking…
  • getDisplayMedia checking…
  • Translator checking…
  • documentPictureInPicture checking…

About this tool

One pipeline, two jobs. Point it at a microphone and your talk is captioned as you speak; point it at the audio your computer is playing and the livestream, video or call you're watching gets live captions — the obvious case being a Japanese stream you'd like Chinese subtitles for. Two pickers sit above the caption bar, and they are independent: a speech recognition engine — Chrome Speech Recognition, which streams words as they are spoken, or a Whisper model downloaded once and run on your machine — and a translation engine — Hy-MT2, a model downloaded once and run on your graphics card with WebGPU, which is the recommendation whenever this computer has a usable GPU; Chrome's built-in Translator; Gemini Nano; or none. Every finished sentence is translated on your machine. For a talk, the mic picker matters on stage: a lapel or USB microphone is often not the system default, and choosing it explicitly beats captioning the laptop's built-in mic from across the room. Either way, one more click pops the caption bar out into a Document Picture-in-Picture window — a real always-on-top window, on both macOS and Windows, that floats over full-screen Google Slides, Keynote and PowerPoint when you're presenting, and just as happily over a full-screen video player when you're watching. The screen stays awake while captions run, and when you stop, the transcript can be exported as SRT or TXT — original, translation or both.

Models

Speech recognition: Confucius4-R2T2 (R2T2, streams captions word by word on a GPU and is the default when one is usable), Chrome Speech Recognition (Web Speech: no download, words as they are spoken; may send audio to Google unless the on-device pack is installed), Whisper base, Whisper small and Whisper large v3 turbo (local, a sentence at a time; large is the heaviest), Qwen3-ASR 0.6B and Qwen3-ASR 1.7B (local, a sentence at a time; 0.6B is the light one) and Gemini Nano (Chrome built-in). Translation: Hy-MT2 1.8B (Tencent Hunyuan-MT 2 on your GPU, the default with a usable graphics card, and the engine our blind evaluation preferred over Chrome Translator for English, Chinese and Japanese directions), Chrome Translator (built-in, the default without a GPU) and Gemini Nano. All of them run in the browser: R2T2, Whisper, Qwen3-ASR and Hy-MT2 run on your graphics card through WebGPU, with a compatible-GPU build for older cards without shader-f16 (a GTX 10-series, say), a fast-GPU build that uses f16 when the card supports it, and without a usable GPU, Whisper and Qwen3-ASR fall back to the CPU over WebAssembly (slower), R2T2 is not used live, and translation switches from Hy-MT2 to Chrome Translator. A downloaded model is fetched once and shared by every ByteScope tool.

Captioning what your computer is playing

The played-audio route goes through the browser's own share picker: press start, choose a tab — or a window, or the whole screen — and tick the audio checkbox. Sharing a tab with “share tab audio” ticked is the good path: the page gets a clean digital copy of the tab's sound, with no room noise and no microphone in the loop, and the audio keeps playing out loud the whole time — captioning never mutes what you're watching. The single most common mistake is forgetting that checkbox; the page notices it has been handed a silent share and says so, but it can't tick the box for you. Tab audio is Chrome and Edge territory; capturing a native app's sound by sharing a window or the whole screen has worked on Windows and ChromeOS for years, but on a Mac it needs Chrome 141 and macOS 14.2 or later — macOS itself didn't let apps capture system audio before that — and on an older Mac, sharing a tab still works. Firefox and Safari can't hand a page audio from screen sharing at all. There is also a route that skips the picker entirely: a virtual audio device such as BlackHole or Loopback shows up as an ordinary entry in the microphone list, so system sound routed through it can be picked like any mic. Flip the “played-back audio” switch when you do — it turns off the browser's echo cancellation and noise suppression, processing tuned for a live voice that would otherwise fight the very audio you're trying to caption.

Which speech engine to pick

Chrome Speech Recognition is the low-latency choice: nothing to download, words appear while the sentence is still being spoken, and with the on-device language pack installed the audio never leaves the machine — without it, the browser uploads the audio to Google's servers, and the engine's badge says so. Whisper is the local choice: base, small or large (v3-turbo), downloaded once into the browser, shared by every ByteScope tool, and run with WebGPU on your graphics card — Whisper base also runs on the CPU without WebGPU, noticeably slower. Whisper waits for the end of a sentence before it transcribes, so its captions arrive a sentence at a time rather than a word at a time; in exchange it recognises many languages with one download and needs no browser feature beyond WebGPU or WebAssembly. A bigger Whisper is more accurate and slower — large sits behind “more” on this page because most laptops can't keep up with it live. Gemini Nano, where Chrome provides it, is a third sentence-at-a-time option with nothing to download from us. Nothing downloads without asking: a model that isn't on this machine yet shows its size, the free space left and whether you're on a metered connection, and starts only when you say so; download, verification, loading into memory and warm-up each show their own progress, and “test speed” runs a short built-in clip through the engine to tell you whether this computer keeps up before you go live. The recommended option is marked with a one-line reason, and your own choice is remembered per tool.

Why captions lag, and how the page measures it

A live caption is always behind the voice, and the page would rather show you by how much than pretend otherwise. Three delays add up. Sentence-based engines — Whisper and Gemini Nano — wait for a pause to decide that a sentence has ended before they transcribe it, so a long sentence is late by its own length. Then the engine needs time to process it; if that takes longer than the sentence lasted, the queue grows and every caption arrives later than the one before. Then translation adds its own time per sentence. The page timestamps audio on the way in and captions on the way out, and shows the difference as a small light in the corner of the caption bar: green when captions trail by three seconds or less, yellow between three and eight, red when the lag keeps growing — which means the engine is falling behind, not merely slow. Twenty seconds of red gets you a suggestion to switch to a lighter model; nothing switches on its own. When the queue overflows, sentences are dropped rather than delivered minutes late, and the caption bar says how many were skipped instead of hiding it. Two streaming engines skip the first delay entirely: Confucius4-R2T2 on a machine with a usable GPU, where it is the default, and Chrome Speech Recognition, which needs no download — both put words on screen while you are still speaking, which is why they are the pick whenever latency matters more than accuracy.

Where the audio actually goes

This site normally promises that nothing leaves your browser, and on this page that depends on the engine you pick. With a Whisper model the promise holds outright: the audio is transcribed in your tab and goes nowhere. With Chrome Speech Recognition the default route is still cloud recognition: the browser uploads the audio to Google's servers (Chrome) or Microsoft's (Edge) — the same path the browsers' own dictation features use — and while that route is active, the upload is as real as it ever was. Captioning a stream raises the stakes on that route, because the audio being uploaded is then someone else's — the video you're watching, the far side of a call — not just your own voice. Since Chrome 139 there is an on-device route: the page asks SpeechRecognition whether a local model exists (processLocally), installs a language pack once, and from then on your speech is transcribed on your machine. Not every language has a local model, and availability varies by machine and platform, so the page checks at runtime and the engine's badge shows which route you're actually on rather than leaving you to guess. Translation is local whichever engine you pick — Hy-MT2 is downloaded once and runs on your graphics card, Chrome's Translator downloads a language pack once, Gemini Nano is Chrome's own built-in model, and none of them sends a sentence anywhere. Cloud recognition stays available on purpose: minutes before a talk is no time to be stuck behind a model download. If the content is confidential — an internal roadmap, a client's numbers — or simply isn't yours to upload, pick Whisper or the on-device route and confirm the badge before you start.

Why you pick the language yourself

There is no language auto-detection, and that is deliberate. A speech recogniser has to be told what language it is listening to before it starts; there is no reliable way to detect it in-browser, and letting the recogniser guess produces confident gibberish — the speech force-fitted into the wrong language's words rather than an admission of uncertainty. So the spoken language is a manual choice, whichever engine you pick. For a talk, it is the one setting worth double-checking before you walk on stage; for a stream, remember it means the language being spoken in the video, not the one you want to read — a Japanese stream with the recogniser set to English yields fluent nonsense, not an error message. The target language is a separate pick, and the two can be swapped mid-session.

A window that outranks full screen

The floating captions use documentPictureInPicture — the same always-on-top machinery as a floating video, carrying a whole document instead. The operating system's compositor keeps that window above everything, which is exactly what a full-screen app cannot claim: Keynote, PowerPoint and Google Slides all take the screen over, and so does a video player — the caption bar stays on top of every one of them. That matters twice here: presenting, it keeps the translation over your slides; watching, it is what turns floating captions into actual subtitles over a full-screen stream. The requirements are stated where they bite. Tab and screen audio capture exists only in Chromium browsers on desktop — Chrome or Edge — and so do Chrome Speech Recognition, the built-in Translator (Chrome 138+), on-device recognition (Chrome 139+), Gemini Nano and the floating window (Chrome or Edge 116+); system-audio capture on a Mac additionally needs Chrome 141+ on macOS 14.2+ (Windows and ChromeOS have no such gate). Whisper on a microphone is the exception, and so is Hy-MT2 translation: both run wherever WebGPU runs (Whisper also on WebAssembly), Firefox and Safari included, so captioning your own voice locally and translating it with Hy-MT2 does not need Chrome — captioning a stream and floating the result still does. Whatever is missing, the tool degrades honestly — to captions-only, to captions in the page instead of a floating window, to a support matrix that names the gap — rather than pretending.

Frequently asked questions

Why do I have to pick the speaking language myself — can't it auto-detect?

Because reliable in-browser auto-detection doesn't exist. Every engine here — Chrome Speech Recognition and Whisper alike — must be told the language before it starts, and forcing it to guess produces gibberish captions — the recogniser will happily fit your speech to the wrong language rather than admit it doesn't know. A talk has one known speaking language anyway, so the honest design is a manual choice made once and checked before you start, not an automatic one that fails on stage.

How do I caption a video, livestream or call I'm watching?

Switch the audio source from microphone to the audio your computer is playing, and the browser opens its share picker. The good path is choosing the tab the video plays in and ticking “share tab audio”: the page gets a clean digital copy of the sound, with no room noise, and the audio keeps playing out loud — nothing gets muted. Set the spoken language to the language of the stream, pick your translation target, and pop out the floating window so the subtitles sit over the full-screen player. Two support lines to know: tab audio works in Chrome and Edge only, and capturing a native app's sound (system audio) works out of the box on Windows and ChromeOS but on a Mac needs Chrome 141 and macOS 14.2 or later — on an older Mac, playing the stream in a tab and sharing that tab still works. Firefox and Safari don't hand pages audio from screen sharing at all.

I shared a tab but no captions appear — what went wrong?

Almost always: the audio checkbox. The browser's share picker treats sound as opt-in, and with “share tab audio” unticked it hands the page a perfectly valid, perfectly silent stream — the single most common mistake with this source. The page detects that it is receiving silence and says so, rather than leaving you staring at an empty caption bar, but it cannot tick the box for you: stop the share, share again, and tick it this time. If there is no audio option to tick at all, you're on a browser or OS combination that can't deliver that audio — window and whole-screen shares carry sound in fewer configurations than tab shares, and on a Mac system audio needs Chrome 141 on macOS 14.2 or later.

Which speech model should I choose?

Start from what you care about most. With a usable graphics card, English, Chinese and Japanese default to Confucius4-R2T2, which streams captions as you speak — unless its speed test on this computer says it cannot keep up. Without a usable graphics card, the lowest-latency option is Chrome Speech Recognition: no download, words appear as they are spoken, and it is the recommendation whenever it is available — though for Chinese and English, an R2T2 you have already downloaded and whose speed test came back smooth still comes first. Privacy without depending on Chrome: Whisper — downloaded once, run in your tab with WebGPU, nothing uploaded, and it works in any browser that has WebGPU or WebAssembly. Within Whisper, base is the small, fast one that also runs on the CPU; small is the usual live pick on a laptop with a graphics card; large (v3-turbo) is the most accurate and the slowest, hidden behind “more” here because most machines can't keep it up live. Gemini Nano is the no-download local option where Chrome provides it. If you're unsure, press “test speed” on the card: it runs a short built-in clip and tells you whether this computer keeps up, which is a better answer than any general advice.

Why do captions arrive a few seconds late?

Because two of the three delays are built into how the engine works. A sentence-based engine — Whisper, Gemini Nano — waits for a pause before it decides the sentence is over, so a long sentence is late by its own length; then it needs time to transcribe it, and then the translation engine needs time of its own. On a machine that keeps up, that adds up to a couple of seconds; on one that doesn't, the queue grows and every caption is later than the last. The light in the corner of the caption bar is that measurement: green at three seconds or less, yellow up to eight, red when the lag keeps growing. If it stays red, pick a lighter model — Whisper base, or Chrome Speech Recognition, which streams words as they are spoken and skips the wait for the end of the sentence. The page will suggest that after twenty seconds of red, but never switches on its own, and if it has to drop sentences to catch up it says how many rather than hiding it.

Is my speech processed on my machine, or uploaded somewhere?

It depends on the engine, and the badge on the engine card tells you which. With any Whisper model the audio is transcribed in your tab and goes nowhere. With Chrome Speech Recognition the default is cloud recognition, and there the audio really is uploaded: Chrome sends it to Google's servers and Edge to Microsoft's — while you're on that route, treat this page like any other cloud transcription service, because that is what it is. Captioning a stream makes that route a bigger deal, not a smaller one: the audio being uploaded is then someone else's — the video you're watching, the far side of a call. Since Chrome 139 there is a way out inside that engine too: switch to on-device recognition and the browser installs a language pack once, then transcribes entirely on your machine (processLocally). Not every language has a local model and availability varies by machine, so the page checks at runtime and labels the active route instead of letting you assume. Translation runs locally with either translation engine. If confidentiality matters, pick Whisper or the on-device route and check the badge before you speak.

How big are the model downloads, and do they repeat?

It depends on the engine, and nothing downloads until you've seen the number. Chrome's Translator fetches a language pack on the order of a few tens of megabytes per pair, cached by the browser and reused by every later session and every other site using the same pair. A Whisper model is bigger, and the consent box shows its exact size, the free space left on this computer and whether you're on a metered connection before anything starts; the download can be paused and resumes where it stopped, and once finished the model is stored in the browser once and shared by every ByteScope tool. “Manage downloaded models” under the picker lists what is on this machine and lets you delete it. The on-device speech language pack for Chrome Speech Recognition is also downloaded once, with one wrinkle: it reports no progress, so the page can only say it's preparing. Conference Wi-Fi being what it is, open the page, pick your engines, and let the downloads finish before the talk starts.

How can a browser window stay above a full-screen slideshow?

Because it isn't an ordinary window. A Document Picture-in-Picture window is kept on top by the browser and the OS compositor, the same way a floating video stays visible over everything — full-screen Keynote, PowerPoint and Google Slides included, on both macOS and Windows. Drag it to where subtitles belong and resize it like any window. The microphone and the recognition live in the original tab, so the captions keep flowing while the presentation has focus.

Does this work in Safari or Firefox?

Partly, and the page tells you which part. Whisper runs wherever WebGPU or WebAssembly runs, so captioning your own microphone with a local Whisper model works in Firefox and Safari as well as Chrome. Hy-MT2 translation is the same: downloaded once and run on your graphics card, it works in any browser with WebGPU. Everything else on this page is Chromium-only: capturing a tab's or the screen's audio — neither Firefox nor Safari will hand a page audio from screen sharing at all — Chrome Speech Recognition, the built-in Translator and Gemini Nano, and the Document Picture-in-Picture window that floats over a full-screen app. So in those browsers you get local captions in the page for what you say, translated with Hy-MT2 if this machine has a usable GPU, and no captioning of a stream, no built-in translation engines and no floating window; the support matrix names exactly what is missing rather than failing quietly. For captioning a stream, use Chrome or Edge on desktop — Chrome 138+ for the built-in Translator, 139+ if you want Chrome Speech Recognition to run on-device.

Can I show only the translation, without the original captions?

Yes — the caption bar has a display toggle: original only, translation only, or both stacked. Translation-only is the usual pick when the audience doesn't share your language, and it frees the whole bar for larger text. One caveat: with the translation engine set to none, or on a browser without one, translation-only has nothing to show, so the tool falls back to the original captions rather than presenting a blank bar.

Can I caption a different microphone than the system default?

Yes — the page lists every microphone the browser can see and lets you pick which one feeds the captions. On stage that is not a detail: the mic that is actually on you is often a lapel mic or a USB interface that is not the system default, and captioning the laptop's built-in mic from three metres away produces exactly the mush you would expect. Pick the device explicitly, say a test sentence, and check the captions read correctly before the audience does. The same list is where a virtual audio device such as BlackHole or Loopback shows up if you route system sound through one — pick it like any mic, and flip the played-back audio switch so the browser stops running voice-tuned echo cancellation and noise suppression against the very audio you want captioned.