python-voiceio 0.3.13__tar.gz → 0.4.0__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.0}/PKG-INFO +61 -35
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/README.md +58 -30
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/pyproject.toml +3 -5
- {python_voiceio-0.3.13 → python_voiceio-0.4.0/python_voiceio.egg-info}/PKG-INFO +61 -35
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/python_voiceio.egg-info/SOURCES.txt +13 -0
- python_voiceio-0.4.0/tests/test_adjudicate.py +288 -0
- python_voiceio-0.4.0/tests/test_audio_quality.py +138 -0
- python_voiceio-0.4.0/tests/test_audit.py +297 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_autocorrect.py +56 -3
- python_voiceio-0.4.0/tests/test_autocorrect_state.py +51 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_config.py +1 -1
- python_voiceio-0.4.0/tests/test_correct_batch.py +129 -0
- python_voiceio-0.4.0/tests/test_postcorrect.py +163 -0
- python_voiceio-0.4.0/tests/test_retention.py +99 -0
- python_voiceio-0.4.0/tests/test_snapshots.py +54 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_streaming.py +1 -1
- python_voiceio-0.4.0/tests/test_vocabulary.py +162 -0
- python_voiceio-0.4.0/voiceio/__init__.py +1 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/app.py +155 -12
- python_voiceio-0.4.0/voiceio/audit.py +409 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/autocorrect.py +257 -4
- python_voiceio-0.4.0/voiceio/autocorrect_state.py +184 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/cli.py +319 -62
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/config.py +45 -1
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/corrections.py +37 -3
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/feedback.py +8 -5
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/history.py +27 -3
- python_voiceio-0.4.0/voiceio/postcorrect.py +200 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/postprocess.py +6 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/prompt.py +10 -2
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/recorder.py +27 -0
- python_voiceio-0.4.0/voiceio/retention.py +85 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/service.py +71 -0
- python_voiceio-0.4.0/voiceio/snapshots.py +78 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/streaming.py +12 -1
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/transcriber.py +43 -3
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/vad.py +22 -3
- python_voiceio-0.4.0/voiceio/vocabulary.py +186 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/wizard.py +11 -5
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/worker.py +23 -3
- 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/vocabulary.py +0 -59
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/LICENSE +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/python_voiceio.egg-info/dependency_links.txt +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/python_voiceio.egg-info/entry_points.txt +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/python_voiceio.egg-info/requires.txt +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/python_voiceio.egg-info/top_level.txt +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/setup.cfg +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_app_wiring.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_backend_probes.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_cli.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_clipboard_read.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_commands.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_corrections.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_fallback.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_health.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_hints.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_history.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_ibus_typer.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_llm.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_llm_api.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_numbers.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_platform.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_postprocess.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_prebuffer.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_prompt.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_recorder_integration.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_robustness.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_transcriber.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_tts.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_vad.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/tests/test_wordfreq.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/__main__.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/backends.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/clipboard_read.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/commands.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/demo.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/health.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/hints.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/hotkeys/__init__.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/hotkeys/base.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/hotkeys/chain.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/hotkeys/evdev.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/hotkeys/pynput_backend.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/hotkeys/socket_backend.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/ibus/__init__.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/ibus/engine.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/llm.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/llm_api.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/models/__init__.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/models/silero_vad.onnx +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/numbers.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/pidlock.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/platform.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/sounds/__init__.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/sounds/commit.wav +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/sounds/start.wav +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/sounds/stop.wav +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/tray/__init__.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/tray/_icons.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/tray/_indicator.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/tray/_pystray.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/tts/__init__.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/tts/base.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/tts/chain.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/tts/edge_engine.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/tts/espeak.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/tts/piper_engine.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/tts/player.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/typers/__init__.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/typers/base.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/typers/chain.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/typers/clipboard.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/typers/ibus.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/typers/pynput_type.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/typers/wtype.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/typers/xdotool.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/voiceio/typers/ydotool.py +0 -0
- {python_voiceio-0.3.13 → python_voiceio-0.4.0}/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.0
|
|
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
|
|
@@ -61,10 +59,18 @@ Dynamic: license-file
|
|
|
61
59
|
[](LICENSE)
|
|
62
60
|
[](https://pepy.tech/projects/python-voiceio)
|
|
63
61
|
|
|
64
|
-
|
|
62
|
+
Voice dictation for Linux. Local, yours, and it learns how you speak.
|
|
65
63
|
|
|
66
64
|
https://github.com/user-attachments/assets/9cf5d1ac-b4bb-4cf8-b775-7a66dc16b376
|
|
67
65
|
|
|
66
|
+
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.
|
|
67
|
+
|
|
68
|
+
- **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.
|
|
69
|
+
- **Improves with use — automatically** — every utterance teaches it your words and names. See [How it learns](#how-it-learns).
|
|
70
|
+
- **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).
|
|
71
|
+
|
|
72
|
+
> **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).
|
|
73
|
+
|
|
68
74
|
## Quick start
|
|
69
75
|
|
|
70
76
|
```bash
|
|
@@ -102,28 +108,9 @@ voiceio setup
|
|
|
102
108
|
</details>
|
|
103
109
|
|
|
104
110
|
<details>
|
|
105
|
-
<summary><strong>Windows</strong></summary>
|
|
106
|
-
|
|
107
|
-
```powershell
|
|
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
|
-
```
|
|
111
|
+
<summary><strong>Windows / macOS (experimental)</strong></summary>
|
|
116
112
|
|
|
117
|
-
|
|
118
|
-
</details>
|
|
119
|
-
|
|
120
|
-
<details>
|
|
121
|
-
<summary><strong>macOS</strong></summary>
|
|
122
|
-
|
|
123
|
-
```bash
|
|
124
|
-
pipx install python-voiceio
|
|
125
|
-
voiceio setup
|
|
126
|
-
```
|
|
113
|
+
See [Experimental platforms](#experimental-platforms) below — these builds are untested and unmaintained.
|
|
127
114
|
</details>
|
|
128
115
|
|
|
129
116
|
<details>
|
|
@@ -152,7 +139,35 @@ hotkey → mic capture → whisper (local) → text at cursor
|
|
|
152
139
|
pre-buffered streaming IBus / clipboard
|
|
153
140
|
```
|
|
154
141
|
|
|
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.
|
|
142
|
+
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`.
|
|
143
|
+
|
|
144
|
+
## How it learns
|
|
145
|
+
|
|
146
|
+
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.
|
|
147
|
+
|
|
148
|
+
```mermaid
|
|
149
|
+
flowchart LR
|
|
150
|
+
subgraph live ["every utterance"]
|
|
151
|
+
A["🎙️ dictate"] --> B["store audio + raw text\n+ confidence (local)"]
|
|
152
|
+
A --> C["hotwords + recent context\nbias the Whisper decoder"]
|
|
153
|
+
A --> D["optional LLM pass fixes\nmisheard proper nouns"]
|
|
154
|
+
end
|
|
155
|
+
subgraph weekly ["weekly, in the background"]
|
|
156
|
+
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"]
|
|
157
|
+
F -->|"bad rule"| G["auto-retired"]
|
|
158
|
+
F -->|"quality regressed"| H["whole week rolled back"]
|
|
159
|
+
end
|
|
160
|
+
B --> E
|
|
161
|
+
F -->|"confirmed"| C
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
1. **Capture** — every utterance stores its audio, raw text, and confidence in local files.
|
|
165
|
+
2. **Bias** — your vocabulary and recent context steer the Whisper decoder (hotwords / prompt) on every recording.
|
|
166
|
+
3. **Contextual fix** — an optional LLM pass repairs misheard proper nouns using surrounding context.
|
|
167
|
+
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.
|
|
168
|
+
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.
|
|
169
|
+
|
|
170
|
+
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
171
|
|
|
157
172
|
## Features
|
|
158
173
|
|
|
@@ -202,7 +217,7 @@ voiceio uninstall Remove all system integrations
|
|
|
202
217
|
`voiceio setup` handles everything interactively. To tweak later, edit the config file or override at runtime:
|
|
203
218
|
|
|
204
219
|
- Linux/macOS: `~/.config/voiceio/config.toml`
|
|
205
|
-
- Windows: `%LOCALAPPDATA%\voiceio\config\config.toml`
|
|
220
|
+
- Windows: `%LOCALAPPDATA%\voiceio\config\config.toml` (see [Experimental platforms](#experimental-platforms))
|
|
206
221
|
|
|
207
222
|
```bash
|
|
208
223
|
voiceio --model large-v3 --language auto -v
|
|
@@ -224,12 +239,12 @@ voiceio logs # check debug output
|
|
|
224
239
|
| Hotkey doesn't work on Wayland | `sudo usermod -aG input $USER` then log out and back in |
|
|
225
240
|
| Transcription too slow | Use a smaller model: `voiceio --model tiny` |
|
|
226
241
|
| 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 |
|
|
242
|
+
| Windows / macOS issues | These platforms are experimental and untested — see [Experimental platforms](#experimental-platforms) |
|
|
230
243
|
|
|
231
244
|
## Platform support
|
|
232
245
|
|
|
246
|
+
voiceio targets **Linux**. That's what it's developed and tested against.
|
|
247
|
+
|
|
233
248
|
| Platform | Status | Text injection | Hotkeys | Streaming preview |
|
|
234
249
|
|----------|--------|---------------|---------|-------------------|
|
|
235
250
|
| Ubuntu / Debian (GNOME, Wayland) | **Tested daily** | IBus | evdev / GNOME shortcut | Yes |
|
|
@@ -237,11 +252,22 @@ voiceio logs # check debug output
|
|
|
237
252
|
| Fedora (GNOME) | Supported | IBus | evdev / GNOME shortcut | Yes |
|
|
238
253
|
| Arch Linux | Supported | IBus | evdev | Yes |
|
|
239
254
|
| 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
255
|
|
|
243
256
|
voiceio auto-detects your platform and picks the best available backends. Run `voiceio doctor` to see what's working on your system.
|
|
244
257
|
|
|
258
|
+
## Experimental platforms
|
|
259
|
+
|
|
260
|
+
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.
|
|
261
|
+
|
|
262
|
+
| Platform | Status | Text injection | Hotkeys | Streaming preview |
|
|
263
|
+
|----------|--------|---------------|---------|-------------------|
|
|
264
|
+
| Windows 10/11 | Experimental / untested | pynput / clipboard | pynput | Type-and-correct (no preedit) |
|
|
265
|
+
| macOS | Experimental / untested | pynput / clipboard | pynput | Type-and-correct (no preedit) |
|
|
266
|
+
|
|
267
|
+
- **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).
|
|
268
|
+
- **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.
|
|
269
|
+
- Config lives at `%LOCALAPPDATA%\voiceio\config\config.toml` (Windows) or `~/.config/voiceio/config.toml` (macOS).
|
|
270
|
+
|
|
245
271
|
## Uninstall
|
|
246
272
|
|
|
247
273
|
```bash
|
|
@@ -275,7 +301,7 @@ Contributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) and [open issues](
|
|
|
275
301
|
- [x] Voice commands — "new line", "new paragraph", "scratch that", punctuation by name
|
|
276
302
|
- [x] Custom vocabulary / personal dictionary (bias Whisper via `initial_prompt`)
|
|
277
303
|
- [x] Smart punctuation & capitalization post-processing
|
|
278
|
-
- [x] Windows support
|
|
304
|
+
- [x] Windows support (experimental, untested)
|
|
279
305
|
- [x] System tray icon with animated states
|
|
280
306
|
- [x] Auto-stop on silence
|
|
281
307
|
|
|
@@ -15,10 +15,18 @@
|
|
|
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
|
|
@@ -56,28 +64,9 @@ voiceio setup
|
|
|
56
64
|
</details>
|
|
57
65
|
|
|
58
66
|
<details>
|
|
59
|
-
<summary><strong>Windows</strong></summary>
|
|
60
|
-
|
|
61
|
-
```powershell
|
|
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
|
-
```
|
|
67
|
+
<summary><strong>Windows / macOS (experimental)</strong></summary>
|
|
70
68
|
|
|
71
|
-
|
|
72
|
-
</details>
|
|
73
|
-
|
|
74
|
-
<details>
|
|
75
|
-
<summary><strong>macOS</strong></summary>
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
pipx install python-voiceio
|
|
79
|
-
voiceio setup
|
|
80
|
-
```
|
|
69
|
+
See [Experimental platforms](#experimental-platforms) below — these builds are untested and unmaintained.
|
|
81
70
|
</details>
|
|
82
71
|
|
|
83
72
|
<details>
|
|
@@ -106,7 +95,35 @@ hotkey → mic capture → whisper (local) → text at cursor
|
|
|
106
95
|
pre-buffered streaming IBus / clipboard
|
|
107
96
|
```
|
|
108
97
|
|
|
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.
|
|
98
|
+
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`.
|
|
99
|
+
|
|
100
|
+
## How it learns
|
|
101
|
+
|
|
102
|
+
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.
|
|
103
|
+
|
|
104
|
+
```mermaid
|
|
105
|
+
flowchart LR
|
|
106
|
+
subgraph live ["every utterance"]
|
|
107
|
+
A["🎙️ dictate"] --> B["store audio + raw text\n+ confidence (local)"]
|
|
108
|
+
A --> C["hotwords + recent context\nbias the Whisper decoder"]
|
|
109
|
+
A --> D["optional LLM pass fixes\nmisheard proper nouns"]
|
|
110
|
+
end
|
|
111
|
+
subgraph weekly ["weekly, in the background"]
|
|
112
|
+
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"]
|
|
113
|
+
F -->|"bad rule"| G["auto-retired"]
|
|
114
|
+
F -->|"quality regressed"| H["whole week rolled back"]
|
|
115
|
+
end
|
|
116
|
+
B --> E
|
|
117
|
+
F -->|"confirmed"| C
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
1. **Capture** — every utterance stores its audio, raw text, and confidence in local files.
|
|
121
|
+
2. **Bias** — your vocabulary and recent context steer the Whisper decoder (hotwords / prompt) on every recording.
|
|
122
|
+
3. **Contextual fix** — an optional LLM pass repairs misheard proper nouns using surrounding context.
|
|
123
|
+
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.
|
|
124
|
+
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.
|
|
125
|
+
|
|
126
|
+
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
127
|
|
|
111
128
|
## Features
|
|
112
129
|
|
|
@@ -156,7 +173,7 @@ voiceio uninstall Remove all system integrations
|
|
|
156
173
|
`voiceio setup` handles everything interactively. To tweak later, edit the config file or override at runtime:
|
|
157
174
|
|
|
158
175
|
- Linux/macOS: `~/.config/voiceio/config.toml`
|
|
159
|
-
- Windows: `%LOCALAPPDATA%\voiceio\config\config.toml`
|
|
176
|
+
- Windows: `%LOCALAPPDATA%\voiceio\config\config.toml` (see [Experimental platforms](#experimental-platforms))
|
|
160
177
|
|
|
161
178
|
```bash
|
|
162
179
|
voiceio --model large-v3 --language auto -v
|
|
@@ -178,12 +195,12 @@ voiceio logs # check debug output
|
|
|
178
195
|
| Hotkey doesn't work on Wayland | `sudo usermod -aG input $USER` then log out and back in |
|
|
179
196
|
| Transcription too slow | Use a smaller model: `voiceio --model tiny` |
|
|
180
197
|
| 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 |
|
|
198
|
+
| Windows / macOS issues | These platforms are experimental and untested — see [Experimental platforms](#experimental-platforms) |
|
|
184
199
|
|
|
185
200
|
## Platform support
|
|
186
201
|
|
|
202
|
+
voiceio targets **Linux**. That's what it's developed and tested against.
|
|
203
|
+
|
|
187
204
|
| Platform | Status | Text injection | Hotkeys | Streaming preview |
|
|
188
205
|
|----------|--------|---------------|---------|-------------------|
|
|
189
206
|
| Ubuntu / Debian (GNOME, Wayland) | **Tested daily** | IBus | evdev / GNOME shortcut | Yes |
|
|
@@ -191,11 +208,22 @@ voiceio logs # check debug output
|
|
|
191
208
|
| Fedora (GNOME) | Supported | IBus | evdev / GNOME shortcut | Yes |
|
|
192
209
|
| Arch Linux | Supported | IBus | evdev | Yes |
|
|
193
210
|
| 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
211
|
|
|
197
212
|
voiceio auto-detects your platform and picks the best available backends. Run `voiceio doctor` to see what's working on your system.
|
|
198
213
|
|
|
214
|
+
## Experimental platforms
|
|
215
|
+
|
|
216
|
+
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.
|
|
217
|
+
|
|
218
|
+
| Platform | Status | Text injection | Hotkeys | Streaming preview |
|
|
219
|
+
|----------|--------|---------------|---------|-------------------|
|
|
220
|
+
| Windows 10/11 | Experimental / untested | pynput / clipboard | pynput | Type-and-correct (no preedit) |
|
|
221
|
+
| macOS | Experimental / untested | pynput / clipboard | pynput | Type-and-correct (no preedit) |
|
|
222
|
+
|
|
223
|
+
- **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).
|
|
224
|
+
- **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.
|
|
225
|
+
- Config lives at `%LOCALAPPDATA%\voiceio\config\config.toml` (Windows) or `~/.config/voiceio/config.toml` (macOS).
|
|
226
|
+
|
|
199
227
|
## Uninstall
|
|
200
228
|
|
|
201
229
|
```bash
|
|
@@ -229,7 +257,7 @@ Contributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) and [open issues](
|
|
|
229
257
|
- [x] Voice commands — "new line", "new paragraph", "scratch that", punctuation by name
|
|
230
258
|
- [x] Custom vocabulary / personal dictionary (bias Whisper via `initial_prompt`)
|
|
231
259
|
- [x] Smart punctuation & capitalization post-processing
|
|
232
|
-
- [x] Windows support
|
|
260
|
+
- [x] Windows support (experimental, untested)
|
|
233
261
|
- [x] System tray icon with animated states
|
|
234
262
|
- [x] Auto-stop on silence
|
|
235
263
|
|
|
@@ -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.0"
|
|
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
|
]
|
|
@@ -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.0
|
|
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
|
|
@@ -61,10 +59,18 @@ Dynamic: license-file
|
|
|
61
59
|
[](LICENSE)
|
|
62
60
|
[](https://pepy.tech/projects/python-voiceio)
|
|
63
61
|
|
|
64
|
-
|
|
62
|
+
Voice dictation for Linux. Local, yours, and it learns how you speak.
|
|
65
63
|
|
|
66
64
|
https://github.com/user-attachments/assets/9cf5d1ac-b4bb-4cf8-b775-7a66dc16b376
|
|
67
65
|
|
|
66
|
+
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.
|
|
67
|
+
|
|
68
|
+
- **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.
|
|
69
|
+
- **Improves with use — automatically** — every utterance teaches it your words and names. See [How it learns](#how-it-learns).
|
|
70
|
+
- **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).
|
|
71
|
+
|
|
72
|
+
> **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).
|
|
73
|
+
|
|
68
74
|
## Quick start
|
|
69
75
|
|
|
70
76
|
```bash
|
|
@@ -102,28 +108,9 @@ voiceio setup
|
|
|
102
108
|
</details>
|
|
103
109
|
|
|
104
110
|
<details>
|
|
105
|
-
<summary><strong>Windows</strong></summary>
|
|
106
|
-
|
|
107
|
-
```powershell
|
|
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
|
-
```
|
|
111
|
+
<summary><strong>Windows / macOS (experimental)</strong></summary>
|
|
116
112
|
|
|
117
|
-
|
|
118
|
-
</details>
|
|
119
|
-
|
|
120
|
-
<details>
|
|
121
|
-
<summary><strong>macOS</strong></summary>
|
|
122
|
-
|
|
123
|
-
```bash
|
|
124
|
-
pipx install python-voiceio
|
|
125
|
-
voiceio setup
|
|
126
|
-
```
|
|
113
|
+
See [Experimental platforms](#experimental-platforms) below — these builds are untested and unmaintained.
|
|
127
114
|
</details>
|
|
128
115
|
|
|
129
116
|
<details>
|
|
@@ -152,7 +139,35 @@ hotkey → mic capture → whisper (local) → text at cursor
|
|
|
152
139
|
pre-buffered streaming IBus / clipboard
|
|
153
140
|
```
|
|
154
141
|
|
|
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.
|
|
142
|
+
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`.
|
|
143
|
+
|
|
144
|
+
## How it learns
|
|
145
|
+
|
|
146
|
+
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.
|
|
147
|
+
|
|
148
|
+
```mermaid
|
|
149
|
+
flowchart LR
|
|
150
|
+
subgraph live ["every utterance"]
|
|
151
|
+
A["🎙️ dictate"] --> B["store audio + raw text\n+ confidence (local)"]
|
|
152
|
+
A --> C["hotwords + recent context\nbias the Whisper decoder"]
|
|
153
|
+
A --> D["optional LLM pass fixes\nmisheard proper nouns"]
|
|
154
|
+
end
|
|
155
|
+
subgraph weekly ["weekly, in the background"]
|
|
156
|
+
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"]
|
|
157
|
+
F -->|"bad rule"| G["auto-retired"]
|
|
158
|
+
F -->|"quality regressed"| H["whole week rolled back"]
|
|
159
|
+
end
|
|
160
|
+
B --> E
|
|
161
|
+
F -->|"confirmed"| C
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
1. **Capture** — every utterance stores its audio, raw text, and confidence in local files.
|
|
165
|
+
2. **Bias** — your vocabulary and recent context steer the Whisper decoder (hotwords / prompt) on every recording.
|
|
166
|
+
3. **Contextual fix** — an optional LLM pass repairs misheard proper nouns using surrounding context.
|
|
167
|
+
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.
|
|
168
|
+
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.
|
|
169
|
+
|
|
170
|
+
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
171
|
|
|
157
172
|
## Features
|
|
158
173
|
|
|
@@ -202,7 +217,7 @@ voiceio uninstall Remove all system integrations
|
|
|
202
217
|
`voiceio setup` handles everything interactively. To tweak later, edit the config file or override at runtime:
|
|
203
218
|
|
|
204
219
|
- Linux/macOS: `~/.config/voiceio/config.toml`
|
|
205
|
-
- Windows: `%LOCALAPPDATA%\voiceio\config\config.toml`
|
|
220
|
+
- Windows: `%LOCALAPPDATA%\voiceio\config\config.toml` (see [Experimental platforms](#experimental-platforms))
|
|
206
221
|
|
|
207
222
|
```bash
|
|
208
223
|
voiceio --model large-v3 --language auto -v
|
|
@@ -224,12 +239,12 @@ voiceio logs # check debug output
|
|
|
224
239
|
| Hotkey doesn't work on Wayland | `sudo usermod -aG input $USER` then log out and back in |
|
|
225
240
|
| Transcription too slow | Use a smaller model: `voiceio --model tiny` |
|
|
226
241
|
| 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 |
|
|
242
|
+
| Windows / macOS issues | These platforms are experimental and untested — see [Experimental platforms](#experimental-platforms) |
|
|
230
243
|
|
|
231
244
|
## Platform support
|
|
232
245
|
|
|
246
|
+
voiceio targets **Linux**. That's what it's developed and tested against.
|
|
247
|
+
|
|
233
248
|
| Platform | Status | Text injection | Hotkeys | Streaming preview |
|
|
234
249
|
|----------|--------|---------------|---------|-------------------|
|
|
235
250
|
| Ubuntu / Debian (GNOME, Wayland) | **Tested daily** | IBus | evdev / GNOME shortcut | Yes |
|
|
@@ -237,11 +252,22 @@ voiceio logs # check debug output
|
|
|
237
252
|
| Fedora (GNOME) | Supported | IBus | evdev / GNOME shortcut | Yes |
|
|
238
253
|
| Arch Linux | Supported | IBus | evdev | Yes |
|
|
239
254
|
| 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
255
|
|
|
243
256
|
voiceio auto-detects your platform and picks the best available backends. Run `voiceio doctor` to see what's working on your system.
|
|
244
257
|
|
|
258
|
+
## Experimental platforms
|
|
259
|
+
|
|
260
|
+
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.
|
|
261
|
+
|
|
262
|
+
| Platform | Status | Text injection | Hotkeys | Streaming preview |
|
|
263
|
+
|----------|--------|---------------|---------|-------------------|
|
|
264
|
+
| Windows 10/11 | Experimental / untested | pynput / clipboard | pynput | Type-and-correct (no preedit) |
|
|
265
|
+
| macOS | Experimental / untested | pynput / clipboard | pynput | Type-and-correct (no preedit) |
|
|
266
|
+
|
|
267
|
+
- **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).
|
|
268
|
+
- **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.
|
|
269
|
+
- Config lives at `%LOCALAPPDATA%\voiceio\config\config.toml` (Windows) or `~/.config/voiceio/config.toml` (macOS).
|
|
270
|
+
|
|
245
271
|
## Uninstall
|
|
246
272
|
|
|
247
273
|
```bash
|
|
@@ -275,7 +301,7 @@ Contributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) and [open issues](
|
|
|
275
301
|
- [x] Voice commands — "new line", "new paragraph", "scratch that", punctuation by name
|
|
276
302
|
- [x] Custom vocabulary / personal dictionary (bias Whisper via `initial_prompt`)
|
|
277
303
|
- [x] Smart punctuation & capitalization post-processing
|
|
278
|
-
- [x] Windows support
|
|
304
|
+
- [x] Windows support (experimental, untested)
|
|
279
305
|
- [x] System tray icon with animated states
|
|
280
306
|
- [x] Auto-stop on silence
|
|
281
307
|
|
|
@@ -7,13 +7,18 @@ python_voiceio.egg-info/dependency_links.txt
|
|
|
7
7
|
python_voiceio.egg-info/entry_points.txt
|
|
8
8
|
python_voiceio.egg-info/requires.txt
|
|
9
9
|
python_voiceio.egg-info/top_level.txt
|
|
10
|
+
tests/test_adjudicate.py
|
|
10
11
|
tests/test_app_wiring.py
|
|
12
|
+
tests/test_audio_quality.py
|
|
13
|
+
tests/test_audit.py
|
|
11
14
|
tests/test_autocorrect.py
|
|
15
|
+
tests/test_autocorrect_state.py
|
|
12
16
|
tests/test_backend_probes.py
|
|
13
17
|
tests/test_cli.py
|
|
14
18
|
tests/test_clipboard_read.py
|
|
15
19
|
tests/test_commands.py
|
|
16
20
|
tests/test_config.py
|
|
21
|
+
tests/test_correct_batch.py
|
|
17
22
|
tests/test_corrections.py
|
|
18
23
|
tests/test_fallback.py
|
|
19
24
|
tests/test_health.py
|
|
@@ -24,11 +29,14 @@ tests/test_llm.py
|
|
|
24
29
|
tests/test_llm_api.py
|
|
25
30
|
tests/test_numbers.py
|
|
26
31
|
tests/test_platform.py
|
|
32
|
+
tests/test_postcorrect.py
|
|
27
33
|
tests/test_postprocess.py
|
|
28
34
|
tests/test_prebuffer.py
|
|
29
35
|
tests/test_prompt.py
|
|
30
36
|
tests/test_recorder_integration.py
|
|
37
|
+
tests/test_retention.py
|
|
31
38
|
tests/test_robustness.py
|
|
39
|
+
tests/test_snapshots.py
|
|
32
40
|
tests/test_streaming.py
|
|
33
41
|
tests/test_transcriber.py
|
|
34
42
|
tests/test_tts.py
|
|
@@ -38,7 +46,9 @@ tests/test_wordfreq.py
|
|
|
38
46
|
voiceio/__init__.py
|
|
39
47
|
voiceio/__main__.py
|
|
40
48
|
voiceio/app.py
|
|
49
|
+
voiceio/audit.py
|
|
41
50
|
voiceio/autocorrect.py
|
|
51
|
+
voiceio/autocorrect_state.py
|
|
42
52
|
voiceio/backends.py
|
|
43
53
|
voiceio/cli.py
|
|
44
54
|
voiceio/clipboard_read.py
|
|
@@ -55,10 +65,13 @@ voiceio/llm_api.py
|
|
|
55
65
|
voiceio/numbers.py
|
|
56
66
|
voiceio/pidlock.py
|
|
57
67
|
voiceio/platform.py
|
|
68
|
+
voiceio/postcorrect.py
|
|
58
69
|
voiceio/postprocess.py
|
|
59
70
|
voiceio/prompt.py
|
|
60
71
|
voiceio/recorder.py
|
|
72
|
+
voiceio/retention.py
|
|
61
73
|
voiceio/service.py
|
|
74
|
+
voiceio/snapshots.py
|
|
62
75
|
voiceio/streaming.py
|
|
63
76
|
voiceio/transcriber.py
|
|
64
77
|
voiceio/vad.py
|