Skip to main content

The vinoSpeak mark: a white speaker with two green sound waves on the dark vino tile

vinoSpeak

PyPI Python License CI Ruff

Intel NPU-powered text-to-speech using the Kokoro-82M INT8 OpenVINO model. Text goes in, a WAV comes out, and nothing leaves your machine after the one-time model download.

Requirements

  • Python 3.11 or newer
  • An Intel NPU with a compatible driver. GPU and CPU also work (--device GPU, --device CPU).
  • Internet access on first run to download the model (~160 MB)

OpenVINO is pinned to the release vinoPop and vinoWhisper use, so programs sharing one NPU never run mismatched runtimes.

Install

From PyPI, with uv:

uv tool install --python 3.14 vinospeak
vinospeak "Hello."

--python 3.14 because OpenVINO 2026.4.1 has no wheels for 3.15 yet, and uv otherwise uses your default Python. OpenVINO is pinned exactly; everything else resolves to the newest release that fits. To install exactly what uv.lock pins, hashes included, use a checkout. --locked fails if the lock is out of date:

git clone https://github.com/karanshukla/vinoSpeak && cd vinoSpeak
uv sync --locked
uv run vinospeak "Hello."

To put that checkout's vinospeak on your PATH with the lock's versions as constraints (uv tool install doesn't read uv.lock by itself):

uv export --locked --no-dev --no-emit-project --no-hashes -o constraints.txt
uv tool install --constraints constraints.txt .

Synthesize speech

The first run downloads OpenVINO/Kokoro-82M-int8-ov from Hugging Face, at one pinned commit, and checks every file against its sha256 (see SECURITY.md). The model is cached under ${XDG_CACHE_HOME:-~/.cache}/vinospeak/ by default.

vinospeak "Hello from vinoSpeak."                     # plays it on your speakers
vinospeak "Hello from vinoSpeak." --output hello.wav  # saves a WAV instead

Playback goes through pw-play (PipeWire, what Wayland desktops run), falling back to paplay or aplay.

The default inference device is the Intel NPU. Choose a different OpenVINO device, voice, language, speed, or model directory with the corresponding options:

vinospeak "A sample sentence." \
  --device NPU \
  --voice af_heart \
  --language en-us \
  --speed 1.0 \
  --model-dir ./kokoro-model \
  --output speech.wav

Use vinospeak --help to see all options. The audio uses the sample rate reported by OpenVINO GenAI.

Check this machine

vinospeak-doctor          # --json for a bug report

Reports the OpenVINO packages and devices, whether the cached model still matches its pins, and, if ovfetch is on your PATH, whether your OpenVINO version is inside the range recorded as working with your NPU driver. Install it with cargo install ovfetch --locked. ovfetch is advisory here: it never changes what gets installed or run.

Use it from Python

from vino_speak import Synthesizer

synth = Synthesizer("NPU")  # compiles the model once; reuse it
audio = synth.synthesize("Hello.")  # audio.samples (float32), audio.sample_rate

speech = synth.speak("A long passage.")  # returns at once, plays in the background
speech.stop()  # cuts it off; speech.wait() blocks until it finishes instead

speak() synthesizes the first sentence on its own and plays it while the rest is synthesized in chunks that at most double in size, so speech starts after about 1.5 s on the NPU however long the text is.

Development

See CONTRIBUTING.md. uv run poe check runs everything CI does; none of it needs OpenVINO or an NPU.

Metadata

Release files for vinospeak 0.1.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 vinospeak 0.1.1
File Size Uploaded Provenance Actions
vinospeak-0.1.1.tar.gz 31.5 kB Without provenance Details for vinospeak-0.1.1.tar.gz

Built distribution (wheel)

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

Total release size: 53.7 kB

Release files / vinospeak-0.1.1.tar.gz

Download URL vinospeak-0.1.1.tar.gz
Size 31.5 kB
Tags Source
SHA-256 checksum
How to use checksums
27569f13a5efa5d0371daa38f76e8bf696a3e11c9fe375b759d22107610dbff5
BLAKE2b-256 checksum
How to use checksums
048a58a89e2d1389859048e2cc37721bf07d5e4dff10001342c350688e518b63
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","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 / vinospeak-0.1.1-py3-none-any.whl

Download URL vinospeak-0.1.1-py3-none-any.whl
Size 22.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e7c06ba96dcd79b477440859216a0629e8882d48dd07883c070de2b7f134d65c
BLAKE2b-256 checksum
How to use checksums
a75446243dcebeec0cbcb90c03e887de7f4431b94261e5199ddc3f6986ea743c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","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}

Security for vinospeak 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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