Skip to main content

vinoWhisper

PyPI PyPI - Version Python License CI 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.1

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.1
File Size Uploaded
vinowhisper-0.3.1.tar.gz 77.2 kB Details

Built distribution (wheel)

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

Total release size:145.8 kB

Release files / vinowhisper-0.3.1.tar.gz

Download URL vinowhisper-0.3.1.tar.gz
Size 77.2 kB
Tags Source
SHA-256 checksum
How to use checksums
c036a74b3dda9dc1b36c28e8fc0f275fec894d8ab7a19ee09f809d7ef3b5a2bf
BLAKE2b-256 checksum
How to use checksums
06d9cec7311871917409a1c3583c613fbb6b7d749fdb2a44e4190c61ff6edb11
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.1-py3-none-any.whl

Download URL vinowhisper-0.3.1-py3-none-any.whl
Size 68.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8af95f11028eaaad8c73db6a3a52235456694a6c6d66e938fa6fee9037b16dcd
BLAKE2b-256 checksum
How to use checksums
9c149b9e27e8a585dac97fdd1aaa9fb0401e8e30cf64ce660739ca5866d13a16
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

This release

0.3.1 This release

2 release files

0.3.0

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