python-voiceio 0.3.13__tar.gz → 0.4.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_voiceio-0.3.13/python_voiceio.egg-info → python_voiceio-0.4.1}/PKG-INFO +74 -40
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/README.md +67 -35
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/pyproject.toml +7 -5
- {python_voiceio-0.3.13 → python_voiceio-0.4.1/python_voiceio.egg-info}/PKG-INFO +74 -40
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/python_voiceio.egg-info/SOURCES.txt +19 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/python_voiceio.egg-info/requires.txt +5 -0
- python_voiceio-0.4.1/tests/test_adjudicate.py +288 -0
- python_voiceio-0.4.1/tests/test_audio_quality.py +138 -0
- python_voiceio-0.4.1/tests/test_audit.py +297 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_autocorrect.py +56 -3
- python_voiceio-0.4.1/tests/test_autocorrect_state.py +51 -0
- python_voiceio-0.4.1/tests/test_concurrency_lockdown.py +254 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_config.py +1 -1
- python_voiceio-0.4.1/tests/test_correct_batch.py +129 -0
- python_voiceio-0.4.1/tests/test_ibus_pending.py +38 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_ibus_typer.py +57 -0
- python_voiceio-0.4.1/tests/test_postcorrect.py +163 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_prebuffer.py +46 -0
- python_voiceio-0.4.1/tests/test_retention.py +99 -0
- python_voiceio-0.4.1/tests/test_security_hardening.py +238 -0
- python_voiceio-0.4.1/tests/test_snapshots.py +54 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_streaming.py +117 -1
- python_voiceio-0.4.1/tests/test_transcriber.py +127 -0
- python_voiceio-0.4.1/tests/test_vocabulary.py +162 -0
- python_voiceio-0.4.1/tests/test_wizard.py +228 -0
- python_voiceio-0.4.1/voiceio/__init__.py +1 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/app.py +380 -90
- python_voiceio-0.4.1/voiceio/audit.py +409 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/autocorrect.py +257 -4
- python_voiceio-0.4.1/voiceio/autocorrect_state.py +184 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/cli.py +466 -91
- python_voiceio-0.4.1/voiceio/config.py +363 -0
- python_voiceio-0.4.1/voiceio/consent.py +57 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/corrections.py +37 -3
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/demo.py +2 -2
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/feedback.py +8 -5
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/health.py +13 -4
- python_voiceio-0.4.1/voiceio/history.py +181 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/ibus/engine.py +18 -8
- python_voiceio-0.4.1/voiceio/ibus/pending.py +43 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/llm_api.py +37 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/platform.py +121 -0
- python_voiceio-0.4.1/voiceio/postcorrect.py +207 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/postprocess.py +6 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/prompt.py +10 -2
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/recorder.py +41 -11
- python_voiceio-0.4.1/voiceio/retention.py +97 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/service.py +71 -0
- python_voiceio-0.4.1/voiceio/snapshots.py +78 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/streaming.py +89 -5
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/transcriber.py +81 -7
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/typers/ibus.py +49 -8
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/typers/ydotool.py +40 -2
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/vad.py +22 -3
- python_voiceio-0.4.1/voiceio/vocabulary.py +186 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/wizard.py +443 -84
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/worker.py +23 -3
- python_voiceio-0.3.13/tests/test_transcriber.py +0 -69
- python_voiceio-0.3.13/tests/test_vocabulary.py +0 -71
- python_voiceio-0.3.13/voiceio/__init__.py +0 -1
- python_voiceio-0.3.13/voiceio/config.py +0 -196
- python_voiceio-0.3.13/voiceio/history.py +0 -64
- python_voiceio-0.3.13/voiceio/vocabulary.py +0 -59
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/LICENSE +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/python_voiceio.egg-info/dependency_links.txt +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/python_voiceio.egg-info/entry_points.txt +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/python_voiceio.egg-info/top_level.txt +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/setup.cfg +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_app_wiring.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_backend_probes.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_cli.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_clipboard_read.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_commands.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_corrections.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_fallback.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_health.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_hints.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_history.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_llm.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_llm_api.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_numbers.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_platform.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_postprocess.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_prompt.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_recorder_integration.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_robustness.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_tts.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_vad.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/tests/test_wordfreq.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/__main__.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/backends.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/clipboard_read.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/commands.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/hints.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/hotkeys/__init__.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/hotkeys/base.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/hotkeys/chain.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/hotkeys/evdev.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/hotkeys/pynput_backend.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/hotkeys/socket_backend.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/ibus/__init__.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/llm.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/models/__init__.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/models/silero_vad.onnx +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/numbers.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/pidlock.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/sounds/__init__.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/sounds/commit.wav +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/sounds/start.wav +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/sounds/stop.wav +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/tray/__init__.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/tray/_icons.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/tray/_indicator.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/tray/_pystray.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/tts/__init__.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/tts/base.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/tts/chain.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/tts/edge_engine.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/tts/espeak.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/tts/piper_engine.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/tts/player.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/typers/__init__.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/typers/base.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/typers/chain.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/typers/clipboard.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/typers/pynput_type.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/typers/wtype.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/typers/xdotool.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.1}/voiceio/wordfreq.py +0 -0
|
@@ -1,20 +1,18 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-voiceio
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary: Speak → text, locally, instantly.
|
|
3
|
+
Version: 0.4.1
|
|
4
|
+
Summary: Voice dictation for Linux. Speak → text, locally, instantly.
|
|
5
5
|
Author: Hugo Montenegro
|
|
6
6
|
License-Expression: MIT
|
|
7
7
|
Project-URL: Homepage, https://github.com/Hugo0/voiceio
|
|
8
8
|
Project-URL: Repository, https://github.com/Hugo0/voiceio
|
|
9
9
|
Project-URL: Issues, https://github.com/Hugo0/voiceio/issues
|
|
10
10
|
Project-URL: Changelog, https://github.com/Hugo0/voiceio/releases
|
|
11
|
-
Keywords: voice,speech-to-text,whisper,linux,
|
|
11
|
+
Keywords: voice,speech-to-text,whisper,linux,dictation,wayland,ibus
|
|
12
12
|
Classifier: Development Status :: 4 - Beta
|
|
13
13
|
Classifier: Environment :: X11 Applications
|
|
14
14
|
Classifier: Intended Audience :: End Users/Desktop
|
|
15
15
|
Classifier: Operating System :: POSIX :: Linux
|
|
16
|
-
Classifier: Operating System :: Microsoft :: Windows
|
|
17
|
-
Classifier: Operating System :: MacOS
|
|
18
16
|
Classifier: Programming Language :: Python :: 3
|
|
19
17
|
Classifier: Topic :: Multimedia :: Sound/Audio :: Speech
|
|
20
18
|
Requires-Python: >=3.11
|
|
@@ -42,6 +40,10 @@ Requires-Dist: edge-tts>=6.1.0; extra == "tts-cloud"
|
|
|
42
40
|
Provides-Extra: dev
|
|
43
41
|
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
44
42
|
Requires-Dist: pytest-mock; extra == "dev"
|
|
43
|
+
Provides-Extra: linux
|
|
44
|
+
Requires-Dist: pystray>=0.19; extra == "linux"
|
|
45
|
+
Requires-Dist: Pillow>=10.0; extra == "linux"
|
|
46
|
+
Requires-Dist: piper-tts>=1.2.0; extra == "linux"
|
|
45
47
|
Dynamic: license-file
|
|
46
48
|
|
|
47
49
|
# voiceio
|
|
@@ -61,15 +63,24 @@ Dynamic: license-file
|
|
|
61
63
|
[](LICENSE)
|
|
62
64
|
[](https://pepy.tech/projects/python-voiceio)
|
|
63
65
|
|
|
64
|
-
|
|
66
|
+
Voice dictation for Linux. Local, yours, and it learns how you speak.
|
|
65
67
|
|
|
66
68
|
https://github.com/user-attachments/assets/9cf5d1ac-b4bb-4cf8-b775-7a66dc16b376
|
|
67
69
|
|
|
70
|
+
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.
|
|
71
|
+
|
|
72
|
+
- **Local & sovereign** — speech is transcribed on-device with [faster-whisper](https://github.com/SYSTRAN/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.
|
|
73
|
+
- **Improves with use — automatically** — every utterance teaches it your words and names. See [How it learns](#how-it-learns).
|
|
74
|
+
- **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](CLAUDE.md).
|
|
75
|
+
|
|
76
|
+
> **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](#experimental-platforms).
|
|
77
|
+
|
|
68
78
|
## Quick start
|
|
69
79
|
|
|
70
80
|
```bash
|
|
71
|
-
# 1. Install system dependencies (Ubuntu/Debian)
|
|
72
|
-
|
|
81
|
+
# 1. Install system dependencies (Ubuntu/Debian). build-essential + python3-dev
|
|
82
|
+
# are needed to compile evdev (no prebuilt wheel); portaudio for the mic.
|
|
83
|
+
sudo apt install pipx build-essential python3-dev portaudio19-dev ibus gir1.2-ibus-1.0 python3-gi
|
|
73
84
|
|
|
74
85
|
# 2. Install voiceio
|
|
75
86
|
pipx install python-voiceio
|
|
@@ -80,11 +91,14 @@ voiceio setup
|
|
|
80
91
|
|
|
81
92
|
That's it. Press **Ctrl+Alt+V** (or your chosen hotkey) to start dictating.
|
|
82
93
|
|
|
94
|
+
**Installing with an AI agent?** Point it at [INSTALL.md](INSTALL.md) — a terse,
|
|
95
|
+
copy-pasteable runbook (`voiceio setup --defaults` / `--answers '{json}'`, no TTY needed).
|
|
96
|
+
|
|
83
97
|
<details>
|
|
84
98
|
<summary><strong>Fedora</strong></summary>
|
|
85
99
|
|
|
86
100
|
```bash
|
|
87
|
-
sudo dnf install pipx
|
|
101
|
+
sudo dnf install pipx gcc gcc-c++ make python3-devel portaudio-devel ibus ibus-libs python3-gobject
|
|
88
102
|
pipx install python-voiceio
|
|
89
103
|
voiceio setup
|
|
90
104
|
```
|
|
@@ -94,36 +108,17 @@ voiceio setup
|
|
|
94
108
|
<summary><strong>Arch Linux</strong></summary>
|
|
95
109
|
|
|
96
110
|
```bash
|
|
97
|
-
sudo pacman -S python-pipx ibus python-gobject
|
|
98
|
-
#
|
|
111
|
+
sudo pacman -S python-pipx base-devel portaudio ibus python-gobject
|
|
112
|
+
# base-devel provides gcc/make; the python package ships headers.
|
|
99
113
|
pipx install python-voiceio
|
|
100
114
|
voiceio setup
|
|
101
115
|
```
|
|
102
116
|
</details>
|
|
103
117
|
|
|
104
118
|
<details>
|
|
105
|
-
<summary><strong>Windows</strong></summary>
|
|
119
|
+
<summary><strong>Windows / macOS (experimental)</strong></summary>
|
|
106
120
|
|
|
107
|
-
|
|
108
|
-
# Option A: Install with pip (requires Python 3.11+)
|
|
109
|
-
pip install python-voiceio
|
|
110
|
-
voiceio setup
|
|
111
|
-
|
|
112
|
-
# Option B: Download the installer from GitHub Releases (no Python needed)
|
|
113
|
-
# https://github.com/Hugo0/voiceio/releases
|
|
114
|
-
# Also available as a portable .zip if you prefer no installation.
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
Windows uses pynput for hotkeys and text injection. No extra system dependencies required.
|
|
118
|
-
</details>
|
|
119
|
-
|
|
120
|
-
<details>
|
|
121
|
-
<summary><strong>macOS</strong></summary>
|
|
122
|
-
|
|
123
|
-
```bash
|
|
124
|
-
pipx install python-voiceio
|
|
125
|
-
voiceio setup
|
|
126
|
-
```
|
|
121
|
+
See [Experimental platforms](#experimental-platforms) below — these builds are untested and unmaintained.
|
|
127
122
|
</details>
|
|
128
123
|
|
|
129
124
|
<details>
|
|
@@ -152,7 +147,35 @@ hotkey → mic capture → whisper (local) → text at cursor
|
|
|
152
147
|
pre-buffered streaming IBus / clipboard
|
|
153
148
|
```
|
|
154
149
|
|
|
155
|
-
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](https://github.com/SYSTRAN/faster-whisper), text is injected through IBus (any GTK/Qt app) with clipboard fallback for terminals.
|
|
150
|
+
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](https://github.com/SYSTRAN/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`.
|
|
151
|
+
|
|
152
|
+
## How it learns
|
|
153
|
+
|
|
154
|
+
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.
|
|
155
|
+
|
|
156
|
+
```mermaid
|
|
157
|
+
flowchart LR
|
|
158
|
+
subgraph live ["every utterance"]
|
|
159
|
+
A["🎙️ dictate"] --> B["store audio + raw text\n+ confidence (local)"]
|
|
160
|
+
A --> C["hotwords + recent context\nbias the Whisper decoder"]
|
|
161
|
+
A --> D["optional LLM pass fixes\nmisheard proper nouns"]
|
|
162
|
+
end
|
|
163
|
+
subgraph weekly ["weekly, in the background"]
|
|
164
|
+
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"]
|
|
165
|
+
F -->|"bad rule"| G["auto-retired"]
|
|
166
|
+
F -->|"quality regressed"| H["whole week rolled back"]
|
|
167
|
+
end
|
|
168
|
+
B --> E
|
|
169
|
+
F -->|"confirmed"| C
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
1. **Capture** — every utterance stores its audio, raw text, and confidence in local files.
|
|
173
|
+
2. **Bias** — your vocabulary and recent context steer the Whisper decoder (hotwords / prompt) on every recording.
|
|
174
|
+
3. **Contextual fix** — an optional LLM pass repairs misheard proper nouns using surrounding context.
|
|
175
|
+
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.
|
|
176
|
+
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.
|
|
177
|
+
|
|
178
|
+
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.
|
|
156
179
|
|
|
157
180
|
## Features
|
|
158
181
|
|
|
@@ -202,7 +225,7 @@ voiceio uninstall Remove all system integrations
|
|
|
202
225
|
`voiceio setup` handles everything interactively. To tweak later, edit the config file or override at runtime:
|
|
203
226
|
|
|
204
227
|
- Linux/macOS: `~/.config/voiceio/config.toml`
|
|
205
|
-
- Windows: `%LOCALAPPDATA%\voiceio\config\config.toml`
|
|
228
|
+
- Windows: `%LOCALAPPDATA%\voiceio\config\config.toml` (see [Experimental platforms](#experimental-platforms))
|
|
206
229
|
|
|
207
230
|
```bash
|
|
208
231
|
voiceio --model large-v3 --language auto -v
|
|
@@ -224,12 +247,12 @@ voiceio logs # check debug output
|
|
|
224
247
|
| Hotkey doesn't work on Wayland | `sudo usermod -aG input $USER` then log out and back in |
|
|
225
248
|
| Transcription too slow | Use a smaller model: `voiceio --model tiny` |
|
|
226
249
|
| Want to start fresh | `voiceio uninstall` then `voiceio setup` |
|
|
227
|
-
| Windows
|
|
228
|
-
| Windows: no sound feedback | Check `voiceio logs` for audio device info |
|
|
229
|
-
| macOS issues | Experimental — consider [aquavoice.com](https://aquavoice.com/) or contribute a PR |
|
|
250
|
+
| Windows / macOS issues | These platforms are experimental and untested — see [Experimental platforms](#experimental-platforms) |
|
|
230
251
|
|
|
231
252
|
## Platform support
|
|
232
253
|
|
|
254
|
+
voiceio targets **Linux**. That's what it's developed and tested against.
|
|
255
|
+
|
|
233
256
|
| Platform | Status | Text injection | Hotkeys | Streaming preview |
|
|
234
257
|
|----------|--------|---------------|---------|-------------------|
|
|
235
258
|
| Ubuntu / Debian (GNOME, Wayland) | **Tested daily** | IBus | evdev / GNOME shortcut | Yes |
|
|
@@ -237,11 +260,22 @@ voiceio logs # check debug output
|
|
|
237
260
|
| Fedora (GNOME) | Supported | IBus | evdev / GNOME shortcut | Yes |
|
|
238
261
|
| Arch Linux | Supported | IBus | evdev | Yes |
|
|
239
262
|
| KDE / Sway / Hyprland | Should work | IBus / ydotool / wtype | evdev | Yes |
|
|
240
|
-
| Windows 10/11 | Experimental | pynput / clipboard | pynput | Type-and-correct (no preedit) |
|
|
241
|
-
| macOS | Experimental | pynput / clipboard | pynput | Type-and-correct (no preedit) |
|
|
242
263
|
|
|
243
264
|
voiceio auto-detects your platform and picks the best available backends. Run `voiceio doctor` to see what's working on your system.
|
|
244
265
|
|
|
266
|
+
## Experimental platforms
|
|
267
|
+
|
|
268
|
+
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.
|
|
269
|
+
|
|
270
|
+
| Platform | Status | Text injection | Hotkeys | Streaming preview |
|
|
271
|
+
|----------|--------|---------------|---------|-------------------|
|
|
272
|
+
| Windows 10/11 | Experimental / untested | pynput / clipboard | pynput | Type-and-correct (no preedit) |
|
|
273
|
+
| macOS | Experimental / untested | pynput / clipboard | pynput | Type-and-correct (no preedit) |
|
|
274
|
+
|
|
275
|
+
- **Windows:** `pip install python-voiceio` then `voiceio setup` (pynput handles hotkeys + text injection; no system deps). Prebuilt installers may appear on [GitHub Releases](https://github.com/Hugo0/voiceio/releases).
|
|
276
|
+
- **macOS:** `pipx install python-voiceio` then `voiceio setup`. If it doesn't work for you, consider [aquavoice.com](https://aquavoice.com/) or contribute a PR.
|
|
277
|
+
- Config lives at `%LOCALAPPDATA%\voiceio\config\config.toml` (Windows) or `~/.config/voiceio/config.toml` (macOS).
|
|
278
|
+
|
|
245
279
|
## Uninstall
|
|
246
280
|
|
|
247
281
|
```bash
|
|
@@ -275,7 +309,7 @@ Contributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) and [open issues](
|
|
|
275
309
|
- [x] Voice commands — "new line", "new paragraph", "scratch that", punctuation by name
|
|
276
310
|
- [x] Custom vocabulary / personal dictionary (bias Whisper via `initial_prompt`)
|
|
277
311
|
- [x] Smart punctuation & capitalization post-processing
|
|
278
|
-
- [x] Windows support
|
|
312
|
+
- [x] Windows support (experimental, untested)
|
|
279
313
|
- [x] System tray icon with animated states
|
|
280
314
|
- [x] Auto-stop on silence
|
|
281
315
|
|
|
@@ -15,15 +15,24 @@
|
|
|
15
15
|
[](LICENSE)
|
|
16
16
|
[](https://pepy.tech/projects/python-voiceio)
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
Voice dictation for Linux. Local, yours, and it learns how you speak.
|
|
19
19
|
|
|
20
20
|
https://github.com/user-attachments/assets/9cf5d1ac-b4bb-4cf8-b775-7a66dc16b376
|
|
21
21
|
|
|
22
|
+
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.
|
|
23
|
+
|
|
24
|
+
- **Local & sovereign** — speech is transcribed on-device with [faster-whisper](https://github.com/SYSTRAN/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.
|
|
25
|
+
- **Improves with use — automatically** — every utterance teaches it your words and names. See [How it learns](#how-it-learns).
|
|
26
|
+
- **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](CLAUDE.md).
|
|
27
|
+
|
|
28
|
+
> **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](#experimental-platforms).
|
|
29
|
+
|
|
22
30
|
## Quick start
|
|
23
31
|
|
|
24
32
|
```bash
|
|
25
|
-
# 1. Install system dependencies (Ubuntu/Debian)
|
|
26
|
-
|
|
33
|
+
# 1. Install system dependencies (Ubuntu/Debian). build-essential + python3-dev
|
|
34
|
+
# are needed to compile evdev (no prebuilt wheel); portaudio for the mic.
|
|
35
|
+
sudo apt install pipx build-essential python3-dev portaudio19-dev ibus gir1.2-ibus-1.0 python3-gi
|
|
27
36
|
|
|
28
37
|
# 2. Install voiceio
|
|
29
38
|
pipx install python-voiceio
|
|
@@ -34,11 +43,14 @@ voiceio setup
|
|
|
34
43
|
|
|
35
44
|
That's it. Press **Ctrl+Alt+V** (or your chosen hotkey) to start dictating.
|
|
36
45
|
|
|
46
|
+
**Installing with an AI agent?** Point it at [INSTALL.md](INSTALL.md) — a terse,
|
|
47
|
+
copy-pasteable runbook (`voiceio setup --defaults` / `--answers '{json}'`, no TTY needed).
|
|
48
|
+
|
|
37
49
|
<details>
|
|
38
50
|
<summary><strong>Fedora</strong></summary>
|
|
39
51
|
|
|
40
52
|
```bash
|
|
41
|
-
sudo dnf install pipx
|
|
53
|
+
sudo dnf install pipx gcc gcc-c++ make python3-devel portaudio-devel ibus ibus-libs python3-gobject
|
|
42
54
|
pipx install python-voiceio
|
|
43
55
|
voiceio setup
|
|
44
56
|
```
|
|
@@ -48,36 +60,17 @@ voiceio setup
|
|
|
48
60
|
<summary><strong>Arch Linux</strong></summary>
|
|
49
61
|
|
|
50
62
|
```bash
|
|
51
|
-
sudo pacman -S python-pipx ibus python-gobject
|
|
52
|
-
#
|
|
63
|
+
sudo pacman -S python-pipx base-devel portaudio ibus python-gobject
|
|
64
|
+
# base-devel provides gcc/make; the python package ships headers.
|
|
53
65
|
pipx install python-voiceio
|
|
54
66
|
voiceio setup
|
|
55
67
|
```
|
|
56
68
|
</details>
|
|
57
69
|
|
|
58
70
|
<details>
|
|
59
|
-
<summary><strong>Windows</strong></summary>
|
|
71
|
+
<summary><strong>Windows / macOS (experimental)</strong></summary>
|
|
60
72
|
|
|
61
|
-
|
|
62
|
-
# Option A: Install with pip (requires Python 3.11+)
|
|
63
|
-
pip install python-voiceio
|
|
64
|
-
voiceio setup
|
|
65
|
-
|
|
66
|
-
# Option B: Download the installer from GitHub Releases (no Python needed)
|
|
67
|
-
# https://github.com/Hugo0/voiceio/releases
|
|
68
|
-
# Also available as a portable .zip if you prefer no installation.
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
Windows uses pynput for hotkeys and text injection. No extra system dependencies required.
|
|
72
|
-
</details>
|
|
73
|
-
|
|
74
|
-
<details>
|
|
75
|
-
<summary><strong>macOS</strong></summary>
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
pipx install python-voiceio
|
|
79
|
-
voiceio setup
|
|
80
|
-
```
|
|
73
|
+
See [Experimental platforms](#experimental-platforms) below — these builds are untested and unmaintained.
|
|
81
74
|
</details>
|
|
82
75
|
|
|
83
76
|
<details>
|
|
@@ -106,7 +99,35 @@ hotkey → mic capture → whisper (local) → text at cursor
|
|
|
106
99
|
pre-buffered streaming IBus / clipboard
|
|
107
100
|
```
|
|
108
101
|
|
|
109
|
-
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](https://github.com/SYSTRAN/faster-whisper), text is injected through IBus (any GTK/Qt app) with clipboard fallback for terminals.
|
|
102
|
+
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](https://github.com/SYSTRAN/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`.
|
|
103
|
+
|
|
104
|
+
## How it learns
|
|
105
|
+
|
|
106
|
+
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.
|
|
107
|
+
|
|
108
|
+
```mermaid
|
|
109
|
+
flowchart LR
|
|
110
|
+
subgraph live ["every utterance"]
|
|
111
|
+
A["🎙️ dictate"] --> B["store audio + raw text\n+ confidence (local)"]
|
|
112
|
+
A --> C["hotwords + recent context\nbias the Whisper decoder"]
|
|
113
|
+
A --> D["optional LLM pass fixes\nmisheard proper nouns"]
|
|
114
|
+
end
|
|
115
|
+
subgraph weekly ["weekly, in the background"]
|
|
116
|
+
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"]
|
|
117
|
+
F -->|"bad rule"| G["auto-retired"]
|
|
118
|
+
F -->|"quality regressed"| H["whole week rolled back"]
|
|
119
|
+
end
|
|
120
|
+
B --> E
|
|
121
|
+
F -->|"confirmed"| C
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
1. **Capture** — every utterance stores its audio, raw text, and confidence in local files.
|
|
125
|
+
2. **Bias** — your vocabulary and recent context steer the Whisper decoder (hotwords / prompt) on every recording.
|
|
126
|
+
3. **Contextual fix** — an optional LLM pass repairs misheard proper nouns using surrounding context.
|
|
127
|
+
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.
|
|
128
|
+
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.
|
|
129
|
+
|
|
130
|
+
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.
|
|
110
131
|
|
|
111
132
|
## Features
|
|
112
133
|
|
|
@@ -156,7 +177,7 @@ voiceio uninstall Remove all system integrations
|
|
|
156
177
|
`voiceio setup` handles everything interactively. To tweak later, edit the config file or override at runtime:
|
|
157
178
|
|
|
158
179
|
- Linux/macOS: `~/.config/voiceio/config.toml`
|
|
159
|
-
- Windows: `%LOCALAPPDATA%\voiceio\config\config.toml`
|
|
180
|
+
- Windows: `%LOCALAPPDATA%\voiceio\config\config.toml` (see [Experimental platforms](#experimental-platforms))
|
|
160
181
|
|
|
161
182
|
```bash
|
|
162
183
|
voiceio --model large-v3 --language auto -v
|
|
@@ -178,12 +199,12 @@ voiceio logs # check debug output
|
|
|
178
199
|
| Hotkey doesn't work on Wayland | `sudo usermod -aG input $USER` then log out and back in |
|
|
179
200
|
| Transcription too slow | Use a smaller model: `voiceio --model tiny` |
|
|
180
201
|
| Want to start fresh | `voiceio uninstall` then `voiceio setup` |
|
|
181
|
-
| Windows
|
|
182
|
-
| Windows: no sound feedback | Check `voiceio logs` for audio device info |
|
|
183
|
-
| macOS issues | Experimental — consider [aquavoice.com](https://aquavoice.com/) or contribute a PR |
|
|
202
|
+
| Windows / macOS issues | These platforms are experimental and untested — see [Experimental platforms](#experimental-platforms) |
|
|
184
203
|
|
|
185
204
|
## Platform support
|
|
186
205
|
|
|
206
|
+
voiceio targets **Linux**. That's what it's developed and tested against.
|
|
207
|
+
|
|
187
208
|
| Platform | Status | Text injection | Hotkeys | Streaming preview |
|
|
188
209
|
|----------|--------|---------------|---------|-------------------|
|
|
189
210
|
| Ubuntu / Debian (GNOME, Wayland) | **Tested daily** | IBus | evdev / GNOME shortcut | Yes |
|
|
@@ -191,11 +212,22 @@ voiceio logs # check debug output
|
|
|
191
212
|
| Fedora (GNOME) | Supported | IBus | evdev / GNOME shortcut | Yes |
|
|
192
213
|
| Arch Linux | Supported | IBus | evdev | Yes |
|
|
193
214
|
| KDE / Sway / Hyprland | Should work | IBus / ydotool / wtype | evdev | Yes |
|
|
194
|
-
| Windows 10/11 | Experimental | pynput / clipboard | pynput | Type-and-correct (no preedit) |
|
|
195
|
-
| macOS | Experimental | pynput / clipboard | pynput | Type-and-correct (no preedit) |
|
|
196
215
|
|
|
197
216
|
voiceio auto-detects your platform and picks the best available backends. Run `voiceio doctor` to see what's working on your system.
|
|
198
217
|
|
|
218
|
+
## Experimental platforms
|
|
219
|
+
|
|
220
|
+
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.
|
|
221
|
+
|
|
222
|
+
| Platform | Status | Text injection | Hotkeys | Streaming preview |
|
|
223
|
+
|----------|--------|---------------|---------|-------------------|
|
|
224
|
+
| Windows 10/11 | Experimental / untested | pynput / clipboard | pynput | Type-and-correct (no preedit) |
|
|
225
|
+
| macOS | Experimental / untested | pynput / clipboard | pynput | Type-and-correct (no preedit) |
|
|
226
|
+
|
|
227
|
+
- **Windows:** `pip install python-voiceio` then `voiceio setup` (pynput handles hotkeys + text injection; no system deps). Prebuilt installers may appear on [GitHub Releases](https://github.com/Hugo0/voiceio/releases).
|
|
228
|
+
- **macOS:** `pipx install python-voiceio` then `voiceio setup`. If it doesn't work for you, consider [aquavoice.com](https://aquavoice.com/) or contribute a PR.
|
|
229
|
+
- Config lives at `%LOCALAPPDATA%\voiceio\config\config.toml` (Windows) or `~/.config/voiceio/config.toml` (macOS).
|
|
230
|
+
|
|
199
231
|
## Uninstall
|
|
200
232
|
|
|
201
233
|
```bash
|
|
@@ -229,7 +261,7 @@ Contributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) and [open issues](
|
|
|
229
261
|
- [x] Voice commands — "new line", "new paragraph", "scratch that", punctuation by name
|
|
230
262
|
- [x] Custom vocabulary / personal dictionary (bias Whisper via `initial_prompt`)
|
|
231
263
|
- [x] Smart punctuation & capitalization post-processing
|
|
232
|
-
- [x] Windows support
|
|
264
|
+
- [x] Windows support (experimental, untested)
|
|
233
265
|
- [x] System tray icon with animated states
|
|
234
266
|
- [x] Auto-stop on silence
|
|
235
267
|
|
|
@@ -4,20 +4,18 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "python-voiceio"
|
|
7
|
-
version = "0.
|
|
8
|
-
description = "Speak → text, locally, instantly."
|
|
7
|
+
version = "0.4.1"
|
|
8
|
+
description = "Voice dictation for Linux. Speak → text, locally, instantly."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
11
11
|
requires-python = ">=3.11"
|
|
12
12
|
authors = [{ name = "Hugo Montenegro" }]
|
|
13
|
-
keywords = ["voice", "speech-to-text", "whisper", "linux", "
|
|
13
|
+
keywords = ["voice", "speech-to-text", "whisper", "linux", "dictation", "wayland", "ibus"]
|
|
14
14
|
classifiers = [
|
|
15
15
|
"Development Status :: 4 - Beta",
|
|
16
16
|
"Environment :: X11 Applications",
|
|
17
17
|
"Intended Audience :: End Users/Desktop",
|
|
18
18
|
"Operating System :: POSIX :: Linux",
|
|
19
|
-
"Operating System :: Microsoft :: Windows",
|
|
20
|
-
"Operating System :: MacOS",
|
|
21
19
|
"Programming Language :: Python :: 3",
|
|
22
20
|
"Topic :: Multimedia :: Sound/Audio :: Speech",
|
|
23
21
|
]
|
|
@@ -39,6 +37,10 @@ tray = ["pystray>=0.19", "Pillow>=10.0"]
|
|
|
39
37
|
tts = ["piper-tts>=1.2.0"]
|
|
40
38
|
tts-cloud = ["edge-tts>=6.1.0"]
|
|
41
39
|
dev = ["pytest>=7.0", "pytest-mock"]
|
|
40
|
+
# Convenience bundle for a full Linux install (tray icon + local TTS). The core
|
|
41
|
+
# Linux deps (evdev, sounddevice) are already unconditional; system packages
|
|
42
|
+
# (IBus, PortAudio, a C toolchain) are installed separately — see README.
|
|
43
|
+
linux = ["pystray>=0.19", "Pillow>=10.0", "piper-tts>=1.2.0"]
|
|
42
44
|
|
|
43
45
|
[project.urls]
|
|
44
46
|
Homepage = "https://github.com/Hugo0/voiceio"
|
|
@@ -1,20 +1,18 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-voiceio
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary: Speak → text, locally, instantly.
|
|
3
|
+
Version: 0.4.1
|
|
4
|
+
Summary: Voice dictation for Linux. Speak → text, locally, instantly.
|
|
5
5
|
Author: Hugo Montenegro
|
|
6
6
|
License-Expression: MIT
|
|
7
7
|
Project-URL: Homepage, https://github.com/Hugo0/voiceio
|
|
8
8
|
Project-URL: Repository, https://github.com/Hugo0/voiceio
|
|
9
9
|
Project-URL: Issues, https://github.com/Hugo0/voiceio/issues
|
|
10
10
|
Project-URL: Changelog, https://github.com/Hugo0/voiceio/releases
|
|
11
|
-
Keywords: voice,speech-to-text,whisper,linux,
|
|
11
|
+
Keywords: voice,speech-to-text,whisper,linux,dictation,wayland,ibus
|
|
12
12
|
Classifier: Development Status :: 4 - Beta
|
|
13
13
|
Classifier: Environment :: X11 Applications
|
|
14
14
|
Classifier: Intended Audience :: End Users/Desktop
|
|
15
15
|
Classifier: Operating System :: POSIX :: Linux
|
|
16
|
-
Classifier: Operating System :: Microsoft :: Windows
|
|
17
|
-
Classifier: Operating System :: MacOS
|
|
18
16
|
Classifier: Programming Language :: Python :: 3
|
|
19
17
|
Classifier: Topic :: Multimedia :: Sound/Audio :: Speech
|
|
20
18
|
Requires-Python: >=3.11
|
|
@@ -42,6 +40,10 @@ Requires-Dist: edge-tts>=6.1.0; extra == "tts-cloud"
|
|
|
42
40
|
Provides-Extra: dev
|
|
43
41
|
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
44
42
|
Requires-Dist: pytest-mock; extra == "dev"
|
|
43
|
+
Provides-Extra: linux
|
|
44
|
+
Requires-Dist: pystray>=0.19; extra == "linux"
|
|
45
|
+
Requires-Dist: Pillow>=10.0; extra == "linux"
|
|
46
|
+
Requires-Dist: piper-tts>=1.2.0; extra == "linux"
|
|
45
47
|
Dynamic: license-file
|
|
46
48
|
|
|
47
49
|
# voiceio
|
|
@@ -61,15 +63,24 @@ Dynamic: license-file
|
|
|
61
63
|
[](LICENSE)
|
|
62
64
|
[](https://pepy.tech/projects/python-voiceio)
|
|
63
65
|
|
|
64
|
-
|
|
66
|
+
Voice dictation for Linux. Local, yours, and it learns how you speak.
|
|
65
67
|
|
|
66
68
|
https://github.com/user-attachments/assets/9cf5d1ac-b4bb-4cf8-b775-7a66dc16b376
|
|
67
69
|
|
|
70
|
+
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.
|
|
71
|
+
|
|
72
|
+
- **Local & sovereign** — speech is transcribed on-device with [faster-whisper](https://github.com/SYSTRAN/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.
|
|
73
|
+
- **Improves with use — automatically** — every utterance teaches it your words and names. See [How it learns](#how-it-learns).
|
|
74
|
+
- **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](CLAUDE.md).
|
|
75
|
+
|
|
76
|
+
> **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](#experimental-platforms).
|
|
77
|
+
|
|
68
78
|
## Quick start
|
|
69
79
|
|
|
70
80
|
```bash
|
|
71
|
-
# 1. Install system dependencies (Ubuntu/Debian)
|
|
72
|
-
|
|
81
|
+
# 1. Install system dependencies (Ubuntu/Debian). build-essential + python3-dev
|
|
82
|
+
# are needed to compile evdev (no prebuilt wheel); portaudio for the mic.
|
|
83
|
+
sudo apt install pipx build-essential python3-dev portaudio19-dev ibus gir1.2-ibus-1.0 python3-gi
|
|
73
84
|
|
|
74
85
|
# 2. Install voiceio
|
|
75
86
|
pipx install python-voiceio
|
|
@@ -80,11 +91,14 @@ voiceio setup
|
|
|
80
91
|
|
|
81
92
|
That's it. Press **Ctrl+Alt+V** (or your chosen hotkey) to start dictating.
|
|
82
93
|
|
|
94
|
+
**Installing with an AI agent?** Point it at [INSTALL.md](INSTALL.md) — a terse,
|
|
95
|
+
copy-pasteable runbook (`voiceio setup --defaults` / `--answers '{json}'`, no TTY needed).
|
|
96
|
+
|
|
83
97
|
<details>
|
|
84
98
|
<summary><strong>Fedora</strong></summary>
|
|
85
99
|
|
|
86
100
|
```bash
|
|
87
|
-
sudo dnf install pipx
|
|
101
|
+
sudo dnf install pipx gcc gcc-c++ make python3-devel portaudio-devel ibus ibus-libs python3-gobject
|
|
88
102
|
pipx install python-voiceio
|
|
89
103
|
voiceio setup
|
|
90
104
|
```
|
|
@@ -94,36 +108,17 @@ voiceio setup
|
|
|
94
108
|
<summary><strong>Arch Linux</strong></summary>
|
|
95
109
|
|
|
96
110
|
```bash
|
|
97
|
-
sudo pacman -S python-pipx ibus python-gobject
|
|
98
|
-
#
|
|
111
|
+
sudo pacman -S python-pipx base-devel portaudio ibus python-gobject
|
|
112
|
+
# base-devel provides gcc/make; the python package ships headers.
|
|
99
113
|
pipx install python-voiceio
|
|
100
114
|
voiceio setup
|
|
101
115
|
```
|
|
102
116
|
</details>
|
|
103
117
|
|
|
104
118
|
<details>
|
|
105
|
-
<summary><strong>Windows</strong></summary>
|
|
119
|
+
<summary><strong>Windows / macOS (experimental)</strong></summary>
|
|
106
120
|
|
|
107
|
-
|
|
108
|
-
# Option A: Install with pip (requires Python 3.11+)
|
|
109
|
-
pip install python-voiceio
|
|
110
|
-
voiceio setup
|
|
111
|
-
|
|
112
|
-
# Option B: Download the installer from GitHub Releases (no Python needed)
|
|
113
|
-
# https://github.com/Hugo0/voiceio/releases
|
|
114
|
-
# Also available as a portable .zip if you prefer no installation.
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
Windows uses pynput for hotkeys and text injection. No extra system dependencies required.
|
|
118
|
-
</details>
|
|
119
|
-
|
|
120
|
-
<details>
|
|
121
|
-
<summary><strong>macOS</strong></summary>
|
|
122
|
-
|
|
123
|
-
```bash
|
|
124
|
-
pipx install python-voiceio
|
|
125
|
-
voiceio setup
|
|
126
|
-
```
|
|
121
|
+
See [Experimental platforms](#experimental-platforms) below — these builds are untested and unmaintained.
|
|
127
122
|
</details>
|
|
128
123
|
|
|
129
124
|
<details>
|
|
@@ -152,7 +147,35 @@ hotkey → mic capture → whisper (local) → text at cursor
|
|
|
152
147
|
pre-buffered streaming IBus / clipboard
|
|
153
148
|
```
|
|
154
149
|
|
|
155
|
-
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](https://github.com/SYSTRAN/faster-whisper), text is injected through IBus (any GTK/Qt app) with clipboard fallback for terminals.
|
|
150
|
+
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](https://github.com/SYSTRAN/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`.
|
|
151
|
+
|
|
152
|
+
## How it learns
|
|
153
|
+
|
|
154
|
+
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.
|
|
155
|
+
|
|
156
|
+
```mermaid
|
|
157
|
+
flowchart LR
|
|
158
|
+
subgraph live ["every utterance"]
|
|
159
|
+
A["🎙️ dictate"] --> B["store audio + raw text\n+ confidence (local)"]
|
|
160
|
+
A --> C["hotwords + recent context\nbias the Whisper decoder"]
|
|
161
|
+
A --> D["optional LLM pass fixes\nmisheard proper nouns"]
|
|
162
|
+
end
|
|
163
|
+
subgraph weekly ["weekly, in the background"]
|
|
164
|
+
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"]
|
|
165
|
+
F -->|"bad rule"| G["auto-retired"]
|
|
166
|
+
F -->|"quality regressed"| H["whole week rolled back"]
|
|
167
|
+
end
|
|
168
|
+
B --> E
|
|
169
|
+
F -->|"confirmed"| C
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
1. **Capture** — every utterance stores its audio, raw text, and confidence in local files.
|
|
173
|
+
2. **Bias** — your vocabulary and recent context steer the Whisper decoder (hotwords / prompt) on every recording.
|
|
174
|
+
3. **Contextual fix** — an optional LLM pass repairs misheard proper nouns using surrounding context.
|
|
175
|
+
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.
|
|
176
|
+
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.
|
|
177
|
+
|
|
178
|
+
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.
|
|
156
179
|
|
|
157
180
|
## Features
|
|
158
181
|
|
|
@@ -202,7 +225,7 @@ voiceio uninstall Remove all system integrations
|
|
|
202
225
|
`voiceio setup` handles everything interactively. To tweak later, edit the config file or override at runtime:
|
|
203
226
|
|
|
204
227
|
- Linux/macOS: `~/.config/voiceio/config.toml`
|
|
205
|
-
- Windows: `%LOCALAPPDATA%\voiceio\config\config.toml`
|
|
228
|
+
- Windows: `%LOCALAPPDATA%\voiceio\config\config.toml` (see [Experimental platforms](#experimental-platforms))
|
|
206
229
|
|
|
207
230
|
```bash
|
|
208
231
|
voiceio --model large-v3 --language auto -v
|
|
@@ -224,12 +247,12 @@ voiceio logs # check debug output
|
|
|
224
247
|
| Hotkey doesn't work on Wayland | `sudo usermod -aG input $USER` then log out and back in |
|
|
225
248
|
| Transcription too slow | Use a smaller model: `voiceio --model tiny` |
|
|
226
249
|
| Want to start fresh | `voiceio uninstall` then `voiceio setup` |
|
|
227
|
-
| Windows
|
|
228
|
-
| Windows: no sound feedback | Check `voiceio logs` for audio device info |
|
|
229
|
-
| macOS issues | Experimental — consider [aquavoice.com](https://aquavoice.com/) or contribute a PR |
|
|
250
|
+
| Windows / macOS issues | These platforms are experimental and untested — see [Experimental platforms](#experimental-platforms) |
|
|
230
251
|
|
|
231
252
|
## Platform support
|
|
232
253
|
|
|
254
|
+
voiceio targets **Linux**. That's what it's developed and tested against.
|
|
255
|
+
|
|
233
256
|
| Platform | Status | Text injection | Hotkeys | Streaming preview |
|
|
234
257
|
|----------|--------|---------------|---------|-------------------|
|
|
235
258
|
| Ubuntu / Debian (GNOME, Wayland) | **Tested daily** | IBus | evdev / GNOME shortcut | Yes |
|
|
@@ -237,11 +260,22 @@ voiceio logs # check debug output
|
|
|
237
260
|
| Fedora (GNOME) | Supported | IBus | evdev / GNOME shortcut | Yes |
|
|
238
261
|
| Arch Linux | Supported | IBus | evdev | Yes |
|
|
239
262
|
| KDE / Sway / Hyprland | Should work | IBus / ydotool / wtype | evdev | Yes |
|
|
240
|
-
| Windows 10/11 | Experimental | pynput / clipboard | pynput | Type-and-correct (no preedit) |
|
|
241
|
-
| macOS | Experimental | pynput / clipboard | pynput | Type-and-correct (no preedit) |
|
|
242
263
|
|
|
243
264
|
voiceio auto-detects your platform and picks the best available backends. Run `voiceio doctor` to see what's working on your system.
|
|
244
265
|
|
|
266
|
+
## Experimental platforms
|
|
267
|
+
|
|
268
|
+
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.
|
|
269
|
+
|
|
270
|
+
| Platform | Status | Text injection | Hotkeys | Streaming preview |
|
|
271
|
+
|----------|--------|---------------|---------|-------------------|
|
|
272
|
+
| Windows 10/11 | Experimental / untested | pynput / clipboard | pynput | Type-and-correct (no preedit) |
|
|
273
|
+
| macOS | Experimental / untested | pynput / clipboard | pynput | Type-and-correct (no preedit) |
|
|
274
|
+
|
|
275
|
+
- **Windows:** `pip install python-voiceio` then `voiceio setup` (pynput handles hotkeys + text injection; no system deps). Prebuilt installers may appear on [GitHub Releases](https://github.com/Hugo0/voiceio/releases).
|
|
276
|
+
- **macOS:** `pipx install python-voiceio` then `voiceio setup`. If it doesn't work for you, consider [aquavoice.com](https://aquavoice.com/) or contribute a PR.
|
|
277
|
+
- Config lives at `%LOCALAPPDATA%\voiceio\config\config.toml` (Windows) or `~/.config/voiceio/config.toml` (macOS).
|
|
278
|
+
|
|
245
279
|
## Uninstall
|
|
246
280
|
|
|
247
281
|
```bash
|
|
@@ -275,7 +309,7 @@ Contributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) and [open issues](
|
|
|
275
309
|
- [x] Voice commands — "new line", "new paragraph", "scratch that", punctuation by name
|
|
276
310
|
- [x] Custom vocabulary / personal dictionary (bias Whisper via `initial_prompt`)
|
|
277
311
|
- [x] Smart punctuation & capitalization post-processing
|
|
278
|
-
- [x] Windows support
|
|
312
|
+
- [x] Windows support (experimental, untested)
|
|
279
313
|
- [x] System tray icon with animated states
|
|
280
314
|
- [x] Auto-stop on silence
|
|
281
315
|
|