Local voice dictation with a floating UI, live preview, final paste-on-release, history, and a settings panel. The app is built with PyQt6 and runs fully on-device with Whisper via faster-whisper.
- Global dictation hotkey:
Ctrl+Space - Global quit hotkey:
Ctrl+Q - Floating bottom bar plus full desktop window
- Live transcription preview while you speak
- Final higher-accuracy transcription on release
- Direct paste into the last focused app
- Local history in
voiceflow_log.txt - Text cleanup:
- filler removal
- self-correction cleanup
- auto-capitalization
- voice commands
- Optional translate-to-English mode
Windows is the primary path.
- Global hotkeys use
keyboard - Text injection uses
Ctrl+V faster-whisperuses CUDA when available- One-click launcher:
start.bat - Installer:
install.bat
macOS support uses the same codebase, but not the same acceleration path.
- Global hotkeys use
pynput - Text injection uses
Cmd+V - One-click launchers:
start_mac.commandstart.command
faster-whisperruns on CPU/int8 on macOS in this project
Important: this codebase does not use CUDA on Mac.
Reason:
- PyTorch supports
mpson Apple Silicon - but this app uses
faster-whisper, which runs on CTranslate2 - CTranslate2 prebuilt GPU support is NVIDIA-only, so the practical path here is CPU on Mac
- Python 3.10+
- microphone access
- internet on first model download
- Windows 10 or 11
- Python Launcher available as
py - NVIDIA GPU recommended for best live performance
- macOS with Python 3.10+
- Accessibility permission for the terminal or app runner
- microphone permission
git clone https://github.com/nisargpatel1906/VoiceFlow-Local.git
cd VoiceFlow-LocalThat script:
- creates
venv - installs dependencies
- downloads the default Whisper model
There is no separate Mac installer script in the repo yet. Use a normal venv setup:
python3 -m venv venv
source venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
chmod +x start.command start_mac.commandIf you want the model downloaded before first launch:
python -c "import config; from faster_whisper import WhisperModel; WhisperModel(config.MODEL_SIZE, download_root='models')"start.batThis launches the app hidden in the background with the floating UI.
Use either:
./start_mac.commandor:
./start.command- Microphone access must be enabled
- If suppressed hotkeys behave inconsistently on your setup, run with appropriate permissions
You must allow:
- Accessibility
- Microphone
Without Accessibility permission:
- global hotkeys will not work correctly
- paste injection will not work correctly
Default hotkeys:
- Dictate:
Ctrl+Space - Quit app:
Ctrl+Q
These can be changed from the settings panel. When changed, the visible hotkey labels in the UI update too.
Current flow:
- Hold
Ctrl+Space - Audio is captured in streaming chunks
- Live text preview updates in the UI
- Release hotkey
- The app runs a final transcription pass on the full rolling buffer
- Cleaned text is pasted into the previously focused app
- History is saved locally if auto-save is enabled
The settings window supports:
- hotkey recording
- toggle mode
- model selection
- compute type
- language selection
- beam size
- translate-to-English toggle
- filler word cleanup
- self-correction cleanup
- auto-capitalization
- voice commands
- auto-save
- log format
- history limit
- start with Windows / start at login
- notifications
- silence threshold
- debug mode
Settings are written back to config.py.
main.py- app entrypoint and runtime orchestrationvoiceflow_ui.py- floating UI, main window, tray controllergui/settings_window.py- settings panelhotkey.py- Windows and macOS hotkey backendsstreaming_recorder.py- chunked mic capturestreaming_transcriber.py- live Whisper consumertranscriber.py- fallback/final transcription pathcleaner.py- text cleanup and chunk dedupeconfig.py- generated runtime settingsstart.bat- Windows launcherstart.command/start_mac.command- macOS launchers
The app uses local MP3 files from the repo folder:
enter.mp3- app-ready sound after startupsound.mp3- transcription complete soundquite.mp3- quit sound onCtrl+Q
Tray popup notifications are disabled by default in the current config.
- runtime log:
voiceflow.log - startup log:
voiceflow_start.log - transcription history:
voiceflow_log.txt
History entries include:
- text
- date
- time
- character count
- duration
- Windows is the best-supported runtime path
- macOS currently uses CPU/int8 for Whisper in this codebase
faster-whisperon Mac is not using MPS in this project- macOS support is code-level integrated, but final validation still depends on real Mac testing
venv\Scripts\python.exe main.py --debugsource venv/bin/activate
python main.py --debugMIT. See LICENSE.
