whisper-key-local 0.5.3__py3-none-any.whl → 0.6.1__py3-none-any.whl
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.
- whisper_key/assets/version.txt +1 -1
- whisper_key/audio_feedback.py +21 -20
- whisper_key/clipboard_manager.py +35 -52
- whisper_key/config.defaults.yaml +22 -13
- whisper_key/config_manager.py +25 -9
- whisper_key/console_manager.py +2 -58
- whisper_key/hotkey_listener.py +55 -89
- whisper_key/instance_manager.py +9 -13
- whisper_key/main.py +28 -11
- whisper_key/platform/__init__.py +10 -0
- whisper_key/platform/macos/__init__.py +1 -0
- whisper_key/platform/macos/app.py +27 -0
- whisper_key/platform/macos/assets/tray_idle.png +0 -0
- whisper_key/platform/macos/assets/tray_processing.png +0 -0
- whisper_key/platform/macos/assets/tray_recording.png +0 -0
- whisper_key/platform/macos/console.py +13 -0
- whisper_key/platform/macos/hotkeys.py +180 -0
- whisper_key/platform/macos/icons.py +11 -0
- whisper_key/platform/macos/instance_lock.py +31 -0
- whisper_key/platform/macos/keyboard.py +97 -0
- whisper_key/platform/macos/keycodes.py +17 -0
- whisper_key/platform/macos/paths.py +8 -0
- whisper_key/platform/macos/permissions.py +66 -0
- whisper_key/platform/windows/__init__.py +1 -0
- whisper_key/platform/windows/app.py +6 -0
- whisper_key/platform/windows/assets/tray_idle.png +0 -0
- whisper_key/platform/windows/assets/tray_processing.png +0 -0
- whisper_key/platform/windows/assets/tray_recording.png +0 -0
- whisper_key/platform/windows/console.py +59 -0
- whisper_key/platform/windows/hotkeys.py +30 -0
- whisper_key/platform/windows/icons.py +11 -0
- whisper_key/platform/windows/instance_lock.py +14 -0
- whisper_key/platform/windows/keyboard.py +12 -0
- whisper_key/platform/windows/paths.py +8 -0
- whisper_key/platform/windows/permissions.py +6 -0
- whisper_key/state_manager.py +4 -4
- whisper_key/system_tray.py +30 -57
- whisper_key/terminal_ui.py +71 -0
- whisper_key/utils.py +8 -4
- whisper_key_local-0.6.1.dist-info/METADATA +159 -0
- whisper_key_local-0.6.1.dist-info/RECORD +53 -0
- {whisper_key_local-0.5.3.dist-info → whisper_key_local-0.6.1.dist-info}/WHEEL +1 -1
- whisper_key/assets/tray_idle.png +0 -0
- whisper_key/assets/tray_processing.png +0 -0
- whisper_key/assets/tray_recording.png +0 -0
- whisper_key_local-0.5.3.dist-info/METADATA +0 -130
- whisper_key_local-0.5.3.dist-info/RECORD +0 -29
- {whisper_key_local-0.5.3.dist-info → whisper_key_local-0.6.1.dist-info}/entry_points.txt +0 -0
- {whisper_key_local-0.5.3.dist-info → whisper_key_local-0.6.1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: whisper-key-local
|
|
3
|
+
Version: 0.6.1
|
|
4
|
+
Summary: Local faster-whisper speech-to-text app with global hotkeys for Windows
|
|
5
|
+
Author-email: Pin Wang <pinwang@gmail.com>
|
|
6
|
+
Requires-Python: >=3.11
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
Requires-Dist: faster-whisper>=1.2.1
|
|
9
|
+
Requires-Dist: ctranslate2>=4.6.3
|
|
10
|
+
Requires-Dist: numpy>=1.24.0
|
|
11
|
+
Requires-Dist: soxr>=0.3.0
|
|
12
|
+
Requires-Dist: sounddevice>=0.4.6
|
|
13
|
+
Requires-Dist: pyperclip>=1.8.2
|
|
14
|
+
Requires-Dist: ruamel.yaml>=0.18.14
|
|
15
|
+
Requires-Dist: pystray>=0.19.5
|
|
16
|
+
Requires-Dist: Pillow>=10.0.0
|
|
17
|
+
Requires-Dist: hf-xet>=1.1.5
|
|
18
|
+
Requires-Dist: playsound3>=2.0
|
|
19
|
+
Requires-Dist: ten-vad>=1.0.6
|
|
20
|
+
Requires-Dist: global-hotkeys>=0.1.7; sys_platform == "win32"
|
|
21
|
+
Requires-Dist: pywin32>=306; sys_platform == "win32"
|
|
22
|
+
Requires-Dist: pyautogui>=0.9.54; sys_platform == "win32"
|
|
23
|
+
Requires-Dist: pyobjc-framework-Quartz; sys_platform == "darwin"
|
|
24
|
+
Requires-Dist: pyobjc-framework-ApplicationServices; sys_platform == "darwin"
|
|
25
|
+
|
|
26
|
+
# Whisper Key - Local Speech-to-Text
|
|
27
|
+
|
|
28
|
+
Global hotkeys to record speech and transcribe directly to your cursor.
|
|
29
|
+
|
|
30
|
+
> **Now on Windows and macOS!** Questions or ideas? [Discord](https://discord.gg/uZnXV8snhz)
|
|
31
|
+
|
|
32
|
+
## ✨ Features
|
|
33
|
+
|
|
34
|
+
- **Global Hotkey**: Start recording speech from any app
|
|
35
|
+
- **Auto-Paste**: Transcribe directly to cursor
|
|
36
|
+
- **Auto-Send**: Optionally auto-send your transcription with ENTER
|
|
37
|
+
- **Offline Capable**: No internet required after models downloaded
|
|
38
|
+
- **Local Processing**: Voice data never leaves your computer
|
|
39
|
+
- **Efficient Models**: Choose a small, efficient model for CPU
|
|
40
|
+
- **CUDA Support**: Or leverage your nVidia GPU with bigger models
|
|
41
|
+
- **Voice activity detection**: Auto-cancel after long silences and prevent hallucination
|
|
42
|
+
- **Cross-platform**: Works on Windows and macOS
|
|
43
|
+
- **Configurable**: Customize hotkeys, models, and [much more](#️-configuration)
|
|
44
|
+
|
|
45
|
+
## 🚀 Quick Start
|
|
46
|
+
|
|
47
|
+
### From PyPI (Recommended)
|
|
48
|
+
|
|
49
|
+
Requires Python 3.11-3.13
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# With pipx (isolated environment)
|
|
53
|
+
pipx install whisper-key-local
|
|
54
|
+
|
|
55
|
+
# Or with pip (simpler)
|
|
56
|
+
pip install whisper-key-local
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Then run: `whisper-key`
|
|
60
|
+
|
|
61
|
+
### Portable App (Windows Only)
|
|
62
|
+
|
|
63
|
+
1. [Download the latest release zip](https://github.com/PinW/whisper-key-local/releases/latest)
|
|
64
|
+
2. Extract and run `whisper-key.exe`
|
|
65
|
+
|
|
66
|
+
### From Source
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
git clone https://github.com/PinW/whisper-key-local.git
|
|
70
|
+
cd whisper-key-local
|
|
71
|
+
pip install -e .
|
|
72
|
+
python whisper-key.py
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## 🎤 Basic Usage
|
|
76
|
+
|
|
77
|
+
| Hotkey | Windows | macOS |
|
|
78
|
+
|--------|---------|-------|
|
|
79
|
+
| Start recording | `Ctrl+Win` | `Fn+Ctrl` |
|
|
80
|
+
| Stop & transcribe | `Ctrl` | `Fn` |
|
|
81
|
+
| Stop & auto-send | `Alt` | `Option` |
|
|
82
|
+
| Cancel recording | `Esc` | `Shift` |
|
|
83
|
+
|
|
84
|
+
Open the system tray / menu bar icon to:
|
|
85
|
+
- Toggle auto-paste vs clipboard-only
|
|
86
|
+
- Change transcription model
|
|
87
|
+
- Select audio device
|
|
88
|
+
|
|
89
|
+
## ⚙️ Configuration
|
|
90
|
+
|
|
91
|
+
Local settings at:
|
|
92
|
+
- **Windows:** `%APPDATA%\whisperkey\user_settings.yaml`
|
|
93
|
+
- **macOS:** `~/Library/Application Support/whisperkey/user_settings.yaml`
|
|
94
|
+
|
|
95
|
+
Delete this file and restart app to reset to defaults.
|
|
96
|
+
|
|
97
|
+
| Option | Default | Notes |
|
|
98
|
+
|--------|---------|-------|
|
|
99
|
+
| **Whisper** |||
|
|
100
|
+
| `whisper.model` | `tiny` | Any model defined in `whisper.models` |
|
|
101
|
+
| `whisper.device` | `cpu` | cpu or cuda (NVIDIA GPU) |
|
|
102
|
+
| `whisper.compute_type` | `int8` | int8/float16/float32 |
|
|
103
|
+
| `whisper.language` | `auto` | auto or language code (en, es, fr, etc.) |
|
|
104
|
+
| `whisper.beam_size` | `5` | Higher = more accurate but slower (1-10) |
|
|
105
|
+
| `whisper.models` | (see config) | Add custom HuggingFace or local models |
|
|
106
|
+
| **Hotkeys** |||
|
|
107
|
+
| `hotkey.recording_hotkey` | `ctrl+win` / `fn+ctrl` | Windows / macOS |
|
|
108
|
+
| `hotkey.stop_with_modifier_enabled` | `true` | Stop with first modifier only |
|
|
109
|
+
| `hotkey.auto_enter_enabled` | `true` | Enable auto-send hotkey |
|
|
110
|
+
| `hotkey.auto_enter_combination` | `alt` / `option` | Stop + paste + Enter |
|
|
111
|
+
| `hotkey.cancel_combination` | `esc` / `shift` | Cancel recording |
|
|
112
|
+
| **Voice Activity Detection** |||
|
|
113
|
+
| `vad.vad_precheck_enabled` | `true` | Prevent hallucinations on silence |
|
|
114
|
+
| `vad.vad_onset_threshold` | `0.7` | Speech detection start (0.0-1.0) |
|
|
115
|
+
| `vad.vad_offset_threshold` | `0.55` | Speech detection end (0.0-1.0) |
|
|
116
|
+
| `vad.vad_min_speech_duration` | `0.1` | Min speech segment (seconds) |
|
|
117
|
+
| `vad.vad_realtime_enabled` | `true` | Auto-stop on silence |
|
|
118
|
+
| `vad.vad_silence_timeout_seconds` | `30.0` | Seconds before auto-stop |
|
|
119
|
+
| **Audio** |||
|
|
120
|
+
| `audio.host` | `null` | Audio API (WASAPI, Core Audio, etc.) |
|
|
121
|
+
| `audio.channels` | `1` | 1 = mono, 2 = stereo |
|
|
122
|
+
| `audio.dtype` | `float32` | float32/int16/int24/int32 |
|
|
123
|
+
| `audio.max_duration` | `900` | Max recording seconds (0 = unlimited) |
|
|
124
|
+
| `audio.input_device` | `default` | Device ID or "default" |
|
|
125
|
+
| **Clipboard** |||
|
|
126
|
+
| `clipboard.auto_paste` | `true` | false = clipboard only |
|
|
127
|
+
| `clipboard.paste_hotkey` | `ctrl+v` / `cmd+v` | Paste key simulation |
|
|
128
|
+
| `clipboard.preserve_clipboard` | `true` | Restore clipboard after paste |
|
|
129
|
+
| `clipboard.key_simulation_delay` | `0.05` | Delay between keystrokes (seconds) |
|
|
130
|
+
| **Logging** |||
|
|
131
|
+
| `logging.level` | `INFO` | DEBUG/INFO/WARNING/ERROR/CRITICAL |
|
|
132
|
+
| `logging.file.enabled` | `true` | Write to app.log |
|
|
133
|
+
| `logging.console.enabled` | `true` | Print to console |
|
|
134
|
+
| `logging.console.level` | `WARNING` | Console verbosity |
|
|
135
|
+
| **Audio Feedback** |||
|
|
136
|
+
| `audio_feedback.enabled` | `true` | Play sounds on record/stop |
|
|
137
|
+
| `audio_feedback.start_sound` | `assets/sounds/...` | Custom sound file path |
|
|
138
|
+
| `audio_feedback.stop_sound` | `assets/sounds/...` | Custom sound file path |
|
|
139
|
+
| `audio_feedback.cancel_sound` | `assets/sounds/...` | Custom sound file path |
|
|
140
|
+
| **System Tray** |||
|
|
141
|
+
| `system_tray.enabled` | `true` | Show tray icon |
|
|
142
|
+
| `system_tray.tooltip` | `Whisper Key` | Hover text |
|
|
143
|
+
| **Console** |||
|
|
144
|
+
| `console.start_hidden` | `false` | Start minimized to tray |
|
|
145
|
+
|
|
146
|
+
## 📁 Model Cache
|
|
147
|
+
|
|
148
|
+
Default path for transcription models (via HuggingFace):
|
|
149
|
+
- **Windows:** `%USERPROFILE%\.cache\huggingface\hub\`
|
|
150
|
+
- **macOS:** `~/.cache/huggingface/hub/`
|
|
151
|
+
|
|
152
|
+
## 📦 Dependencies
|
|
153
|
+
|
|
154
|
+
**Cross-platform:**
|
|
155
|
+
`faster-whisper` · `numpy` · `sounddevice` · `soxr` · `pyperclip` · `ruamel.yaml` · `pystray` · `Pillow` · `playsound3` · `ten-vad` · `hf-xet`
|
|
156
|
+
|
|
157
|
+
**Windows:** `global-hotkeys` · `pywin32` · `pyautogui`
|
|
158
|
+
|
|
159
|
+
**macOS:** `pyobjc-framework-Quartz` · `pyobjc-framework-ApplicationServices`
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
whisper_key/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
whisper_key/audio_feedback.py,sha256=EAZq18yro9lKlnL8NoGJwgj1u-lfjEnkxEheEkBY8PQ,2096
|
|
3
|
+
whisper_key/audio_recorder.py,sha256=_5yfSx47ZtV9EFUEzHmXkz4zQt6LzH9kgjb8SmH8SFU,11091
|
|
4
|
+
whisper_key/clipboard_manager.py,sha256=tCLjrju4PKfLYj2_BVMNrmTH0jbJlOdZVwY5OAZgNoI,4713
|
|
5
|
+
whisper_key/config.defaults.yaml,sha256=NU3w49sSUQv6KLr9FRgumAW6lr6qDMllZY9pDa3Mxyk,8365
|
|
6
|
+
whisper_key/config_manager.py,sha256=ir1eFvB4BCuzu74b83qUUJOTi2C5DYu0Hu1bhAuYTTg,18996
|
|
7
|
+
whisper_key/console_manager.py,sha256=2tpzArinBGXSXidTl_LP_1Jy3bpLjRlsVr4_GXmFY2w,71
|
|
8
|
+
whisper_key/hotkey_listener.py,sha256=gUpV-yv5jFOWuamfK6C7WmfR7eGvUuTyk9jsSxUOJn4,6252
|
|
9
|
+
whisper_key/instance_manager.py,sha256=IVc4jhmbKOP0dQoKKYYgdPqZNiDO3xBB8x-lqpdep08,821
|
|
10
|
+
whisper_key/main.py,sha256=tOaxSsun6qBm4kYhgREmfMH4OBuSijzlPd1rmU8spiw,9556
|
|
11
|
+
whisper_key/model_registry.py,sha256=G8BC2jZpTD7cOEeWcfCPPNtu7MsGfyEukuIpfHe_3bk,2718
|
|
12
|
+
whisper_key/state_manager.py,sha256=QSvNOODWzuotj5S7opCp9dEzaeu0Z0yaa5it6f7HQ4o,19332
|
|
13
|
+
whisper_key/system_tray.py,sha256=poYrR8JiK-j7hYmaKQP4UmoMSN0XoKiDRDdMwG1_RIQ,12018
|
|
14
|
+
whisper_key/terminal_ui.py,sha256=zIYto_r9mKNh1s55iCgkTB4rXk3oY99YXFEkrLOSuCs,1900
|
|
15
|
+
whisper_key/utils.py,sha256=wB8r5oG_3MHB-jb-5nucW6TXYHXL55b68ytjngnqlf0,2464
|
|
16
|
+
whisper_key/voice_activity_detection.py,sha256=Q6wzuUrMQfwk5atOYcbhuug50EXQmSQeo3UT4gVEKs8,9588
|
|
17
|
+
whisper_key/whisper_engine.py,sha256=Qop6fAtUHKeU346jtdBQoUnNpwoeaiDZn3BQJnUGTc0,7126
|
|
18
|
+
whisper_key/assets/portaudio.dll,sha256=7HKPuVjxqajT424rbSKs0RnGGk9rQ92MJiaH7taboHg,951689
|
|
19
|
+
whisper_key/assets/version.txt,sha256=FISMX4dCeuVLAL-euGv9P7YojmEdOvHXc57gkFDNRt8,5
|
|
20
|
+
whisper_key/assets/sounds/record_cancel.wav,sha256=KyjCjKdd1FkAUXCxHkg9Gqo3EuOdeyUvT9n1CKG54Zg,18206
|
|
21
|
+
whisper_key/assets/sounds/record_start.wav,sha256=E704RZ433LwgdPyDN6G9csfk0V0NefBSbYZqRKwGnq4,96846
|
|
22
|
+
whisper_key/assets/sounds/record_stop.wav,sha256=E704RZ433LwgdPyDN6G9csfk0V0NefBSbYZqRKwGnq4,96846
|
|
23
|
+
whisper_key/platform/__init__.py,sha256=iIPDrkw-AdONLCoz-JSl6GUwHyvNA1nyl2XTzcVfLfo,380
|
|
24
|
+
whisper_key/platform/macos/__init__.py,sha256=VB6kEIXBicjUHkn4qcc5V19CPnu-qaa1J8RWN6eVjzs,76
|
|
25
|
+
whisper_key/platform/macos/app.py,sha256=Htiv9u3hFRG2UiClmaSoioi-tAVknPbyVaDeI0rdC0Y,889
|
|
26
|
+
whisper_key/platform/macos/console.py,sha256=60CH5mD-uZ5-lF1brwMN4Nf0MVnQX39BwCymfh9dQgE,340
|
|
27
|
+
whisper_key/platform/macos/hotkeys.py,sha256=4IOTdkvqcxpujWlwUqo1GhJ0FlMtb-6rWudKfYNIv6c,5294
|
|
28
|
+
whisper_key/platform/macos/icons.py,sha256=utycz63TDHZAtVFgs1IhopJcaCGF_-ArQc7kC4lYhGk,340
|
|
29
|
+
whisper_key/platform/macos/instance_lock.py,sha256=ZCPX8yIEfD6qbJbUiRuDtQEqGSlHasxW-msxFIr_B5w,743
|
|
30
|
+
whisper_key/platform/macos/keyboard.py,sha256=2Umm8D_hbwviYGSIipukVsa5HpDQMm-Rdy6q3B4afCs,2673
|
|
31
|
+
whisper_key/platform/macos/keycodes.py,sha256=f8iDSDB-ohALyF1gM0VYitwMmUxKtdKCeJr5Jm9p-Rk,728
|
|
32
|
+
whisper_key/platform/macos/paths.py,sha256=fQ2zwyU0bpGvsQxITL6pv9UnqVGSm16BI_Lp3HZSDPU,205
|
|
33
|
+
whisper_key/platform/macos/permissions.py,sha256=B-P89cMs1MHpcvOdVkn8dxOhts8RIWLPe4fzd0XPHf4,1982
|
|
34
|
+
whisper_key/platform/macos/assets/tray_idle.png,sha256=L3a9t758_YZBcAGsJwBIz2_4XuXtSQyveEuw2qGhUjc,3980
|
|
35
|
+
whisper_key/platform/macos/assets/tray_processing.png,sha256=B2cZXnNwnVtJHLX5PSRZ1vJ4VFe1UDVzmnH6alQaTR4,4233
|
|
36
|
+
whisper_key/platform/macos/assets/tray_recording.png,sha256=joSoD2pRrfi8E4oVC2sX3a6dUcxzUh2pf_T7p0vXQB0,4187
|
|
37
|
+
whisper_key/platform/windows/__init__.py,sha256=VB6kEIXBicjUHkn4qcc5V19CPnu-qaa1J8RWN6eVjzs,76
|
|
38
|
+
whisper_key/platform/windows/app.py,sha256=XDcdQ35ASuORiPWIDGFi1yfwpj78979Jj-s4XaXN8Ko,120
|
|
39
|
+
whisper_key/platform/windows/console.py,sha256=NTyVtBRzzcXc4M6RBp0Tp1BKnQpDpQ2Gtbs5bIqiZH8,2010
|
|
40
|
+
whisper_key/platform/windows/hotkeys.py,sha256=UI3NINjwpldINI0t3rxDbpJgPWiHSvvn971c7VmrEz0,846
|
|
41
|
+
whisper_key/platform/windows/icons.py,sha256=utycz63TDHZAtVFgs1IhopJcaCGF_-ArQc7kC4lYhGk,340
|
|
42
|
+
whisper_key/platform/windows/instance_lock.py,sha256=bvy76-jlsA2QaMnvzHvkXWTqEGACQHsCqppFQXa3ED4,379
|
|
43
|
+
whisper_key/platform/windows/keyboard.py,sha256=whSmm1B82GZ-A5EDpz6RpDcwIKYfqd9LTfK5LU0_sek,210
|
|
44
|
+
whisper_key/platform/windows/paths.py,sha256=TPNr0AuZ5M53121SqRfiWJA4yBNI46I6T7GukHkyjow,159
|
|
45
|
+
whisper_key/platform/windows/permissions.py,sha256=qucBNxrP2BZrz1o-2ASwklATilSHyf9UvDhcZx4dWN0,135
|
|
46
|
+
whisper_key/platform/windows/assets/tray_idle.png,sha256=Zrg3z0TQGYL-YQp9HDFUvIvXgq08SA3JCCTWULzcfOc,3354
|
|
47
|
+
whisper_key/platform/windows/assets/tray_processing.png,sha256=ZPyVBc7BTB4laTCa6pJ9bawszt73Qm_2aGgop5xq1r0,3566
|
|
48
|
+
whisper_key/platform/windows/assets/tray_recording.png,sha256=HGFQZnV78s4cdlBng5bG8X3YVEhrgxV8AfBnBPEL0Do,3579
|
|
49
|
+
whisper_key_local-0.6.1.dist-info/METADATA,sha256=apBriGSQPs2x5qXKqgA3_lxJNOOFA0jXwH-T3PTuaao,6423
|
|
50
|
+
whisper_key_local-0.6.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
51
|
+
whisper_key_local-0.6.1.dist-info/entry_points.txt,sha256=70ibxew9nZShJozx4Jcbuwd4Fcrr0Ji_BD7gk6azl4E,54
|
|
52
|
+
whisper_key_local-0.6.1.dist-info/top_level.txt,sha256=gtXj51Nif3n1odPP3OvpiljIojWTpRBLCNlhzKWisxQ,12
|
|
53
|
+
whisper_key_local-0.6.1.dist-info/RECORD,,
|
whisper_key/assets/tray_idle.png
DELETED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: whisper-key-local
|
|
3
|
-
Version: 0.5.3
|
|
4
|
-
Summary: Local faster-whisper speech-to-text app with global hotkeys for Windows
|
|
5
|
-
Author-email: Pin Wang <pinwang@gmail.com>
|
|
6
|
-
Requires-Python: >=3.11
|
|
7
|
-
Description-Content-Type: text/markdown
|
|
8
|
-
Requires-Dist: faster-whisper>=1.2.1
|
|
9
|
-
Requires-Dist: ctranslate2>=4.6.3
|
|
10
|
-
Requires-Dist: numpy>=1.24.0
|
|
11
|
-
Requires-Dist: soxr>=0.3.0
|
|
12
|
-
Requires-Dist: sounddevice>=0.4.6
|
|
13
|
-
Requires-Dist: global-hotkeys>=0.1.7; platform_system == "Windows"
|
|
14
|
-
Requires-Dist: pyperclip>=1.8.2
|
|
15
|
-
Requires-Dist: ruamel.yaml>=0.18.14
|
|
16
|
-
Requires-Dist: pywin32>=306; platform_system == "Windows"
|
|
17
|
-
Requires-Dist: pyautogui>=0.9.54; platform_system == "Windows"
|
|
18
|
-
Requires-Dist: pystray>=0.19.5
|
|
19
|
-
Requires-Dist: Pillow>=10.0.0
|
|
20
|
-
Requires-Dist: hf-xet>=1.1.5
|
|
21
|
-
|
|
22
|
-
# Whisper Key - Local Speech-to-Text for Windows
|
|
23
|
-
|
|
24
|
-
Global hotkey to start/stop recording and auto-paste transcription wherever your cursor is.
|
|
25
|
-
|
|
26
|
-
Questions or ideas? [Discord Server](https://discord.gg/uZnXV8snhz)
|
|
27
|
-
|
|
28
|
-
## 🎯 Features
|
|
29
|
-
|
|
30
|
-
- **Global Hotkey**: Press `Ctrl+Win` to start recording, `Ctrl` to stop
|
|
31
|
-
- **Auto-Paste**: Transcription inserted at your cursor via auto-paste
|
|
32
|
-
- **Auto-Send**: Press `Alt` to stop, auto-paste, and auto-send with ENTER keypress
|
|
33
|
-
- **Offline Capable**: No internet required after models downloaded
|
|
34
|
-
- **Local Processing**: Voice data never leaves your computer
|
|
35
|
-
- **Voice activity detection**: Prevent hallucinations, auto-stop accidental hotkey presses
|
|
36
|
-
- **Configurable**: Customize hotkeys, model, transcription actions, and audio settings
|
|
37
|
-
|
|
38
|
-
## 🚀 Quick Start
|
|
39
|
-
|
|
40
|
-
### Prerequisites
|
|
41
|
-
- Windows 10/11
|
|
42
|
-
- Microphone
|
|
43
|
-
|
|
44
|
-
### Option 1: Download Portable App
|
|
45
|
-
1. [Download the latest release zip](https://github.com/PinW/whisper-key-local/releases/latest)
|
|
46
|
-
2. Extract the zip file
|
|
47
|
-
3. Run `whisper-key.exe`
|
|
48
|
-
|
|
49
|
-
### Option 2: Install via pipx
|
|
50
|
-
**Prerequisites:**
|
|
51
|
-
- Python 3.8+ installed on Windows
|
|
52
|
-
- pipx installed (`pip install pipx`)
|
|
53
|
-
|
|
54
|
-
Install the application globally:
|
|
55
|
-
```bash
|
|
56
|
-
pipx install whisper-key-local
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
Add VAD support (prevents silence hallucinations):
|
|
60
|
-
```bash
|
|
61
|
-
pipx inject whisper-key-local git+https://github.com/TEN-framework/ten-vad.git@v1.0-ONNX
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
Run from anywhere:
|
|
65
|
-
```bash
|
|
66
|
-
whisper-key
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
### Option 3: Development Installation
|
|
70
|
-
**Prerequisites:**
|
|
71
|
-
- Python 3.8+ installed on Windows
|
|
72
|
-
|
|
73
|
-
Clone the repository:
|
|
74
|
-
```bash
|
|
75
|
-
git clone https://github.com/PinW/whisper-key-local.git
|
|
76
|
-
cd whisper-key-local
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
Install the dependencies:
|
|
80
|
-
```bash
|
|
81
|
-
pip install -e .
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
Add VAD support (prevents silence hallucinations):
|
|
85
|
-
```bash
|
|
86
|
-
pip install git+https://github.com/TEN-framework/ten-vad.git@v1.0-ONNX
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
Run the application:
|
|
90
|
-
```bash
|
|
91
|
-
python whisper-key.py
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
## 📦 Package Dependencies
|
|
95
|
-
|
|
96
|
-
- `faster-whisper` - Fast AI speech recognition
|
|
97
|
-
- `numpy` - Numerical computing support
|
|
98
|
-
- `sounddevice` - Audio recording
|
|
99
|
-
- `global-hotkeys` - System-wide hotkey detection
|
|
100
|
-
- `pyperclip` - Clipboard operations
|
|
101
|
-
- `ruamel.yaml` - Configuration file parsing (YAML)
|
|
102
|
-
- `pyautogui` - Key simulation for Ctrl+V auto-paste and auto-ENTER
|
|
103
|
-
- `pywin32` - Windows API access for window management
|
|
104
|
-
- `pystray` - System tray integration
|
|
105
|
-
- `Pillow` - Image processing for system tray icons
|
|
106
|
-
- `hf-xet` - Cache management for Hugging Face models
|
|
107
|
-
- `ten-vad` - Voice Activity Detection to prevent silent hallucinations
|
|
108
|
-
|
|
109
|
-
## 🎮 Basic Usage
|
|
110
|
-
|
|
111
|
-
- Boot the app, the "tiny" model will download and start
|
|
112
|
-
- Press `Ctrl+Win` to start recording
|
|
113
|
-
- Speak into your microphone
|
|
114
|
-
- Press `Ctrl` to stop recording and transcribe
|
|
115
|
-
- The transcribed text is auto-pasted on your text cursor
|
|
116
|
-
- Alternatively press `Alt` to stop recording, auto-paste, and also send an ENTER keypress
|
|
117
|
-
- Right click the system tray icon to change models
|
|
118
|
-
|
|
119
|
-
### Configuration
|
|
120
|
-
The app automatically creates a user settings file in `%APPDATA%\Roaming\whisperkey\user_settings.yaml`, where you can:
|
|
121
|
-
- Change whisper model size (tiny/base/small/medium/large)
|
|
122
|
-
- Hotkeys
|
|
123
|
-
- Configure automation (auto-paste, auto-ENTER)
|
|
124
|
-
- Voice activity detection
|
|
125
|
-
- And much more
|
|
126
|
-
|
|
127
|
-
## 🔧 Troubleshooting
|
|
128
|
-
|
|
129
|
-
- Check the log file `app.log` for detailed error messages
|
|
130
|
-
- Delete the user settings file in `%APPDATA%/whisperkey/user_settings.yaml` and restart to reset to defaults
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
whisper_key/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
whisper_key/audio_feedback.py,sha256=5vBtX3K_x9HJiYmgw48n-FNIeLAYlPulsnC0HTQNk58,2219
|
|
3
|
-
whisper_key/audio_recorder.py,sha256=_5yfSx47ZtV9EFUEzHmXkz4zQt6LzH9kgjb8SmH8SFU,11091
|
|
4
|
-
whisper_key/clipboard_manager.py,sha256=BOxh7ZiJ8bZAwpmlxX0yTC_YYPsmCOdPV_hpcs9P_50,5626
|
|
5
|
-
whisper_key/config.defaults.yaml,sha256=DDSywYBpIHVE6KpviB_B-Vcfqj6b0-Y5evcjUJH8_rM,7914
|
|
6
|
-
whisper_key/config_manager.py,sha256=OebWO-gl7bTxOPZ2ibZsAcPoZLEN-XR1CeeVR6RRJVk,18396
|
|
7
|
-
whisper_key/console_manager.py,sha256=h-y8yU2xJ0anY4KavgeSAL-DWxGFoLxWtSeEvHfN0WY,2006
|
|
8
|
-
whisper_key/hotkey_listener.py,sha256=-ny8rvdWysc_DZP-HQivEUlMBl6QMD7P0VvmdjFFL-Y,8060
|
|
9
|
-
whisper_key/instance_manager.py,sha256=LNMlwODf2hfw0dx6K2ADtSfuu8cYltdct_CBBreuWt8,1020
|
|
10
|
-
whisper_key/main.py,sha256=PRoQFYKeE3UHm1SP0N97pe6f6kw6AcXM17SlvNVFkDk,8832
|
|
11
|
-
whisper_key/model_registry.py,sha256=G8BC2jZpTD7cOEeWcfCPPNtu7MsGfyEukuIpfHe_3bk,2718
|
|
12
|
-
whisper_key/state_manager.py,sha256=U2kfEMK52qSJ7q-ZdDOxBCWUHe_NFLBMEtPhJJsCx60,19368
|
|
13
|
-
whisper_key/system_tray.py,sha256=KMXa24hQW7ovnphiU9OPAo5VIiz1KE3BoMvV0D2E48c,13237
|
|
14
|
-
whisper_key/utils.py,sha256=xUs1DineJbdl70O4aW8i4tTQfurWHmbHjH8WYSPFgmI,2385
|
|
15
|
-
whisper_key/voice_activity_detection.py,sha256=Q6wzuUrMQfwk5atOYcbhuug50EXQmSQeo3UT4gVEKs8,9588
|
|
16
|
-
whisper_key/whisper_engine.py,sha256=Qop6fAtUHKeU346jtdBQoUnNpwoeaiDZn3BQJnUGTc0,7126
|
|
17
|
-
whisper_key/assets/portaudio.dll,sha256=7HKPuVjxqajT424rbSKs0RnGGk9rQ92MJiaH7taboHg,951689
|
|
18
|
-
whisper_key/assets/tray_idle.png,sha256=wl2XGtloFMOrTuYtFa74RaeePWy6H0KRiUe7a_uiCKM,1579
|
|
19
|
-
whisper_key/assets/tray_processing.png,sha256=TS_247NBdkt3P5jZv2J1md3YbdQcQrz4LLAsyFLvk1k,174
|
|
20
|
-
whisper_key/assets/tray_recording.png,sha256=JJX9-CiKHeImDb6w3vSRicU6uoRt1H2rNIVeo6dPgcA,1174
|
|
21
|
-
whisper_key/assets/version.txt,sha256=cTFryKz31mySrI5dsV42bOM-DdcEiqrC-Karpi2dCiA,5
|
|
22
|
-
whisper_key/assets/sounds/record_cancel.wav,sha256=KyjCjKdd1FkAUXCxHkg9Gqo3EuOdeyUvT9n1CKG54Zg,18206
|
|
23
|
-
whisper_key/assets/sounds/record_start.wav,sha256=E704RZ433LwgdPyDN6G9csfk0V0NefBSbYZqRKwGnq4,96846
|
|
24
|
-
whisper_key/assets/sounds/record_stop.wav,sha256=E704RZ433LwgdPyDN6G9csfk0V0NefBSbYZqRKwGnq4,96846
|
|
25
|
-
whisper_key_local-0.5.3.dist-info/METADATA,sha256=2O1Pt-4yo91Ao3TPIAhS6kCfuD4BDdEAJ2FSr5E1ya8,4282
|
|
26
|
-
whisper_key_local-0.5.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
27
|
-
whisper_key_local-0.5.3.dist-info/entry_points.txt,sha256=70ibxew9nZShJozx4Jcbuwd4Fcrr0Ji_BD7gk6azl4E,54
|
|
28
|
-
whisper_key_local-0.5.3.dist-info/top_level.txt,sha256=gtXj51Nif3n1odPP3OvpiljIojWTpRBLCNlhzKWisxQ,12
|
|
29
|
-
whisper_key_local-0.5.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|