Live · on your NPU · offline
Live captioning for Linux
Live captions for anything playing on your Linux laptop, or for your own voice, as it happens. Hold a key and talk to type into any window. It runs on your Intel NPU, so nothing goes to the cloud and there is no account. It works in English, French, German and Spanish, and can translate the other three into English.
$ curl -fsSL https://github.com/karanshukla/vinoWhisper/releases/latest/download/install.sh | bash
Free and open source. Read install.sh (opens in a new tab) first if you like, or use pip install vinowhisper && vinowhisper-setup. Made for Linux laptops with an Intel NPU, Fedora Atomic and openSUSE Aeon included.
The octopus has no bones at all, so any gap wider than its beak is a door. It tests the gap with one arm first, then pours the rest of its body through in a few seconds. Keepers who house them in tanks learn to weigh the lids down, and to count their animals every morning.
Overview
What you get
Captions on anything
Videos, calls, streams, one app or your microphone. Words show up about 1.5 seconds behind the audio, at best.
Voice typing
Hold Meta+H, talk, let go. The text is typed into whichever window has focus, offline, with the same model as the captions. See how it works.
Four languages
English, French, German and Spanish, plus translation of the three into English.
Private
Your audio never leaves the machine, and neither do your words: dictation cleanup and summaries run on your NPU too. No cloud, no API key, no account, no telemetry.
Easy on the laptop
The NPU does the work, so your CPU and GPU stay free and the fans stay quiet. The server quits itself after five idle minutes.
A transcript you keep
In the terminal, captions stay in your scrollback. Save them, and each session gets a summary written on the NPU. See saved sessions.
Why the NPU
Your laptop has an NPU. Put it to work.
Recent Intel laptop chips include an NPU, a small chip built for AI work, and on Linux almost nothing uses it. Live captioning suits it: the work never stops, but each piece is small. vinoWhisper puts the NPU to use, so captioning costs you no CPU, no GPU, no fan and no network.
Measured on one Wildcat Lake laptop, 2026-09-12.
- 0.70s
- to caption 12 seconds of speech on the NPU
- ~1.5s
- behind the audio, at best
- 0.2s
- until the first word appears
- 0
- cost when idle: the server quits itself
Languages
English, French, German and Spanish
Pick the language you are listening to and the captions come out in it, or let vinoWhisper detect it. A French documentary can also be captioned straight into English.
- Offline, like everything else. Translation goes into English.
- Switch from the tray menu, or set it up with the commands here.
- New. Add a language with one setup command; it downloads about 1GB, once.
$ vinowhisper-setup --language fr $ vinowhisper-setup --language auto $ vinowhisper-setup --language auto --task translate
Terminal
Keep the transcript
In the terminal, a word is printed once and never rewritten, so the transcript lives in your scrollback. Quit and it is still there, and search and selection work as usual. Words still being double-checked wait on a grey hearing… line underneath. --plain and --json are there for pipes.
[3:02]The octopus has no bones at all, so any gap wider than its beak is a door. It tests the gap with one arm first, then pours the rest of its body through in a few seconds.
[3:44]Most of the energy in a thunderstorm goes into lifting water, not into lightning. One storm cloud can hold as much water as a small lake, and all of it has to come down somewhere, usually within the hour.
Voice typing
Voice typing: hold a key, talk, let go
Dictate into any window, from a chat box to a terminal, with the same offline model that does the captions. No separate app, no cloud.
- Hold to talk. Hold Meta+H, speak, and release. The text is typed where your cursor is.
- Or go hands-free. Tap once to start and tap again to finish. It also finishes by itself after a couple of seconds of quiet.
- See it working. A small pill at the bottom of the screen shows your level and the words as they are recognised, then Transcribing on NPU… for the last stretch.
- Long is fine. One dictation can run up to five minutes.
- Nothing gets lost. If typing is refused, the text stays on your clipboard. The last five dictations wait in the tray under Recent dictations. After it pastes, the clipboard is cleared, and Klipper is told not to keep it.
- Um, uh, scratch that. Optional cleanup drops fillers, stammers and what you take back (“three, no wait, four”) before the text is typed. A small model does it on your NPU, and it only ever deletes words, never adds or rewords one.
Standup moved to 10:00, same room.
Are you still coming?
Running ten minutes late, start without me and I’ll catch up on the notes.
Overlay
A caption box, and a tray icon to run it
vinowhisper-tray floats the captions above every window, fullscreen video included. The box is click-through, so it never blocks the player’s controls underneath.
- Meta+Alt+C shows or hides the captions, from anywhere. Clicking the tray icon does the same.
- The tray menu keeps what you reach for mid-video: Show captions, Listen to (system audio or the microphone), Recent dictations, Settings…, Start at login and Quit.
- Hidden means stopped. Nothing listens while the captions are hidden, they hide themselves after a quiet spell, and the tray icon tucks itself away after 30 idle minutes.
Sessions
Saved sessions, summarised on your NPU
Turn on Save transcripts and every caption session is kept when it ends. A while later the NPU writes it a summary: a title, a short overview and key points that each link back to the moment in the transcript. It waits for quiet, so captions and dictation never queue behind it.
- A window of their own.
vinowhisper-gui --sessionslists every session by date, length and title. Read the summary or the transcript, or Summarise again. - Bring a recording. Import audio or video…, or
vinowhisper-transcribe lecture.mp4, turns a voice memo, a downloaded lecture or a call recording into a session without playing it. It gets a summary like any other. - Take it anywhere. Export… to Markdown for notes apps like Obsidian, plain text, or an
.odtfor LibreOffice, Word and Google Docs. Open in… hands it to your word processor or text editor, and Copy takes what is on screen. - Listen or search. With vinoSpeak (opens in a new tab) installed, Read aloud plays the summary or transcript. vinoSearch (opens in a new tab) can find a session by what was said in it.
- Honest about what wrote it. Every summary is marked as machine-written, and names or numbers the transcript doesn’t contain are dropped. The transcript stays the record.
Local captions talk
A talk on running speech models on a laptop NPU instead of the cloud. It covers latency, battery cost and why words are never rewritten.
- The NPU captions 12 seconds of speech in 0.7 s [03:12]
- Two passes must agree before a word is shown [11:40]
- The server quits itself when nothing is listening [24:05]
- Questions on languages and translation [36:58]
Machine-written summary. The transcript is the record.
Settings
A settings window for everything else
vinowhisper-gui opens from Settings… in the tray menu, or as vinoWhisper Settings in your app menu. Each change applies as you make it, with no restart.
- Shortcuts. The keys your desktop has bound for captions and dictation, and a button that opens your desktop’s own shortcut settings to change them.
- Captions. Position (top or bottom), text size, what to listen to, how long to wait in silence before hiding, whether to save transcripts, and when the tray icon tucks away.
- Speech. The language, or detect automatically, and whether to translate into English. Switching reloads the model, and is refused while you are mid-dictation so nothing is lost.
- Cleanup. Turn on dictation cleanup, pick when it runs, and download, verify or delete its model.
- Sessions. Summarise saved sessions automatically, and open the sessions window.
- About. Check for updates, then Update: it installs the new release and restarts the server, and the model stays.
vinowhisper-upgradedoes the same from a terminal.
It follows your desktop’s light or dark theme and text size, works with screen readers, and folds its sidebar into tabs when the window is narrow. It shares its look with the other vinoPilot apps.
Global shortcuts
Shows or hides the floating captions.
Hold to talk and release to type, or tap to start and tap again to finish.
Opens your desktop’s shortcut settings.
Overlay
Where the caption box sits, above other windows.
Listening
Seconds with no audio before the captions count down and hide. 0 keeps them up.
Recognition
Detect automatically picks per sentence. Switching reloads the model, which takes a moment.
Captions arrive in English whatever was spoken.
Dictation cleanup
Drops um and uh, stammers, and what you take back with “no wait” or “scratch that”. It only ever deletes words.
About two seconds each. Smart skips text with nothing to fix.
Model
Runs on this machine. Checked against pinned sha256s.
Under the hood: the parts that aren’t Whisper
Words are never rewritten
A word is committed once two overlapping windows agree on it (LocalAgreement-2). After that it stays put.
Scale to zero
A systemd socket unit owns a private Unix socket with nothing running. The server holds the 10–30s NPU load and exits after five idle minutes.
Verified downloads
The installer checks the wheel against the release’s SHA256SUMS. The model export is hashed against pinned digests before anything loads it, and the overlay and settings window against sha256s in the wheel.
Always clear where it runs
The device in use shows in the journal, in /health, in the doctor and on the status bar, which turns red if it is not the NPU.
Errors that say what to run
Nearly every error prints the fix in your distro’s own package names, read from /etc/os-release.
Replayable sessions
--record a session, then re-run the stitcher offline or sweep window sizes with vinowhisper-replay.
Hardware
Supported devices
vinoWhisper needs an Intel NPU. Nearly every Intel Core Ultra laptop chip since 2023 has one, and Intel’s open-source Linux driver supports all five generations below. I have so far run it only on a Wildcat Lake laptop, so for the others this is “should work”, not “tested”. Reports are welcome.
| Intel chip | NPU | Example laptops |
|---|---|---|
| Core Ultra Series 3 Panther Lake: Ultra X9 388H, X7 358H, 5 325 | Up to 50 TOPS | Framework Laptop 13 Pro, System76 Lemur Pro, Lenovo ThinkPad X1 Carbon Gen 14, Dell XPS 14 and XPS 16, ASUS Zenbook Duo, Samsung Galaxy Book6 Pro, MSI Prestige 14 Flip |
| Core Series 3 Wildcat Lake: Core 7 350, Core 5 320 | 9 to 17 TOPS | Dell XPS 13, Lenovo IdeaPad Slim 3, HP OmniBook 3, ASUS Vivobook 15 |
| Core Ultra 200V Lunar Lake: Ultra 9 288V, 7 258V, 7 256V | Up to 48 TOPS | Dell XPS 13 (9350), ASUS Zenbook S 14, Lenovo ThinkPad X1 Carbon Gen 13 |
| Core Ultra 200H Arrow Lake-H: Ultra 9 285H, 7 255H | 13 TOPS | Most 2025 performance and gaming ultrabooks |
| Core Ultra Series 1 Meteor Lake: Ultra 7 155H, Ultra 5 125H | 11 TOPS | Framework Laptop 13 (Core Ultra Series 1), most 2024 ultrabooks |
An Intel GPU also works as a fallback, but the NPU is what keeps the CPU, fans and battery out of it. Want your laptop on this list? Tell me how it went (opens in a new tab).
Get it
Install
The installer checks the latest release’s wheel against its SHA256SUMS, installs it with uv (opens in a new tab) (no git clone, no build) and hands over to vinowhisper-setup, which picks your capture tool, NPU driver and model export and generates systemd units against paths that exist. It prints each command before running it. --dry-run prints the plan and changes nothing. Add | bash -s -- --gui for the overlay, tray and settings window.
To upgrade, use Check for updates on the settings window’s About page, or run vinowhisper-upgrade. The exported model stays.
Fedora Atomic and openSUSE Aeon. Silverblue, Kinoite, Bazzite, Aurora, Bluefin and Aeon work too: everything installs into your home directory, and the few host packages (usually just the NPU driver) come as an rpm-ostree or transactional-update line, then a reboot. The NPU compiler needs no layering. Run it on the host, not in a toolbox.
- Accelerator
- An Intel NPU for the best results; an Intel GPU also works. Intel NPUs for now.
- Python
- 3.11 to 3.13.
- Audio
- PipeWire (
pw-record) or PulseAudio (parec), picked automatically. - Overlay
- wlr-layer-shell: KDE Plasma 6, Sway, Hyprland, niri, COSMIC. On GNOME, use the terminal.
- Disk
- About 1.5GB for the model export, about 1GB more if you add French, German or Spanish, and 1.7GB for the optional cleanup and summary model.
$ vinowhisper-caption # caption system audio $ vinowhisper-caption --source mic # caption yourself $ vinowhisper-caption --list-targets # one app instead of the whole sink $ vinowhisper-setup --gui # the overlay and voice typing $ vinowhisper-setup --language fr # French, German, Spanish or auto $ vinowhisper-gui --sessions # saved sessions and summaries $ vinowhisper-transcribe lecture.mp4 # a file into a saved session $ vinowhisper-session export BUNDLE --format odt $ vinowhisper-upgrade # the newest release, in place $ vinowhisper-doctor # devices, model, digests, audio $ vinowhisper-replay ~/sess --sweep 8,12,20
| Family | Includes | Package names |
|---|---|---|
| Fedora | RHEL, CentOS, Alma, Rocky, Nobara | Built and run here |
| Fedora Atomic | Silverblue, Kinoite, Bazzite, Aurora, Bluefin: rpm-ostree lines | Supported |
| Debian | Ubuntu, Pop!_OS, Mint, elementary, Raspbian | From the package index |
| Arch | CachyOS, EndeavourOS, Manjaro, Garuda | From the package index |
| openSUSE | Tumbleweed, Leap, SLES; Aeon and MicroOS through transactional-update | From the package index |
| Gentoo, Void, Alpine | Derivatives matched through ID_LIKE | From the package index |
| NixOS | hardware.cpu.intel.npu.enable on 25.11 and later | Config snippets |
Limits
Good to know
- Translation goes into English, from French, German or Spanish.
- Words appear once two passes agree on them, so captions run a moment behind the audio and are never rewritten.
- Voice typing types into whichever window has focus. On KDE Plasma it asks for Meta+H; on Sway, niri and COSMIC you bind
vinowhisper-tray dictate-pressanddictate-releaseto a key yourself. - The overlay runs on compositors with wlr-layer-shell, such as KDE Plasma 6. On GNOME, use the terminal.
- Summaries are written by a small model, so a detail can still be wrong. Each key point links to its stamp in the transcript, so you can check.
- Transcribing a file needs ffmpeg or GStreamer installed; captions and voice typing do not. It uses whichever language the captions are set to.
- Other read-only systems, such as SteamOS, get the package names they need but no install command.
Questions
Linux live captioning: questions
Does Linux have built-in live captioning?
Not in the way Android, Windows and macOS do. Linux has no system-wide live captions feature. vinoWhisper adds one: it captions anything playing on your laptop, or your microphone, in a terminal or in a floating overlay, entirely offline.
How do I get live captions on Linux?
Run the one-line installer from vinowhisper.com, then run vinowhisper-caption for captions in the terminal, or vinowhisper-setup --gui for the floating caption overlay with a tray icon, voice typing and a settings window.
Does Linux live captioning work offline?
Yes. vinoWhisper runs a Whisper speech model on your own Intel NPU. Your audio never leaves the machine, and there is no cloud, API key or account.
Which computers does vinoWhisper support?
Linux laptops with an Intel NPU: Core Ultra Series 1 (Meteor Lake), Core Ultra 200V (Lunar Lake), Core Ultra 200H (Arrow Lake), Core Ultra Series 3 (Panther Lake) and Core Series 3 (Wildcat Lake), such as the Framework Laptop 13 Pro. The full list is on the page.
Which languages does it caption?
English, French, German and Spanish, and it can translate French, German and Spanish speech into English.
Does it work on Bazzite, Silverblue or other immutable distros?
Yes. On Fedora Atomic (Silverblue, Kinoite, Bazzite, Aurora, Bluefin) and openSUSE Aeon, vinoWhisper installs into your home directory. Setup prints the rpm-ostree or transactional-update line for the few host packages it needs, usually just the NPU driver, and asks you to reboot.
Can it transcribe a recording I already have?
Yes. vinowhisper-transcribe, or Import audio or video… in the sessions window, turns an audio or video file into a saved session without playing it, on your own machine. It needs ffmpeg or GStreamer to read the file, and the session gets a summary like any other.
Can it summarise what was said?
Yes. With Save transcripts on, each caption session is kept and summarised on your NPU by a small local model, with key points that link back to the transcript. Sessions export to Markdown, plain text or .odt, and vinoSpeak can read them aloud.
Help out
Run it on hardware I haven’t
If your laptop is not a Wildcat Lake, I want the report, working or not. An issue with vinowhisper-doctor --json pasted in is worth more than any benchmark I can run here.