Voice-to-text dictation for Windows. Hold a key to record, release to transcribe and paste.
This is a Python port of the macOS FreeFlow app, providing the same voice-to-text pipeline on Windows with additional features.
Download FreeFlowSetup.exe from the Releases page.
- Double-click
FreeFlowSetup.exe - If Windows SmartScreen appears, click More info > Run anyway (the app is open-source but not yet code-signed)
- Follow the installer prompts:
- Choose an install location (default:
C:\Program Files\FreeFlow) - Optionally check Create a desktop shortcut
- Optionally check Launch FreeFlow when Windows starts
- Choose an install location (default:
- Click Install, then Finish
- Go to console.groq.com/keys
- Create a free account if you don't have one
- Click Create API Key and copy it
- FreeFlow launches automatically after install (or open from Start Menu / desktop shortcut)
- A UAC prompt will appear — click Yes (required for global hotkey capture)
- You'll hear a ready chime and see a tray notification confirming the hotkey is active
- The setup wizard walks you through:
- API Key — paste your Groq API key
- Push-to-Talk Key — choose F6, Right Ctrl, or Scroll Lock (default: F6)
- Microphone — select your preferred microphone
- Custom Vocabulary — add names or terms you use often (optional)
- Click Get Started
- Look for the FreeFlow microphone icon in your system tray (bottom-right of taskbar)
- Hold your push-to-talk key and speak
- Release the key — a preview window shows your transcription
- Text is auto-pasted at your cursor after a short countdown (or click to paste immediately)
- Right-click the tray icon for Settings or Quit
Use Settings > Apps > FreeFlow > Uninstall or run the uninstaller from the Start Menu. The uninstaller will ask if you want to remove your settings and history as well.
- Python 3.10+
- Windows 10/11
- A free Groq API key
cd windows
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
python run.pyOr double-click start.bat — it creates the venv and installs dependencies automatically.
- Push-to-talk recording with configurable hotkey (F6, Right Ctrl, or Scroll Lock)
- Context-aware transcription — captures active window and screen content for accurate spelling
- Tone adaptation — adjusts writing style based on the active application
- Transcription preview — review before pasting, with auto-paste countdown
- Personal dictionary — auto-learns corrections and supports voice snippets
- Sound effects — audio cues for recording start, stop, completion, and errors
- Single instance — prevents duplicate tray icons with a helpful notification
- Recording overlay — non-focusable, click-through visual feedback during recording
Settings are stored at %APPDATA%\FreeFlow\settings.json.
| Setting | Options | Default |
|---|---|---|
| Push-to-Talk Key | F6, Right Ctrl, Scroll Lock | F6 |
| Microphone | System Default or specific device | System Default |
| Custom Vocabulary | Comma/newline-separated terms | (empty) |
Access settings via right-click on the system tray icon > Settings.
- Python 3.10+
- Inno Setup 6+ (for building the installer)
cd windows
build.batThis will:
- Install PyInstaller and app dependencies
- Generate the app icon (
resources/icon.ico) - Clean previous build artifacts
- Build
dist\FreeFlow\FreeFlow.exevia PyInstaller - Build
dist\FreeFlowSetup.exevia Inno Setup (if installed)
cd windows
pip install pyinstaller
pip install -r requirements.txt
python build_icon.py
pyinstaller build.spec --noconfirm
iscc installer.issfreeflow/
main.py # System tray + pipeline orchestration
config.py # JSON settings (%APPDATA%\FreeFlow)
models.py # Data classes (HotkeyOption, PipelineHistoryItem)
hotkey_manager.py # Global push-to-talk (keyboard library)
audio_recorder.py # Recording (sounddevice + soundfile)
transcription_service.py # Groq Whisper API
post_processing_service.py # Groq LLM post-processing
context_service.py # Window info + screenshot + LLM inference
tone_detector.py # Per-app writing tone detection
personal_dictionary.py # Auto-learn vocabulary + voice snippets
text_output.py # Clipboard + Ctrl+V paste
recording_overlay.py # Non-focusable recording feedback overlay
transcription_preview.py # Preview with auto-paste countdown
sound_effects.py # Programmatic audio cues
history_store.py # SQLite pipeline history
tray_icons.py # PIL-generated system tray icons
setup_wizard.py # First-run tkinter wizard
settings_window.py # Tkinter settings UI
| Issue | Fix |
|---|---|
| UAC prompt on every launch | Expected — the keyboard library needs admin for global hotkeys |
| SmartScreen blocks the installer | Click More info > Run anyway |
| Hotkey doesn't work | Make sure you clicked Yes on the UAC prompt |
| "FreeFlow is already running" dialog | Close the existing instance from the tray icon first |
| No sound devices listed | Check that your microphone is connected and enabled in Windows Sound settings |
| Transcription is slow or fails | Verify your Groq API key in Settings and check your internet connection |
| Multiple tray icons | Restart the app — the single-instance guard now prevents this |