|
| 1 | + |
1 | 2 | # Screamer |
2 | 3 |
|
3 | | -A Windows desktop dictation tool. Hold a hotkey, speak, and polished text appears wherever your cursor is. Lives in the system tray with a clean settings window. Open source, MIT licensed. |
| 4 | +Fast Windows dictation that types wherever your cursor is. |
| 5 | + |
| 6 | +Press a hotkey, speak, release - Screamer records your voice, sends it to a speech-to-text provider, optionally cleans up the result with an LLM, and types the final text into the active window. |
| 7 | + |
| 8 | +No browser tab. No copy-paste. Just talk and keep moving. |
| 9 | + |
| 10 | +## Install |
| 11 | + |
| 12 | +Download the latest release from the **Releases** page. |
| 13 | + |
| 14 | +Grab the versioned Windows zip: |
| 15 | + |
| 16 | +```text |
| 17 | +Screamer-vX.Y.Z-windows-x64.zip |
| 18 | +``` |
| 19 | + |
| 20 | +Then: |
| 21 | + |
| 22 | +1. Extract the zip. |
| 23 | +2. Open the `Screamer` folder. |
| 24 | +3. Run `Screamer.exe`. |
| 25 | +4. Configure your provider in Settings. |
| 26 | + |
| 27 | +That's it. |
| 28 | + |
| 29 | +## What Screamer does |
| 30 | + |
| 31 | +- **Global hotkey dictation** - speak from anywhere on Windows. |
| 32 | +- **Hold-to-talk or toggle mode** - choose how recording should behave. |
| 33 | +- **Types into the focused app** - works in editors, browsers, chats, notes, docs, and more. |
| 34 | +- **OpenAI-compatible speech-to-text** - use OpenAI, Groq, or another compatible `/audio/transcriptions` endpoint. |
| 35 | +- **Optional AI cleanup** - fix punctuation, grammar, spelling, and capitalization after transcription. |
| 36 | +- **Fallback providers** - configure backup STT and LLM providers if the primary one fails. |
| 37 | +- **System tray app** - enable/disable, change hotkey, toggle rewrite, open settings, or exit from the tray. |
| 38 | +- **Microphone selection** - pick your input device and calibrate silence detection. |
| 39 | +- **Post-type key** - optionally press `Enter`, `Tab`, `Space`, or `Backspace` after typing. |
| 40 | +- **Windows startup support** - launch Screamer automatically when you log in. |
| 41 | +- **Secure API key storage** - API keys are stored locally with Windows DPAPI. |
4 | 42 |
|
5 | 43 | ## How it works |
6 | 44 |
|
7 | | -Press Scroll Lock (configurable), speak your sentence, release. Screamer records 16 kHz mono audio, sends it to a Whisper-compatible STT endpoint, optionally cleans up grammar and spelling via an LLM rewrite, and types the result into the active window. Toggle mode is also supported. |
| 45 | +```text |
| 46 | +Hotkey -> Record audio -> Transcribe -> Optional cleanup -> Type into active window |
| 47 | +``` |
| 48 | + |
| 49 | +Screamer records 16 kHz mono WAV audio, sends it to your configured STT provider, optionally runs the text through an LLM cleanup step, then injects the final text with Windows `SendInput`. |
8 | 50 |
|
9 | 51 | ## Setup |
10 | 52 |
|
| 53 | +On first launch, open **Settings** from the tray icon. |
| 54 | + |
| 55 | +You need at least one speech-to-text provider. |
| 56 | + |
| 57 | +Example OpenAI-compatible STT config: |
| 58 | + |
| 59 | +```text |
| 60 | +Base URL: https://api.openai.com/v1 |
| 61 | +Model: whisper-1 |
| 62 | +API key: your_api_key |
| 63 | +``` |
| 64 | + |
| 65 | +For Groq or another provider, use their OpenAI-compatible base URL and model name. |
| 66 | + |
| 67 | +The LLM rewrite step is optional. Leave it off if you want raw transcription. |
| 68 | + |
| 69 | +## Settings |
| 70 | + |
| 71 | +### General |
| 72 | + |
| 73 | +- Recording mode: `Hold to talk` or `Toggle` |
| 74 | +- Hotkey selection |
| 75 | +- Post-type key |
| 76 | +- Start with Windows |
| 77 | + |
| 78 | +### STT |
| 79 | + |
| 80 | +- Primary speech-to-text provider |
| 81 | +- Optional fallback STT provider |
| 82 | +- Optional transcription language |
| 83 | +- Custom headers |
| 84 | + |
| 85 | +### LLM |
| 86 | + |
| 87 | +- Optional AI rewrite |
| 88 | +- Primary LLM provider |
| 89 | +- Optional fallback LLM provider |
| 90 | +- Editable system prompt |
| 91 | +- Custom headers |
| 92 | + |
| 93 | +### Audio |
| 94 | + |
| 95 | +- Input device selection |
| 96 | +- Silence threshold calibration |
| 97 | + |
| 98 | +## Hotkeys |
| 99 | + |
| 100 | +Available hotkey options: |
| 101 | + |
| 102 | +```text |
| 103 | +Ctrl+Alt+Space |
| 104 | +Ctrl+Shift+Space |
| 105 | +Ctrl+Alt+D |
| 106 | +Ctrl+Alt+S |
| 107 | +Ctrl+Alt+V |
| 108 | +Scroll Lock |
| 109 | +Pause |
| 110 | +``` |
| 111 | + |
| 112 | +Default: `Ctrl+Alt+Space` |
| 113 | + |
| 114 | +## For developers |
| 115 | + |
| 116 | +Run from source: |
| 117 | + |
11 | 118 | ```bash |
12 | 119 | pip install -r requirements.txt |
| 120 | +python -m src.main |
13 | 121 | ``` |
14 | 122 |
|
15 | | -Configure your STT provider (Groq, OpenAI, or any OpenAI-compatible endpoint) via the settings dialog. API keys are stored encrypted with Windows DPAPI. |
| 123 | +Run tests: |
| 124 | + |
| 125 | +```bash |
| 126 | +python -m unittest discover -s tests -v |
| 127 | +``` |
| 128 | + |
| 129 | +Build dependencies: |
| 130 | + |
| 131 | +```bash |
| 132 | +pip install -r requirements-build.txt |
| 133 | +``` |
16 | 134 |
|
17 | | -## Features |
| 135 | +Build the Windows executable: |
18 | 136 |
|
19 | | -- Push-to-talk or toggle recording modes |
20 | | -- Primary and fallback STT provider support |
21 | | -- Optional AI rewrite for spelling and grammar |
22 | | -- Persistent settings and secure key storage |
23 | | -- Microphone device selection with auto-calibration |
24 | | -- Post-type key support (Enter, Tab, Space, Backspace) |
| 137 | +```bash |
| 138 | +python -m PyInstaller --noconfirm --clean screamer.spec |
| 139 | +``` |
25 | 140 |
|
26 | 141 | ## Releases |
27 | 142 |
|
28 | | -Pushing a version tag builds the Windows executable and publishes a GitHub Release |
29 | | -automatically (see `.github/workflows/release.yml`): |
| 143 | +Pushing a version tag builds and publishes a Windows release automatically: |
30 | 144 |
|
31 | 145 | ```bash |
32 | 146 | git tag v1.0.0 |
33 | 147 | git push origin v1.0.0 |
34 | 148 | ``` |
35 | 149 |
|
36 | | -The workflow runs the test suite, builds with PyInstaller, and attaches a |
37 | | -`Screamer-v1.0.0-windows-x64.zip` (plus a `.sha256` checksum) to the release. |
38 | | -Tags with a hyphen (e.g. `v1.0.0-rc1`) are published as pre-releases. Download the |
39 | | -zip, extract it, and run `Screamer\Screamer.exe`. |
| 150 | +The release workflow: |
| 151 | + |
| 152 | +1. Installs dependencies. |
| 153 | +2. Runs the test suite. |
| 154 | +3. Builds Screamer with PyInstaller. |
| 155 | +4. Packages the app as: |
| 156 | + |
| 157 | +```text |
| 158 | +Screamer-v1.0.0-windows-x64.zip |
| 159 | +Screamer-v1.0.0-windows-x64.zip.sha256 |
| 160 | +``` |
| 161 | + |
| 162 | +Hyphenated tags like `v1.0.0-rc1` are published as pre-releases. |
| 163 | + |
| 164 | +## Platform |
| 165 | + |
| 166 | +Screamer is built for Windows. |
| 167 | + |
| 168 | +It depends on Windows-specific features including: |
| 169 | + |
| 170 | +- global hotkeys via `RegisterHotKey` |
| 171 | +- text injection via `SendInput` |
| 172 | +- tray integration |
| 173 | +- DPAPI key storage |
| 174 | +- startup registration through the current user Run key |
| 175 | + |
| 176 | +## License |
| 177 | + |
| 178 | +MIT |
0 commit comments