Skip to main content

vinoWhisper

CI License Python Ruff

NPU-accelerated local live captioning for Linux, using OpenVINO GenAI's WhisperPipeline on an Intel NPU. Named after vinoAuthFace, same idea of OpenVINO doing the NPU work, different feature.

Point it at whatever is playing and it captions in your terminal. Nothing leaves the machine. Start it and it goes; there is nothing to interact with.

image

The transcript scrolls above that bar in your terminal's own scrollback, so it is still there after you quit and your terminal's selection and search still work on it. hearing… is the words heard once but still waiting on a second cycle to agree, which is the two-cycle commit delay made visible rather than felt as a freeze.

Install

curl -fsSL https://raw.githubusercontent.com/karanshukla/vinoWhisper/main/scripts/install.sh | bash

That installs uv, clones the repo, builds the environment, and hands over to vinowhisper-setup, which is where every machine-specific decision happens: your capture tool, your NPU driver, the model export your device needs, and systemd units generated against the paths that actually exist. It prints every command before running it and asks first.

From a checkout, or to see what it would do without doing it:

git clone https://github.com/karanshukla/vinoWhisper && cd vinoWhisper
uv sync
uv run vinowhisper-setup --dry-run   # the whole plan, nothing changed
uv run vinowhisper-setup             # for real, one prompt per step

Or from PyPI, if you would rather wire up the machine yourself:

pip install vinowhisper   # needs Python 3.11-3.13
vinowhisper-setup         # still worth running: NPU driver, model export, units

pip install gets you the five commands and the Python dependencies. It cannot get you an NPU driver, a model export or systemd units, which is what vinowhisper-setup is for either way. See docs/install.md for the OpenVINO version floor and why this could not be a pip install until 2026-08-31.

Commands

vinowhisper-caption                       # caption system audio
vinowhisper-caption --source mic          # caption yourself
vinowhisper-caption --list-targets        # capture one app instead of the whole sink
vinowhisper-caption --debug               # per-cycle timings, levels, raw transcript
vinowhisper-caption --record ~/sess       # save the session for replay
vinowhisper-caption --plain > out.txt     # no status bar (implied when piping)

vinowhisper-setup                         # guided install; re-runnable, idempotent
vinowhisper-setup --dry-run               # print the plan, change nothing
vinowhisper-setup --print-units           # the systemd units it would generate

vinowhisper-doctor                        # devices, model, audio, live levels
vinowhisper-doctor --json                 # the same, for a bug report
vinowhisper-doctor --no-probe             # skip the 2s-per-target level capture

vinowhisper-replay ~/sess --restitch      # re-run the merge logic offline
vinowhisper-replay ~/sess --sweep 8,12,20 # measure what --window actually costs

Hardware

The NPU is the point. Everything below it exists so a broken driver degrades the tool instead of bricking it.

Device Selected Model export What you get
NPU (Intel(R) AI Boost) first --disable-stateful ~1.19s per 30s window, measured 2026-08-03
GPU (Arc / Xe) second stateful Untested here. Works in principle; watch the lag figure
CPU last resort stateful Runs. Competes with everything else on the machine, and lags

Selection is automatic and a fallback is never silent: it shows up in the server journal, in /health, in vinowhisper-doctor, and on the status bar as a red border. The two model exports are not interchangeable, and the NPU needs a userspace driver half that no distro packages completely. docs/hardware.md covers all of it, including what to do when the NPU does not show up.

Audio capture works on PipeWire (pw-record) or PulseAudio (parec), picked automatically, and package names for eight distro families live in one table in vinowhisper/distro.py. If a name is wrong for your distro, that is expected, and it is the fastest thing here to fix.

Docs

Installing What the installer does, the OpenVINO version floor and why, pinning the window on top
Hardware Device selection, the two model exports, and every way the NPU fails to appear
Audio capture PipeWire vs PulseAudio, distro coverage, and what actually silences a capture (it is not the mute button)
Latency Why captions trail the audio, the one knob that changes it, and why the wording drifts
Debugging --record, offline replay, and what vinowhisper-doctor measures
Architecture Socket activation and scale-to-zero, and how to stop it

More

MIT licensed.

Release files for vinowhisper 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for vinowhisper 0.3.0
File Size Uploaded
vinowhisper-0.3.0.tar.gz 77.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for vinowhisper 0.3.0
File Interpreter ABI Platform
vinowhisper-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size:145.6 kB

Release files / vinowhisper-0.3.0.tar.gz

Download URL vinowhisper-0.3.0.tar.gz
Size 77.1 kB
Tags Source
SHA-256 checksum
How to use checksums
52dac626c48b389ab35cd5088bfe93fc445aa0e17a3ab79774cffc5b87160354
BLAKE2b-256 checksum
How to use checksums
38c5237b71a4d74e41cb09cd6f743790cf0484e6dd9ae720a5bb25f4c7ad9f16
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.8 {"installer":{"name":"uv","version":"0.12.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / vinowhisper-0.3.0-py3-none-any.whl

Download URL vinowhisper-0.3.0-py3-none-any.whl
Size 68.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0b0ade0a5b399bbde54e5bd8bf33b8c739237e8f0de200ba867103855cf351ea
BLAKE2b-256 checksum
How to use checksums
c609ef40728e834cde9c19e7c668885608cc0ebb12795b9d33c29b6eb56b9025
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.8 {"installer":{"name":"uv","version":"0.12.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

0.5.0

2 release files

0.4.0

2 release files

0.3.1

2 release files

This release

0.3.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page