Skip to main content

voiceio

 ██╗   ██╗ ██████╗ ██╗ ██████╗███████╗██╗ ██████╗
 ██║   ██║██╔═══██╗██║██╔════╝██╔════╝██║██╔═══██╗
 ██║   ██║██║   ██║██║██║     █████╗  ██║██║   ██║
 ╚██╗ ██╔╝██║   ██║██║██║     ██╔══╝  ██║██║   ██║
  ╚████╔╝ ╚██████╔╝██║╚██████╗███████╗██║╚██████╔╝
   ╚═══╝   ╚═════╝ ╚═╝ ╚═════╝╚══════╝╚═╝ ╚═════╝

CI PyPI Python License: MIT Downloads

Voice dictation for Linux. Local, yours, and it learns how you speak.

https://github.com/user-attachments/assets/9cf5d1ac-b4bb-4cf8-b775-7a66dc16b376

Open-source, sovereign voice input/output. Your speech is transcribed on your own machine, everything it learns about you stays in local files you own, and it gets better the more you use it.

  • Local & sovereign — speech is transcribed on-device with faster-whisper; audio never leaves the machine. Your history, retained audio, corrections, and vocabulary all live in plain local files (JSONL / TOML / txt) you can read, edit, and delete. Zero telemetry. The one honest nuance: two optional, off-by-default features send text (never audio) to a cloud LLM you configure yourself — final-transcript polish ([postcorrect]) and the weekly correction-mining review.
  • Improves with use — automatically — every utterance teaches it your words and names. See How it learns.
  • Linux-first & hackable — Wayland/X11, GNOME/KDE/sway/i3, chosen automatically by chain-and-probe backends. It's plain Python you can read in an afternoon and contribute to.

Linux-first. voiceio is developed and tested daily on Linux (GNOME/Wayland). Windows and macOS ship as experimental, untested targets — the code paths exist but are unmaintained and likely broken. See Experimental platforms.

Quick start

# 1. Install system dependencies (Ubuntu/Debian). build-essential + python3-dev
#    are needed to compile evdev (no prebuilt wheel); portaudio for the mic.
sudo apt install pipx build-essential python3-dev portaudio19-dev ibus gir1.2-ibus-1.0 python3-gi

# 2. Install voiceio
pipx install python-voiceio

# 3. Run the setup wizard
voiceio setup

That's it. Press Ctrl+Alt+V (or your chosen hotkey) to start dictating.

Installing with an AI agent? Point it at INSTALL.md — a terse, copy-pasteable runbook (voiceio setup --defaults / --answers '{json}', no TTY needed).

Fedora
sudo dnf install pipx gcc gcc-c++ make python3-devel portaudio-devel ibus ibus-libs python3-gobject
pipx install python-voiceio
voiceio setup
Arch Linux
sudo pacman -S python-pipx base-devel portaudio ibus python-gobject
# base-devel provides gcc/make; the python package ships headers.
pipx install python-voiceio
voiceio setup
Windows / macOS (experimental)

See Experimental platforms below — these builds are untested and unmaintained.

Build from source

If you want the source code locally to hack on or customize for personal use. PRs are welcome!

git clone https://github.com/Hugo0/voiceio
cd voiceio
uv pip install -e ".[linux,dev]"

# Bootstrap CLI commands onto PATH (creates ~/.local/bin/voiceio)
uv run voiceio setup

Note: Source installs live inside a virtualenv, so voiceio isn't on PATH until setup creates symlinks in ~/.local/bin/. If voiceio isn't found after setup, restart your terminal or run export PATH="$HOME/.local/bin:$PATH".

You can also install with uv tool install python-voiceio or pip install python-voiceio.

How it works

hotkey → mic capture → whisper (local) → text at cursor
          pre-buffered   streaming        IBus / clipboard

Press your hotkey to start recording (1s pre-buffer catches the first syllable). Text streams into the focused app as an underlined preview. Press again to commit. Transcription runs locally via faster-whisper, text is injected through IBus (any GTK/Qt app) with clipboard fallback for terminals. It runs in real time on a modern CPU and ships with model tiers from tiny to large-v3.

How it learns

Most dictation tools transcribe the same way on day 100 as on day 1. voiceio adapts to you — your jargon, names, and accent — entirely from data that never leaves your machine.

flowchart LR
    subgraph live ["every utterance"]
        A["🎙️ dictate"] --> B["store audio + raw text\n+ confidence (local)"]
        A --> C["hotwords + recent context\nbias the Whisper decoder"]
        A --> D["optional LLM pass fixes\nmisheard proper nouns"]
    end
    subgraph weekly ["weekly, in the background"]
        E["mine history for recurring errors\n→ learn corrections + vocabulary\n(safety-gated, multi-vote)"] --> F["teacher model replays your audio\n→ audits what was learned"]
        F -->|"bad rule"| G["auto-retired"]
        F -->|"quality regressed"| H["whole week rolled back"]
    end
    B --> E
    F -->|"confirmed"| C
  1. Capture — every utterance stores its audio, raw text, and confidence in local files.
  2. Bias — your vocabulary and recent context steer the Whisper decoder (hotwords / prompt) on every recording.
  3. Contextual fix — an optional LLM pass repairs misheard proper nouns using surrounding context.
  4. Mine — a weekly background job scans your history for recurring errors and auto-learns corrections and vocabulary. Multi-vote adjudication and a protected-languages guard (for bilingual users) keep it safe; it never asks you to triage.
  5. Audit — a teacher model (a larger Whisper) replays your retained audio to verify what was learned. Bad rules are retired automatically, and a system-level drift metric rolls back an entire week of learning if quality regressed.

Rules are always probationary, never tenured — anything that stops helping is dropped. Your only touchpoint is an occasional desktop notification telling you what was learned.

Features

  • Streaming: text appears as you speak, not after you stop
  • Works everywhere: IBus input method for GUI apps, clipboard for terminals
  • Wayland + X11: evdev hotkeys work on both, no root required
  • Pre-buffer: never miss the first syllable
  • Voice commands: "new line", "comma", "scratch that", punctuation by name
  • Autocorrect: LLM-powered review of recurring Whisper mistakes (voiceio correct)
  • Text-to-speech: hear selected text spoken back (Piper, eSpeak, Edge TTS)
  • Smart post-processing: numbers ("twenty five" → "25"), punctuation, capitalization
  • Auto-healing: falls back to the next working backend if one fails
  • Autostart: optional systemd service, restarts on crash
  • Self-diagnosing: voiceio doctor checks everything, --fix repairs it

Models

Model Size Speed Accuracy Good for
tiny 75 MB ~10x realtime Basic Quick notes, low-end hardware
base 150 MB ~7x realtime Good Daily use (default)
small 500 MB ~4x realtime Better Longer dictation
medium 1.5 GB ~2x realtime Great Accuracy-sensitive work
large-v3 3 GB ~1x realtime Best Maximum quality, GPU recommended

Models download automatically on first use. Switch anytime: voiceio --model small.

Commands

voiceio                  Start the daemon
voiceio setup            Interactive setup wizard
voiceio doctor           Health check (--fix to auto-repair)
voiceio test             Test microphone + live transcription
voiceio demo             Interactive guided tour of all features
voiceio toggle           Toggle recording on a running daemon
voiceio correct          Review and fix recurring transcription errors
voiceio history          View transcription history
voiceio update           Update to latest version
voiceio service install  Autostart on login (systemd / Windows Startup)
voiceio logs             View recent logs
voiceio uninstall        Remove all system integrations

Configuration

voiceio setup handles everything interactively. To tweak later, edit the config file or override at runtime:

  • Linux/macOS: ~/.config/voiceio/config.toml
  • Windows: %LOCALAPPDATA%\voiceio\config\config.toml (see Experimental platforms)
voiceio --model large-v3 --language auto -v

See config.example.toml for all options.

Troubleshooting

voiceio doctor           # see what's working
voiceio doctor --fix     # auto-fix issues
voiceio logs             # check debug output
Problem Fix
No text appears voiceio doctor --fix - usually a missing IBus component or GNOME input source
Hotkey doesn't work on Wayland sudo usermod -aG input $USER then log out and back in
Transcription too slow Use a smaller model: voiceio --model tiny
Want to start fresh voiceio uninstall then voiceio setup
Windows / macOS issues These platforms are experimental and untested — see Experimental platforms

Platform support

voiceio targets Linux. That's what it's developed and tested against.

Platform Status Text injection Hotkeys Streaming preview
Ubuntu / Debian (GNOME, Wayland) Tested daily IBus evdev / GNOME shortcut Yes
Ubuntu / Debian (GNOME, X11) Supported IBus evdev / pynput Yes
Fedora (GNOME) Supported IBus evdev / GNOME shortcut Yes
Arch Linux Supported IBus evdev Yes
KDE / Sway / Hyprland Should work IBus / ydotool / wtype evdev Yes

voiceio auto-detects your platform and picks the best available backends. Run voiceio doctor to see what's working on your system.

Experimental platforms

Windows and macOS code paths exist, but they are experimental, untested, and unmaintained — the maintainer only develops on Linux, so they may be broken at any given time. No parity with Linux is promised. Contributions are welcome, but please don't file bugs expecting a fix.

Platform Status Text injection Hotkeys Streaming preview
Windows 10/11 Experimental / untested pynput / clipboard pynput Type-and-correct (no preedit)
macOS Experimental / untested pynput / clipboard pynput Type-and-correct (no preedit)
  • Windows: pip install python-voiceio then voiceio setup (pynput handles hotkeys + text injection; no system deps). Prebuilt installers may appear on GitHub Releases.
  • macOS: pipx install python-voiceio then voiceio setup. If it doesn't work for you, consider aquavoice.com or contribute a PR.
  • Config lives at %LOCALAPPDATA%\voiceio\config\config.toml (Windows) or ~/.config/voiceio/config.toml (macOS).

Uninstall

voiceio uninstall        # removes service, IBus, shortcuts, symlinks
pipx uninstall python-voiceio   # removes the package

Roadmap

Contributions welcome! See CONTRIBUTING.md and open issues.

Now

  • macOS polish (IMKit for native preedit, Accessibility API for text injection)

Soon

  • Per-app context awareness (detect focused app, adapt formatting/behavior)
  • File/audio transcription mode (voiceio transcribe recording.mp3)

Backlog

  • Multiple engine backends (whisper.cpp for Vulkan/AMD, VOSK for low-end hardware)
  • Echo cancellation (filter system audio for meeting use)
  • Wake word activation ("Hey voiceio") Done
  • Text-to-speech output (Piper/eSpeak/Edge TTS — completes the "io")
  • LLM auto-audit dictionary (voiceio correct --auto — scan history with LLM, interactive correction)
  • LLM post-processing via Ollama (grammar cleanup, spelling fixes on final pass)
  • Corrections dictionary — auto-replace misheard words, "correct that" voice command
  • Transcription history — searchable log of everything you've dictated
  • Number-to-digit conversion ("three hundred forty two" → "342")
  • VAD-based silence filtering (Silero VAD, prevents Whisper hallucinations)
  • Voice commands — "new line", "new paragraph", "scratch that", punctuation by name
  • Custom vocabulary / personal dictionary (bias Whisper via initial_prompt)
  • Smart punctuation & capitalization post-processing
  • Windows support (experimental, untested)
  • System tray icon with animated states
  • Auto-stop on silence

License

MIT

Release files for python-voiceio 0.9.11

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

Source distribution (sdist)

Source distribution for python-voiceio 0.9.11
File Size Uploaded
python_voiceio-0.9.11.tar.gz 2.2 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for python-voiceio 0.9.11
File Interpreter ABI Platform
python_voiceio-0.9.11-py3-none-any.whl Python 3 none any Details

Total release size: 4.4 MB

Release files / python_voiceio-0.9.11.tar.gz

Download URL python_voiceio-0.9.11.tar.gz
Size 2.2 MB
Tags Source
SHA-256 checksum
How to use checksums
69bf78c7210e95164b78b6b0482e1bb7fe2e286bf19149b0b96378a0849e37fd
BLAKE2b-256 checksum
How to use checksums
45208f44cd8457497b228c5b83338ca1dff00c52c4cba727a8d5b780a6472155
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 11, 2026.

Transparency log

Release files / python_voiceio-0.9.11-py3-none-any.whl

Download URL python_voiceio-0.9.11-py3-none-any.whl
Size 2.2 MB
Tags Python 3
SHA-256 checksum
How to use checksums
fb8440f0e59759c338a92483ceb52f677746309b4c51e3aa33b9d3ffc5f5ada9
BLAKE2b-256 checksum
How to use checksums
c316748f83f22e0b9cdf0ec8fe1814012467738b98e0c4d38153fa5d98897027
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 11, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.9.11 This release

2 release files

0.9.10

2 release files

0.9.9

2 release files

0.9.8

2 release files

0.9.7

2 release files

0.9.6

2 release files

0.9.5

2 release files

0.9.4

2 release files

0.9.3

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.13

2 release files

0.3.12

2 release files

0.3.11

2 release files

0.3.10

2 release files

0.3.9

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.1

2 release files

0.2.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