python-voiceio 0.2.3__tar.gz → 0.2.4__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.
Files changed (60) hide show
  1. {python_voiceio-0.2.3/python_voiceio.egg-info → python_voiceio-0.2.4}/PKG-INFO +10 -29
  2. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/README.md +7 -28
  3. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/pyproject.toml +3 -1
  4. {python_voiceio-0.2.3 → python_voiceio-0.2.4/python_voiceio.egg-info}/PKG-INFO +10 -29
  5. python_voiceio-0.2.4/voiceio/__init__.py +1 -0
  6. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/app.py +0 -1
  7. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/cli.py +36 -0
  8. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/wizard.py +1 -1
  9. python_voiceio-0.2.3/voiceio/__init__.py +0 -1
  10. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/LICENSE +0 -0
  11. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/python_voiceio.egg-info/SOURCES.txt +0 -0
  12. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/python_voiceio.egg-info/dependency_links.txt +0 -0
  13. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/python_voiceio.egg-info/entry_points.txt +0 -0
  14. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/python_voiceio.egg-info/requires.txt +0 -0
  15. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/python_voiceio.egg-info/top_level.txt +0 -0
  16. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/setup.cfg +0 -0
  17. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/tests/test_app_wiring.py +0 -0
  18. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/tests/test_backend_probes.py +0 -0
  19. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/tests/test_config.py +0 -0
  20. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/tests/test_fallback.py +0 -0
  21. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/tests/test_health.py +0 -0
  22. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/tests/test_ibus_typer.py +0 -0
  23. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/tests/test_platform.py +0 -0
  24. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/tests/test_prebuffer.py +0 -0
  25. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/tests/test_recorder_integration.py +0 -0
  26. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/tests/test_streaming.py +0 -0
  27. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/tests/test_transcriber.py +0 -0
  28. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/__main__.py +0 -0
  29. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/backends.py +0 -0
  30. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/config.py +0 -0
  31. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/feedback.py +0 -0
  32. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/health.py +0 -0
  33. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/hotkeys/__init__.py +0 -0
  34. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/hotkeys/base.py +0 -0
  35. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/hotkeys/chain.py +0 -0
  36. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/hotkeys/evdev.py +0 -0
  37. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/hotkeys/pynput_backend.py +0 -0
  38. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/hotkeys/socket_backend.py +0 -0
  39. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/ibus/__init__.py +0 -0
  40. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/ibus/engine.py +0 -0
  41. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/platform.py +0 -0
  42. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/recorder.py +0 -0
  43. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/service.py +0 -0
  44. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/sounds/__init__.py +0 -0
  45. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/sounds/commit.wav +0 -0
  46. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/sounds/start.wav +0 -0
  47. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/sounds/stop.wav +0 -0
  48. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/streaming.py +0 -0
  49. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/transcriber.py +0 -0
  50. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/tray.py +0 -0
  51. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/typers/__init__.py +0 -0
  52. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/typers/base.py +0 -0
  53. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/typers/chain.py +0 -0
  54. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/typers/clipboard.py +0 -0
  55. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/typers/ibus.py +0 -0
  56. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/typers/pynput_type.py +0 -0
  57. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/typers/wtype.py +0 -0
  58. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/typers/xdotool.py +0 -0
  59. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/typers/ydotool.py +0 -0
  60. {python_voiceio-0.2.3 → python_voiceio-0.2.4}/voiceio/worker.py +0 -0
@@ -1,11 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-voiceio
3
- Version: 0.2.3
3
+ Version: 0.2.4
4
4
  Summary: 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
+ Project-URL: Repository, https://github.com/Hugo0/voiceio
8
9
  Project-URL: Issues, https://github.com/Hugo0/voiceio/issues
10
+ Project-URL: Changelog, https://github.com/Hugo0/voiceio/releases
9
11
  Keywords: voice,speech-to-text,whisper,linux,dictation,wayland,ibus
10
12
  Classifier: Development Status :: 4 - Beta
11
13
  Classifier: Environment :: X11 Applications
@@ -41,15 +43,6 @@ Dynamic: license-file
41
43
 
42
44
  Speak → text, locally, instantly.
43
45
 
44
- <!-- demo video -->
45
- <p align="center">
46
- <a href="https://www.tella.tv/video/YOUR_VIDEO_ID">
47
- <img src="https://github.com/Hugo0/voiceio/raw/main/assets/demo-thumbnail.png" alt="voiceio demo" width="600">
48
- </a>
49
- <br>
50
- <em>Click to watch the demo</em>
51
- </p>
52
-
53
46
  ## Quick start
54
47
 
55
48
  ```bash
@@ -98,7 +91,7 @@ voiceio setup
98
91
  ```
99
92
  </details>
100
93
 
101
- > You can also install with `uv tool install voiceio` or `pip install voiceio`.
94
+ > You can also install with `uv tool install python-voiceio` or `pip install python-voiceio`.
102
95
 
103
96
  ## How it works
104
97
 
@@ -143,6 +136,7 @@ voiceio setup Interactive setup wizard
143
136
  voiceio doctor Health check (--fix to auto-repair)
144
137
  voiceio test Test microphone + live transcription
145
138
  voiceio toggle Toggle recording on a running daemon
139
+ voiceio update Update to latest version
146
140
  voiceio service install Autostart on login via systemd
147
141
  voiceio logs View recent logs
148
142
  voiceio uninstall Remove all system integrations
@@ -194,28 +188,15 @@ voiceio uninstall # removes service, IBus, shortcuts, symlinks
194
188
  pipx uninstall python-voiceio # removes the package
195
189
  ```
196
190
 
197
- ## TODO
198
-
199
- **Launch**
200
- - [ ] Publish to PyPI
201
- - [ ] Record demo video + thumbnail
202
- - [ ] Test clean install on a fresh VM/container
203
- - [ ] GitHub repo: description, topics, social preview image
204
- - [ ] Bump version to 0.2.0
205
-
206
- **Code quality**
207
- - [ ] IBus activation on non-GNOME desktops (KDE, Sway, Hyprland), currently GNOME-only via gsettings
208
- - [ ] `voiceio doctor --json` for machine-readable output
209
- - [ ] Shell completions (`voiceio completion bash/zsh/fish`)
210
- - [ ] Refactor wizard.py (882 lines) into smaller, testable modules
211
- - [ ] Socket protocol versioning (e.g. `v1:preedit:text`)
212
- - [ ] Configurable log file path
213
-
214
191
  ## Wishlist
215
192
 
216
- Contributions welcome! Open an issue to discuss before starting.
193
+ Contributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md). Open an issue to discuss before starting.
217
194
 
218
195
  **High impact**
196
+ - [ ] **macOS support**: test and polish pynput hotkey + typer backends
197
+ - [ ] **Silence filtering**: VAD-based trimming to prevent Whisper hallucinations on silence
198
+ - [ ] **distil-whisper models**: better speed/accuracy tradeoffs
199
+ - [ ] **IBus on non-GNOME desktops**: KDE, Sway, Hyprland activation (currently GNOME-only via gsettings)
219
200
  - [ ] **Text-to-speech (voice output)**: select text, press a hotkey, hear it spoken aloud. Completes the "io" in voiceio. Use a local TTS engine (Piper, Coqui, espeak-ng), same philosophy: no cloud, no API keys
220
201
  - [ ] **Wake word**: "Hey voiceio" hands-free activation (no hotkey needed). Use a small always-on keyword model (e.g. openWakeWord, Porcupine)
221
202
  - [ ] **Custom vocabulary / hot words**: user-defined word list for names, jargon, technical terms that Whisper gets wrong. Boost via `initial_prompt` or fine-tuned logit bias
@@ -7,15 +7,6 @@
7
7
 
8
8
  Speak → text, locally, instantly.
9
9
 
10
- <!-- demo video -->
11
- <p align="center">
12
- <a href="https://www.tella.tv/video/YOUR_VIDEO_ID">
13
- <img src="https://github.com/Hugo0/voiceio/raw/main/assets/demo-thumbnail.png" alt="voiceio demo" width="600">
14
- </a>
15
- <br>
16
- <em>Click to watch the demo</em>
17
- </p>
18
-
19
10
  ## Quick start
20
11
 
21
12
  ```bash
@@ -64,7 +55,7 @@ voiceio setup
64
55
  ```
65
56
  </details>
66
57
 
67
- > You can also install with `uv tool install voiceio` or `pip install voiceio`.
58
+ > You can also install with `uv tool install python-voiceio` or `pip install python-voiceio`.
68
59
 
69
60
  ## How it works
70
61
 
@@ -109,6 +100,7 @@ voiceio setup Interactive setup wizard
109
100
  voiceio doctor Health check (--fix to auto-repair)
110
101
  voiceio test Test microphone + live transcription
111
102
  voiceio toggle Toggle recording on a running daemon
103
+ voiceio update Update to latest version
112
104
  voiceio service install Autostart on login via systemd
113
105
  voiceio logs View recent logs
114
106
  voiceio uninstall Remove all system integrations
@@ -160,28 +152,15 @@ voiceio uninstall # removes service, IBus, shortcuts, symlinks
160
152
  pipx uninstall python-voiceio # removes the package
161
153
  ```
162
154
 
163
- ## TODO
164
-
165
- **Launch**
166
- - [ ] Publish to PyPI
167
- - [ ] Record demo video + thumbnail
168
- - [ ] Test clean install on a fresh VM/container
169
- - [ ] GitHub repo: description, topics, social preview image
170
- - [ ] Bump version to 0.2.0
171
-
172
- **Code quality**
173
- - [ ] IBus activation on non-GNOME desktops (KDE, Sway, Hyprland), currently GNOME-only via gsettings
174
- - [ ] `voiceio doctor --json` for machine-readable output
175
- - [ ] Shell completions (`voiceio completion bash/zsh/fish`)
176
- - [ ] Refactor wizard.py (882 lines) into smaller, testable modules
177
- - [ ] Socket protocol versioning (e.g. `v1:preedit:text`)
178
- - [ ] Configurable log file path
179
-
180
155
  ## Wishlist
181
156
 
182
- Contributions welcome! Open an issue to discuss before starting.
157
+ Contributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md). Open an issue to discuss before starting.
183
158
 
184
159
  **High impact**
160
+ - [ ] **macOS support**: test and polish pynput hotkey + typer backends
161
+ - [ ] **Silence filtering**: VAD-based trimming to prevent Whisper hallucinations on silence
162
+ - [ ] **distil-whisper models**: better speed/accuracy tradeoffs
163
+ - [ ] **IBus on non-GNOME desktops**: KDE, Sway, Hyprland activation (currently GNOME-only via gsettings)
185
164
  - [ ] **Text-to-speech (voice output)**: select text, press a hotkey, hear it spoken aloud. Completes the "io" in voiceio. Use a local TTS engine (Piper, Coqui, espeak-ng), same philosophy: no cloud, no API keys
186
165
  - [ ] **Wake word**: "Hey voiceio" hands-free activation (no hotkey needed). Use a small always-on keyword model (e.g. openWakeWord, Porcupine)
187
166
  - [ ] **Custom vocabulary / hot words**: user-defined word list for names, jargon, technical terms that Whisper gets wrong. Boost via `initial_prompt` or fine-tuned logit bias
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "python-voiceio"
7
- version = "0.2.3"
7
+ version = "0.2.4"
8
8
  description = "Speak → text, locally, instantly."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -34,7 +34,9 @@ dev = ["pytest>=7.0", "pytest-mock"]
34
34
 
35
35
  [project.urls]
36
36
  Homepage = "https://github.com/Hugo0/voiceio"
37
+ Repository = "https://github.com/Hugo0/voiceio"
37
38
  Issues = "https://github.com/Hugo0/voiceio/issues"
39
+ Changelog = "https://github.com/Hugo0/voiceio/releases"
38
40
 
39
41
  [project.scripts]
40
42
  voiceio = "voiceio.cli:main"
@@ -1,11 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-voiceio
3
- Version: 0.2.3
3
+ Version: 0.2.4
4
4
  Summary: 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
+ Project-URL: Repository, https://github.com/Hugo0/voiceio
8
9
  Project-URL: Issues, https://github.com/Hugo0/voiceio/issues
10
+ Project-URL: Changelog, https://github.com/Hugo0/voiceio/releases
9
11
  Keywords: voice,speech-to-text,whisper,linux,dictation,wayland,ibus
10
12
  Classifier: Development Status :: 4 - Beta
11
13
  Classifier: Environment :: X11 Applications
@@ -41,15 +43,6 @@ Dynamic: license-file
41
43
 
42
44
  Speak → text, locally, instantly.
43
45
 
44
- <!-- demo video -->
45
- <p align="center">
46
- <a href="https://www.tella.tv/video/YOUR_VIDEO_ID">
47
- <img src="https://github.com/Hugo0/voiceio/raw/main/assets/demo-thumbnail.png" alt="voiceio demo" width="600">
48
- </a>
49
- <br>
50
- <em>Click to watch the demo</em>
51
- </p>
52
-
53
46
  ## Quick start
54
47
 
55
48
  ```bash
@@ -98,7 +91,7 @@ voiceio setup
98
91
  ```
99
92
  </details>
100
93
 
101
- > You can also install with `uv tool install voiceio` or `pip install voiceio`.
94
+ > You can also install with `uv tool install python-voiceio` or `pip install python-voiceio`.
102
95
 
103
96
  ## How it works
104
97
 
@@ -143,6 +136,7 @@ voiceio setup Interactive setup wizard
143
136
  voiceio doctor Health check (--fix to auto-repair)
144
137
  voiceio test Test microphone + live transcription
145
138
  voiceio toggle Toggle recording on a running daemon
139
+ voiceio update Update to latest version
146
140
  voiceio service install Autostart on login via systemd
147
141
  voiceio logs View recent logs
148
142
  voiceio uninstall Remove all system integrations
@@ -194,28 +188,15 @@ voiceio uninstall # removes service, IBus, shortcuts, symlinks
194
188
  pipx uninstall python-voiceio # removes the package
195
189
  ```
196
190
 
197
- ## TODO
198
-
199
- **Launch**
200
- - [ ] Publish to PyPI
201
- - [ ] Record demo video + thumbnail
202
- - [ ] Test clean install on a fresh VM/container
203
- - [ ] GitHub repo: description, topics, social preview image
204
- - [ ] Bump version to 0.2.0
205
-
206
- **Code quality**
207
- - [ ] IBus activation on non-GNOME desktops (KDE, Sway, Hyprland), currently GNOME-only via gsettings
208
- - [ ] `voiceio doctor --json` for machine-readable output
209
- - [ ] Shell completions (`voiceio completion bash/zsh/fish`)
210
- - [ ] Refactor wizard.py (882 lines) into smaller, testable modules
211
- - [ ] Socket protocol versioning (e.g. `v1:preedit:text`)
212
- - [ ] Configurable log file path
213
-
214
191
  ## Wishlist
215
192
 
216
- Contributions welcome! Open an issue to discuss before starting.
193
+ Contributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md). Open an issue to discuss before starting.
217
194
 
218
195
  **High impact**
196
+ - [ ] **macOS support**: test and polish pynput hotkey + typer backends
197
+ - [ ] **Silence filtering**: VAD-based trimming to prevent Whisper hallucinations on silence
198
+ - [ ] **distil-whisper models**: better speed/accuracy tradeoffs
199
+ - [ ] **IBus on non-GNOME desktops**: KDE, Sway, Hyprland activation (currently GNOME-only via gsettings)
219
200
  - [ ] **Text-to-speech (voice output)**: select text, press a hotkey, hear it spoken aloud. Completes the "io" in voiceio. Use a local TTS engine (Piper, Coqui, espeak-ng), same philosophy: no cloud, no API keys
220
201
  - [ ] **Wake word**: "Hey voiceio" hands-free activation (no hotkey needed). Use a small always-on keyword model (e.g. openWakeWord, Porcupine)
221
202
  - [ ] **Custom vocabulary / hot words**: user-defined word list for names, jargon, technical terms that Whisper gets wrong. Boost via `initial_prompt` or fine-tuned logit bias
@@ -0,0 +1 @@
1
+ __version__ = "0.2.4"
@@ -18,7 +18,6 @@ from voiceio.recorder import AudioRecorder
18
18
  from voiceio.streaming import StreamingSession
19
19
  from voiceio.transcriber import Transcriber
20
20
  from voiceio.typers import chain as typer_chain
21
- from voiceio.typers.base import StreamingTyper
22
21
  log = logging.getLogger("voiceio")
23
22
 
24
23
 
@@ -59,6 +59,9 @@ def main() -> None:
59
59
  choices=["install", "uninstall", "start", "stop", "status"],
60
60
  help="Action to perform (default: status)")
61
61
 
62
+ # ── voiceio update ──────────────────────────────────────────────────
63
+ sub.add_parser("update", help="Update voiceio to the latest version")
64
+
62
65
  # ── voiceio uninstall ──────────────────────────────────────────────
63
66
  sub.add_parser("uninstall", help="Remove all voiceio system integrations")
64
67
 
@@ -77,6 +80,8 @@ def main() -> None:
77
80
  _cmd_test()
78
81
  elif args.command == "service":
79
82
  _cmd_service(args)
83
+ elif args.command == "update":
84
+ _cmd_update()
80
85
  elif args.command == "uninstall":
81
86
  _cmd_uninstall()
82
87
  elif args.command == "logs":
@@ -283,6 +288,37 @@ def _cmd_service(args: argparse.Namespace) -> None:
283
288
  sys.exit(1)
284
289
 
285
290
 
291
+ def _cmd_update() -> None:
292
+ """Update voiceio to the latest PyPI version."""
293
+ import subprocess
294
+ from voiceio import __version__
295
+ from voiceio.config import PYPI_NAME
296
+
297
+ is_pipx = "pipx" in sys.prefix
298
+ if is_pipx:
299
+ print(f"Current version: {__version__}")
300
+ print("Checking for updates...")
301
+ try:
302
+ result = subprocess.run(
303
+ ["pipx", "upgrade", PYPI_NAME],
304
+ capture_output=True, text=True, timeout=60,
305
+ )
306
+ print(result.stdout.strip())
307
+ if result.returncode != 0 and result.stderr.strip():
308
+ print(result.stderr.strip(), file=sys.stderr)
309
+ sys.exit(1)
310
+ except FileNotFoundError:
311
+ print("pipx not found. Update manually: pipx upgrade " + PYPI_NAME, file=sys.stderr)
312
+ sys.exit(1)
313
+ except subprocess.TimeoutExpired:
314
+ print("Update timed out.", file=sys.stderr)
315
+ sys.exit(1)
316
+ else:
317
+ print("Not a pipx install. Update manually:")
318
+ print(f" pip install --upgrade {PYPI_NAME}")
319
+ sys.exit(1)
320
+
321
+
286
322
  def _cmd_uninstall() -> None:
287
323
  """Remove all voiceio system integrations."""
288
324
  import os
@@ -860,7 +860,7 @@ def run_wizard() -> None:
860
860
  from voiceio.config import LOG_PATH
861
861
  log_path = LOG_PATH
862
862
  start_hint = (
863
- f" voiceio is running and will start automatically on login."
863
+ " voiceio is running and will start automatically on login."
864
864
  if autostart_idx == 0
865
865
  else f" Start voiceio:\n {CYAN}voiceio{RESET}"
866
866
  )
@@ -1 +0,0 @@
1
- __version__ = "0.2.3"
File without changes
File without changes