voxtype 0.1.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.
- voxtype-0.1.0/.gitignore +195 -0
- voxtype-0.1.0/LICENSE +21 -0
- voxtype-0.1.0/PKG-INFO +156 -0
- voxtype-0.1.0/README.md +107 -0
- voxtype-0.1.0/pyproject.toml +64 -0
- voxtype-0.1.0/src/voxtype/__init__.py +7 -0
- voxtype-0.1.0/src/voxtype/app.py +683 -0
- voxtype-0.1.0/src/voxtype/cli.py +280 -0
- voxtype-0.1.0/src/voxtype/config.py +445 -0
- voxtype-0.1.0/src/voxtype/engine_parakeet.py +1161 -0
- voxtype-0.1.0/src/voxtype/engine_parakeet_mlx.py +227 -0
- voxtype-0.1.0/src/voxtype/engines.py +183 -0
- voxtype-0.1.0/src/voxtype/hotkey.py +481 -0
- voxtype-0.1.0/src/voxtype/inject.py +167 -0
- voxtype-0.1.0/src/voxtype/logic.py +119 -0
- voxtype-0.1.0/src/voxtype/overlay.py +428 -0
- voxtype-0.1.0/src/voxtype/setup_wizard.py +360 -0
- voxtype-0.1.0/tests/test_voxtype.py +2039 -0
- voxtype-0.1.0/tests/test_voxtype_engines.py +1222 -0
voxtype-0.1.0/.gitignore
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
share/python-wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
MANIFEST
|
|
28
|
+
|
|
29
|
+
# PyInstaller
|
|
30
|
+
*.manifest
|
|
31
|
+
*.spec
|
|
32
|
+
|
|
33
|
+
# Installer logs
|
|
34
|
+
pip-log.txt
|
|
35
|
+
pip-delete-this-directory.txt
|
|
36
|
+
|
|
37
|
+
# Unit test / coverage reports
|
|
38
|
+
htmlcov/
|
|
39
|
+
.tox/
|
|
40
|
+
.nox/
|
|
41
|
+
.coverage
|
|
42
|
+
.coverage.*
|
|
43
|
+
.cache
|
|
44
|
+
nosetests.xml
|
|
45
|
+
coverage.xml
|
|
46
|
+
*.cover
|
|
47
|
+
*.py,cover
|
|
48
|
+
.hypothesis/
|
|
49
|
+
.pytest_cache/
|
|
50
|
+
cover/
|
|
51
|
+
|
|
52
|
+
# Translations
|
|
53
|
+
*.mo
|
|
54
|
+
*.pot
|
|
55
|
+
|
|
56
|
+
# Django stuff:
|
|
57
|
+
*.log
|
|
58
|
+
local_settings.py
|
|
59
|
+
db.sqlite3
|
|
60
|
+
db.sqlite3-journal
|
|
61
|
+
|
|
62
|
+
# Flask stuff:
|
|
63
|
+
instance/
|
|
64
|
+
.webassets-cache
|
|
65
|
+
|
|
66
|
+
# Scrapy stuff:
|
|
67
|
+
.scrapy
|
|
68
|
+
|
|
69
|
+
# Sphinx documentation
|
|
70
|
+
docs/_build/
|
|
71
|
+
|
|
72
|
+
# PyBuilder
|
|
73
|
+
.pybuilder/
|
|
74
|
+
target/
|
|
75
|
+
|
|
76
|
+
# Jupyter Notebook
|
|
77
|
+
.ipynb_checkpoints
|
|
78
|
+
|
|
79
|
+
# IPython
|
|
80
|
+
profile_default/
|
|
81
|
+
ipython_config.py
|
|
82
|
+
|
|
83
|
+
# pyenv
|
|
84
|
+
.python-version
|
|
85
|
+
|
|
86
|
+
# pipenv
|
|
87
|
+
Pipfile.lock
|
|
88
|
+
|
|
89
|
+
# poetry
|
|
90
|
+
poetry.lock
|
|
91
|
+
|
|
92
|
+
# pdm
|
|
93
|
+
.pdm.toml
|
|
94
|
+
.pdm-python
|
|
95
|
+
|
|
96
|
+
# PEP 582
|
|
97
|
+
__pypackages__/
|
|
98
|
+
|
|
99
|
+
# Celery stuff
|
|
100
|
+
celerybeat-schedule
|
|
101
|
+
celerybeat.pid
|
|
102
|
+
|
|
103
|
+
# SageMath parsed files
|
|
104
|
+
*.sage.py
|
|
105
|
+
|
|
106
|
+
# Environments
|
|
107
|
+
.env
|
|
108
|
+
.venv
|
|
109
|
+
env/
|
|
110
|
+
venv/
|
|
111
|
+
ENV/
|
|
112
|
+
env.bak/
|
|
113
|
+
venv.bak/
|
|
114
|
+
|
|
115
|
+
# Spyder project settings
|
|
116
|
+
.spyderproject
|
|
117
|
+
.spyproject
|
|
118
|
+
|
|
119
|
+
# Rope project settings
|
|
120
|
+
.ropeproject
|
|
121
|
+
|
|
122
|
+
# mkdocs documentation
|
|
123
|
+
/site
|
|
124
|
+
|
|
125
|
+
# mypy
|
|
126
|
+
.mypy_cache/
|
|
127
|
+
.dmypy.json
|
|
128
|
+
dmypy.json
|
|
129
|
+
|
|
130
|
+
# Pyre type checker
|
|
131
|
+
.pyre/
|
|
132
|
+
|
|
133
|
+
# pytype static type analyzer
|
|
134
|
+
.pytype/
|
|
135
|
+
|
|
136
|
+
# Cython debug symbols
|
|
137
|
+
cython_debug/
|
|
138
|
+
|
|
139
|
+
# PyCharm
|
|
140
|
+
.idea/
|
|
141
|
+
|
|
142
|
+
# VS Code
|
|
143
|
+
.vscode/
|
|
144
|
+
|
|
145
|
+
# macOS
|
|
146
|
+
.DS_Store
|
|
147
|
+
|
|
148
|
+
# Windows
|
|
149
|
+
Thumbs.db
|
|
150
|
+
ehthumbs.db
|
|
151
|
+
|
|
152
|
+
# Linux
|
|
153
|
+
*~
|
|
154
|
+
|
|
155
|
+
# Temporary files
|
|
156
|
+
*.tmp
|
|
157
|
+
*.bak
|
|
158
|
+
*.swp
|
|
159
|
+
*.swo
|
|
160
|
+
|
|
161
|
+
# UV
|
|
162
|
+
.uv/
|
|
163
|
+
|
|
164
|
+
# Ruff
|
|
165
|
+
.ruff_cache/
|
|
166
|
+
|
|
167
|
+
# Local development
|
|
168
|
+
local/
|
|
169
|
+
scratch/
|
|
170
|
+
|
|
171
|
+
# Claude Code settings and environment files
|
|
172
|
+
settings.json
|
|
173
|
+
hook-settings.json
|
|
174
|
+
hooks/settings.json
|
|
175
|
+
.env*
|
|
176
|
+
node_modules/
|
|
177
|
+
package-lock.json
|
|
178
|
+
!node_ui/package-lock.json
|
|
179
|
+
!docs-site/package-lock.json
|
|
180
|
+
!plugins/dynamic-workflow/package-lock.json
|
|
181
|
+
|
|
182
|
+
# Backup files
|
|
183
|
+
*.backup*
|
|
184
|
+
to-be-deleted.md
|
|
185
|
+
reference/
|
|
186
|
+
|
|
187
|
+
# Ignore config.json files at any level
|
|
188
|
+
**/config.json
|
|
189
|
+
*.flag
|
|
190
|
+
|
|
191
|
+
# Local files
|
|
192
|
+
issues/
|
|
193
|
+
WORKLOG/
|
|
194
|
+
|
|
195
|
+
jsonl-structure-summary.md
|
voxtype-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Prasad Chalasani
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
voxtype-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: voxtype
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Local, streaming speech-to-text that types wherever your cursor is (macOS)
|
|
5
|
+
Project-URL: Homepage, https://github.com/pchalasani/claude-code-tools
|
|
6
|
+
Project-URL: Documentation, https://pchalasani.github.io/claude-code-tools/tools/voxtype/
|
|
7
|
+
Author-email: Prasad Chalasani <pchalasani@gmail.com>
|
|
8
|
+
License: MIT License
|
|
9
|
+
|
|
10
|
+
Copyright (c) 2025 Prasad Chalasani
|
|
11
|
+
|
|
12
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
13
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
14
|
+
in the Software without restriction, including without limitation the rights
|
|
15
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
16
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
17
|
+
furnished to do so, subject to the following conditions:
|
|
18
|
+
|
|
19
|
+
The above copyright notice and this permission notice shall be included in all
|
|
20
|
+
copies or substantial portions of the Software.
|
|
21
|
+
|
|
22
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
23
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
24
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
25
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
26
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
27
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
28
|
+
SOFTWARE.
|
|
29
|
+
License-File: LICENSE
|
|
30
|
+
Keywords: dictation,macos,parakeet,speech-to-text,voice,whisper
|
|
31
|
+
Classifier: Environment :: MacOS X
|
|
32
|
+
Classifier: Operating System :: MacOS
|
|
33
|
+
Classifier: Programming Language :: Python :: 3
|
|
34
|
+
Classifier: Topic :: Multimedia :: Sound/Audio :: Speech
|
|
35
|
+
Requires-Python: >=3.11
|
|
36
|
+
Requires-Dist: numba>=0.61; sys_platform == 'darwin' and platform_machine == 'arm64'
|
|
37
|
+
Requires-Dist: numpy>=1.26.0
|
|
38
|
+
Requires-Dist: parakeet-mlx>=0.5.0; sys_platform == 'darwin' and platform_machine == 'arm64'
|
|
39
|
+
Requires-Dist: pynput>=1.7.7
|
|
40
|
+
Requires-Dist: questionary>=2.0.0
|
|
41
|
+
Requires-Dist: sherpa-onnx-core<1.13,>=1.12.0
|
|
42
|
+
Requires-Dist: sherpa-onnx<1.13,>=1.12.0
|
|
43
|
+
Requires-Dist: sounddevice>=0.5.0
|
|
44
|
+
Provides-Extra: mlx
|
|
45
|
+
Provides-Extra: moonshine
|
|
46
|
+
Requires-Dist: moonshine-voice>=0.0.69; extra == 'moonshine'
|
|
47
|
+
Provides-Extra: parakeet
|
|
48
|
+
Description-Content-Type: text/markdown
|
|
49
|
+
|
|
50
|
+
# voxtype — local voice dictation that types where your cursor is
|
|
51
|
+
|
|
52
|
+
`voxtype` turns speech into text in whatever app has focus — your editor,
|
|
53
|
+
browser, terminal, or a coding agent's prompt box. Everything runs on your
|
|
54
|
+
machine: no cloud, no accounts, no audio leaving your Mac.
|
|
55
|
+
|
|
56
|
+
> **macOS only (Intel and Apple Silicon).** voxtype relies on macOS APIs
|
|
57
|
+
> for typing (accessibility), hotkey suppression (the CGEvent tap), and its
|
|
58
|
+
> overlay (AppKit). **It is not supported on Linux or Windows** — the toggle
|
|
59
|
+
> hotkey can't be suppressed there (it leaks into your text), there is no
|
|
60
|
+
> overlay, and it is untested. On Apple Silicon (M1 or later) it defaults to
|
|
61
|
+
> the `parakeet-mlx` Apple-GPU engine; Intel Macs use the `parakeet` CPU
|
|
62
|
+
> engine.
|
|
63
|
+
|
|
64
|
+
## Install
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
uv tool install voxtype
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
That's it. The install includes the best engine for your machine — the
|
|
71
|
+
Apple-GPU `parakeet-mlx` engine on Apple Silicon (best accuracy AND
|
|
72
|
+
speed), the CPU `parakeet` engine everywhere else — and that engine is
|
|
73
|
+
the runtime default too, so no flags are needed.
|
|
74
|
+
|
|
75
|
+
Or run without installing: `uvx voxtype`. (No `uv`? `pipx install
|
|
76
|
+
voxtype` works too.)
|
|
77
|
+
|
|
78
|
+
## Why it's different
|
|
79
|
+
|
|
80
|
+
- **One key to dictate.** Hit the toggle hotkey (default `Ctrl+;`), speak as
|
|
81
|
+
long as you like, hit it again — the whole take is transcribed with full
|
|
82
|
+
sentence context and typed in one go (a single edit to undo, in most
|
|
83
|
+
apps). No chopping at pauses, sub-second results.
|
|
84
|
+
- **Or go hands-free.** Say "hey claude" (configurable, with alias
|
|
85
|
+
spellings) to start dictating; say "stop listening" or go quiet to
|
|
86
|
+
re-arm. The hotkey still works as an override.
|
|
87
|
+
- **Spoken submit.** Say "go", "over", or "submit" as a standalone
|
|
88
|
+
utterance and voxtype presses Enter — dictate a prompt to a coding agent
|
|
89
|
+
and send it without touching the keyboard.
|
|
90
|
+
- **Clean transcripts.** Standalone fillers (uh, um, ...) are stripped and
|
|
91
|
+
3+ word stutters collapse ("I I I think" becomes "I think") — on-device
|
|
92
|
+
regex, no LLM involved.
|
|
93
|
+
- **Visible when it matters.** A floating waveform pill appears ONLY while
|
|
94
|
+
recording — red waves as you speak. Pill on screen = mic live; no pill =
|
|
95
|
+
not listening.
|
|
96
|
+
- **Nothing is ever lost.** Dictated into the wrong window? A paste-again
|
|
97
|
+
hotkey re-types the last session's transcript at the cursor; optional
|
|
98
|
+
clipboard mirroring too. Escape cancels a recording outright.
|
|
99
|
+
|
|
100
|
+
## Quick start
|
|
101
|
+
|
|
102
|
+
1. Install (see above), then grant your terminal **Microphone**,
|
|
103
|
+
**Accessibility**, and **Input Monitoring** permissions
|
|
104
|
+
(System Settings → Privacy & Security) when prompted.
|
|
105
|
+
|
|
106
|
+
2. Start dictating:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
voxtype --segmentation hold
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Press `Ctrl+;`, speak (watch the waveform pill), press `Ctrl+;` again —
|
|
113
|
+
the whole take types at your cursor. `Esc` cancels a take.
|
|
114
|
+
|
|
115
|
+
3. Make it yours: run `voxtype setup` for an interactive walkthrough — it
|
|
116
|
+
asks a handful of explained questions (engine, mode, hotkey, ...) and
|
|
117
|
+
writes your `~/.config/voxtype/config.toml`. (Prefer editing by hand?
|
|
118
|
+
`voxtype init` drops a fully commented sample instead.) After that,
|
|
119
|
+
plain `voxtype` starts with your settings.
|
|
120
|
+
|
|
121
|
+
## Hotkey & voice vocabulary
|
|
122
|
+
|
|
123
|
+
| Action | Default | Configurable as |
|
|
124
|
+
|--------|---------|-----------------|
|
|
125
|
+
| Toggle recording | `Ctrl+;` | `hotkey` |
|
|
126
|
+
| Cancel recording (discard) | `Esc` (only while recording) | `cancel_hotkey` |
|
|
127
|
+
| Re-type last transcript | off | `paste_hotkey` |
|
|
128
|
+
| Submit (press Enter) | say "go" / "over" / "submit" | `submit_phrases` |
|
|
129
|
+
| Stop dictating | say "stop listening" | `stop_phrase` |
|
|
130
|
+
|
|
131
|
+
Not sure how to spell a chord? Run `voxtype hotkey`, press the combo you
|
|
132
|
+
want, and it prints the exact line to put in your config
|
|
133
|
+
(e.g. `hotkey = "<ctrl>+;"`).
|
|
134
|
+
|
|
135
|
+
## Engines
|
|
136
|
+
|
|
137
|
+
| Engine | Availability | Notes |
|
|
138
|
+
|--------|--------------|-------|
|
|
139
|
+
| `parakeet-mlx` | included (default on Apple Silicon) | Parakeet-TDT 0.6b v3 on the Apple GPU via MLX: fp16 accuracy at ~40x realtime — best accuracy AND speed |
|
|
140
|
+
| `parakeet` | included (default elsewhere) | Parakeet-TDT 0.6b v3 on CPU via sherpa-onnx (~490 MB download) |
|
|
141
|
+
| `moonshine` | opt-in: `voxtype[moonshine]` | Streaming Moonshine models, smallest footprint (no Intel-macOS build) |
|
|
142
|
+
|
|
143
|
+
## Documentation
|
|
144
|
+
|
|
145
|
+
Full reference — every config key with its default, the engine comparison,
|
|
146
|
+
and all CLI flags:
|
|
147
|
+
<https://pchalasani.github.io/claude-code-tools/tools/voxtype/>
|
|
148
|
+
|
|
149
|
+
## History
|
|
150
|
+
|
|
151
|
+
voxtype previously shipped as `voice-type` inside
|
|
152
|
+
[claude-code-tools](https://github.com/pchalasani/claude-code-tools). It
|
|
153
|
+
still reads a legacy `~/.config/voice-type/config.toml` and reuses the old
|
|
154
|
+
`~/.cache/voice-type` model cache, so upgrading is seamless.
|
|
155
|
+
|
|
156
|
+
MIT license.
|
voxtype-0.1.0/README.md
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# voxtype — local voice dictation that types where your cursor is
|
|
2
|
+
|
|
3
|
+
`voxtype` turns speech into text in whatever app has focus — your editor,
|
|
4
|
+
browser, terminal, or a coding agent's prompt box. Everything runs on your
|
|
5
|
+
machine: no cloud, no accounts, no audio leaving your Mac.
|
|
6
|
+
|
|
7
|
+
> **macOS only (Intel and Apple Silicon).** voxtype relies on macOS APIs
|
|
8
|
+
> for typing (accessibility), hotkey suppression (the CGEvent tap), and its
|
|
9
|
+
> overlay (AppKit). **It is not supported on Linux or Windows** — the toggle
|
|
10
|
+
> hotkey can't be suppressed there (it leaks into your text), there is no
|
|
11
|
+
> overlay, and it is untested. On Apple Silicon (M1 or later) it defaults to
|
|
12
|
+
> the `parakeet-mlx` Apple-GPU engine; Intel Macs use the `parakeet` CPU
|
|
13
|
+
> engine.
|
|
14
|
+
|
|
15
|
+
## Install
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
uv tool install voxtype
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
That's it. The install includes the best engine for your machine — the
|
|
22
|
+
Apple-GPU `parakeet-mlx` engine on Apple Silicon (best accuracy AND
|
|
23
|
+
speed), the CPU `parakeet` engine everywhere else — and that engine is
|
|
24
|
+
the runtime default too, so no flags are needed.
|
|
25
|
+
|
|
26
|
+
Or run without installing: `uvx voxtype`. (No `uv`? `pipx install
|
|
27
|
+
voxtype` works too.)
|
|
28
|
+
|
|
29
|
+
## Why it's different
|
|
30
|
+
|
|
31
|
+
- **One key to dictate.** Hit the toggle hotkey (default `Ctrl+;`), speak as
|
|
32
|
+
long as you like, hit it again — the whole take is transcribed with full
|
|
33
|
+
sentence context and typed in one go (a single edit to undo, in most
|
|
34
|
+
apps). No chopping at pauses, sub-second results.
|
|
35
|
+
- **Or go hands-free.** Say "hey claude" (configurable, with alias
|
|
36
|
+
spellings) to start dictating; say "stop listening" or go quiet to
|
|
37
|
+
re-arm. The hotkey still works as an override.
|
|
38
|
+
- **Spoken submit.** Say "go", "over", or "submit" as a standalone
|
|
39
|
+
utterance and voxtype presses Enter — dictate a prompt to a coding agent
|
|
40
|
+
and send it without touching the keyboard.
|
|
41
|
+
- **Clean transcripts.** Standalone fillers (uh, um, ...) are stripped and
|
|
42
|
+
3+ word stutters collapse ("I I I think" becomes "I think") — on-device
|
|
43
|
+
regex, no LLM involved.
|
|
44
|
+
- **Visible when it matters.** A floating waveform pill appears ONLY while
|
|
45
|
+
recording — red waves as you speak. Pill on screen = mic live; no pill =
|
|
46
|
+
not listening.
|
|
47
|
+
- **Nothing is ever lost.** Dictated into the wrong window? A paste-again
|
|
48
|
+
hotkey re-types the last session's transcript at the cursor; optional
|
|
49
|
+
clipboard mirroring too. Escape cancels a recording outright.
|
|
50
|
+
|
|
51
|
+
## Quick start
|
|
52
|
+
|
|
53
|
+
1. Install (see above), then grant your terminal **Microphone**,
|
|
54
|
+
**Accessibility**, and **Input Monitoring** permissions
|
|
55
|
+
(System Settings → Privacy & Security) when prompted.
|
|
56
|
+
|
|
57
|
+
2. Start dictating:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
voxtype --segmentation hold
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Press `Ctrl+;`, speak (watch the waveform pill), press `Ctrl+;` again —
|
|
64
|
+
the whole take types at your cursor. `Esc` cancels a take.
|
|
65
|
+
|
|
66
|
+
3. Make it yours: run `voxtype setup` for an interactive walkthrough — it
|
|
67
|
+
asks a handful of explained questions (engine, mode, hotkey, ...) and
|
|
68
|
+
writes your `~/.config/voxtype/config.toml`. (Prefer editing by hand?
|
|
69
|
+
`voxtype init` drops a fully commented sample instead.) After that,
|
|
70
|
+
plain `voxtype` starts with your settings.
|
|
71
|
+
|
|
72
|
+
## Hotkey & voice vocabulary
|
|
73
|
+
|
|
74
|
+
| Action | Default | Configurable as |
|
|
75
|
+
|--------|---------|-----------------|
|
|
76
|
+
| Toggle recording | `Ctrl+;` | `hotkey` |
|
|
77
|
+
| Cancel recording (discard) | `Esc` (only while recording) | `cancel_hotkey` |
|
|
78
|
+
| Re-type last transcript | off | `paste_hotkey` |
|
|
79
|
+
| Submit (press Enter) | say "go" / "over" / "submit" | `submit_phrases` |
|
|
80
|
+
| Stop dictating | say "stop listening" | `stop_phrase` |
|
|
81
|
+
|
|
82
|
+
Not sure how to spell a chord? Run `voxtype hotkey`, press the combo you
|
|
83
|
+
want, and it prints the exact line to put in your config
|
|
84
|
+
(e.g. `hotkey = "<ctrl>+;"`).
|
|
85
|
+
|
|
86
|
+
## Engines
|
|
87
|
+
|
|
88
|
+
| Engine | Availability | Notes |
|
|
89
|
+
|--------|--------------|-------|
|
|
90
|
+
| `parakeet-mlx` | included (default on Apple Silicon) | Parakeet-TDT 0.6b v3 on the Apple GPU via MLX: fp16 accuracy at ~40x realtime — best accuracy AND speed |
|
|
91
|
+
| `parakeet` | included (default elsewhere) | Parakeet-TDT 0.6b v3 on CPU via sherpa-onnx (~490 MB download) |
|
|
92
|
+
| `moonshine` | opt-in: `voxtype[moonshine]` | Streaming Moonshine models, smallest footprint (no Intel-macOS build) |
|
|
93
|
+
|
|
94
|
+
## Documentation
|
|
95
|
+
|
|
96
|
+
Full reference — every config key with its default, the engine comparison,
|
|
97
|
+
and all CLI flags:
|
|
98
|
+
<https://pchalasani.github.io/claude-code-tools/tools/voxtype/>
|
|
99
|
+
|
|
100
|
+
## History
|
|
101
|
+
|
|
102
|
+
voxtype previously shipped as `voice-type` inside
|
|
103
|
+
[claude-code-tools](https://github.com/pchalasani/claude-code-tools). It
|
|
104
|
+
still reads a legacy `~/.config/voice-type/config.toml` and reuses the old
|
|
105
|
+
`~/.cache/voice-type` model cache, so upgrading is seamless.
|
|
106
|
+
|
|
107
|
+
MIT license.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "voxtype"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "Local, streaming speech-to-text that types wherever your cursor is (macOS)"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
license = { file = "LICENSE" }
|
|
7
|
+
authors = [{ name = "Prasad Chalasani", email = "pchalasani@gmail.com" }]
|
|
8
|
+
requires-python = ">=3.11"
|
|
9
|
+
keywords = ["speech-to-text", "dictation", "voice", "whisper", "parakeet", "macos"]
|
|
10
|
+
classifiers = [
|
|
11
|
+
"Environment :: MacOS X",
|
|
12
|
+
"Operating System :: MacOS",
|
|
13
|
+
"Programming Language :: Python :: 3",
|
|
14
|
+
"Topic :: Multimedia :: Sound/Audio :: Speech",
|
|
15
|
+
]
|
|
16
|
+
# A plain `uv tool install voxtype` gets the best engine for the
|
|
17
|
+
# machine: parakeet-mlx (Apple GPU) on Apple Silicon, parakeet CPU
|
|
18
|
+
# (sherpa-onnx) everywhere else. Markers gate the arm64-only MLX stack.
|
|
19
|
+
dependencies = [
|
|
20
|
+
"pynput>=1.7.7",
|
|
21
|
+
# The `voxtype setup` onboarding wizard uses questionary; it is the
|
|
22
|
+
# advertised first-run path, so it ships in the base install (not an
|
|
23
|
+
# extra) — otherwise `voxtype setup` would fail on a clean install.
|
|
24
|
+
"questionary>=2.0.0",
|
|
25
|
+
# Apple-GPU engine (Apple Silicon Macs only; wheels are arm64).
|
|
26
|
+
"parakeet-mlx>=0.5.0; sys_platform == 'darwin' and platform_machine == 'arm64'",
|
|
27
|
+
# Resolver guard: without it uv can backtrack through parakeet-mlx
|
|
28
|
+
# -> librosa -> numba to a 2021 llvmlite that cannot build on
|
|
29
|
+
# modern Python ("Cannot install on Python version 3.13...").
|
|
30
|
+
"numba>=0.61; sys_platform == 'darwin' and platform_machine == 'arm64'",
|
|
31
|
+
# sherpa-onnx: the parakeet CPU engine AND the Silero VAD used by
|
|
32
|
+
# parakeet-mlx segmentation.
|
|
33
|
+
# 1.13.x wheels are missing their bundled onnxruntime dylib on
|
|
34
|
+
# macOS arm64 (dlopen fails); 1.12.x splits the native libs into
|
|
35
|
+
# sherpa-onnx-core, which some resolvers miss (uv caches wheel
|
|
36
|
+
# metadata without it) — declare it explicitly.
|
|
37
|
+
"sherpa-onnx>=1.12.0,<1.13",
|
|
38
|
+
"sherpa-onnx-core>=1.12.0,<1.13",
|
|
39
|
+
"sounddevice>=0.5.0",
|
|
40
|
+
"numpy>=1.26.0",
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
[project.urls]
|
|
44
|
+
Homepage = "https://github.com/pchalasani/claude-code-tools"
|
|
45
|
+
Documentation = "https://pchalasani.github.io/claude-code-tools/tools/voxtype/"
|
|
46
|
+
|
|
47
|
+
[project.optional-dependencies]
|
|
48
|
+
# The moonshine streaming engine, for those who want it (no
|
|
49
|
+
# Intel-macOS wheels exist, hence opt-in).
|
|
50
|
+
moonshine = ["moonshine-voice>=0.0.69"]
|
|
51
|
+
# Back-compat aliases from when the engines were opt-in extras; both
|
|
52
|
+
# engines now ship in the base install (mlx marker-gated to arm64).
|
|
53
|
+
parakeet = []
|
|
54
|
+
mlx = []
|
|
55
|
+
|
|
56
|
+
[project.scripts]
|
|
57
|
+
voxtype = "voxtype.cli:main"
|
|
58
|
+
|
|
59
|
+
[build-system]
|
|
60
|
+
requires = ["hatchling==1.28.0"]
|
|
61
|
+
build-backend = "hatchling.build"
|
|
62
|
+
|
|
63
|
+
[tool.hatch.build.targets.wheel]
|
|
64
|
+
packages = ["src/voxtype"]
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"""voxtype: local, streaming speech-to-text that types where your cursor is.
|
|
2
|
+
|
|
3
|
+
Fully on-device transcription — NVIDIA Parakeet-TDT on the Apple GPU
|
|
4
|
+
(MLX) or CPU (sherpa-onnx), or Moonshine streaming models — with voice
|
|
5
|
+
activity detection, a configurable global hotkey, and an optional wake
|
|
6
|
+
word (e.g. "claude").
|
|
7
|
+
"""
|