Windows desktop app that records system audio and/or microphone input and transcribes it in real-time using OpenAI's open-source Whisper model running locally.
No API calls, no cloud services -- everything runs on your machine.
- System audio capture -- record what your speakers play (YouTube, Teams, podcasts, etc.) via WASAPI loopback
- Microphone capture -- record from your mic, or capture both sources together
- Speaker-source labels -- transcripts mark every switch between Remote (system audio) and Local (microphone) speech with a bold label, so conversations read like a dialogue
- Real-time transcription -- text appears in a live view window as you record
- Local AI -- uses faster-whisper (CTranslate2), no internet required after model download
- GPU + CPU -- auto-detects NVIDIA GPU; works on CPU with INT8 quantization
- Markdown output -- date-stamped
.mdtranscripts saved to your chosen directory - System tray app -- runs quietly in the tray, right-click to start/stop recording
- First-run wizard -- detects hardware, downloads the right model, configures everything
- Windows installer -- appears in Add/Remove Programs, Start Menu shortcut, clean uninstall
# Clone the repo
git clone https://github.com/parkscloud/Hearsay.git
cd Hearsay
# Install dependencies
pip install -r requirements.txt
# Run
python -m hearsayOn first launch, the setup wizard walks you through:
- Hardware detection (GPU vs CPU)
- Audio source selection
- Output directory
- Model download
After setup, Hearsay lives in your system tray. Right-click the icon to start recording.
Download the latest installer from the Releases page and run HearsaySetup.exe. The app appears in your Start Menu and Add/Remove Programs.
HearsaySetup.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART
Installs to C:\Program Files\Hearsay for all users. Hearsay starts automatically at login. To skip auto-start:
HearsaySetup.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /TASKS=""
Uninstall silently:
"C:\Program Files\Hearsay\unins000.exe" /VERYSILENT
- Right-click the tray icon
- Choose Start Recording > System Audio, Microphone, or Both
- Audio is transcribed in real-time -- open Live Transcript to watch
- Stop Recording when done -- a timestamped
.mdfile is saved to your output directory
In Both mode each source is transcribed separately and labeled (Remote for system audio, Local for your mic). Headphones give the cleanest separation; on speakers, Hearsay automatically filters the microphone's echo of remote speech.
| Setup | Recommended Model | Speed |
|---|---|---|
| NVIDIA GPU (6+ GB VRAM) | turbo (float16) |
~8x real-time |
| NVIDIA GPU (4 GB VRAM) | small.en (float16) |
~4x real-time |
| CPU only | small.en (int8) |
~1x real-time |
A 1-hour recording transcribes in ~7 min on GPU or ~60 min on CPU.
src/hearsay/
├── __init__.py # Version string
├── __main__.py # Entry point
├── app.py # Application orchestrator
├── config.py # AppConfig + ConfigManager (JSON in %APPDATA%)
├── constants.py # App name, model table, defaults
├── audio/
│ ├── devices.py # Enumerate loopback + mic devices
│ ├── recorder.py # AudioRecorder thread
│ └── resampler.py # Resample to 16kHz mono float32
├── transcription/
│ ├── gpu_detect.py # Detect CUDA, recommend model
│ ├── model_manager.py # Download and cache Whisper models
│ ├── engine.py # TranscriptionEngine (faster-whisper)
│ └── pipeline.py # TranscriptionPipeline thread
├── output/
│ ├── formatter.py # Timestamp formatting
│ └── markdown_writer.py # Write .md transcripts
├── ui/
│ ├── tray.py # System tray icon (pystray)
│ ├── wizard.py # First-run setup wizard
│ ├── live_view.py # Live transcript window
│ ├── about_window.py # About dialog
│ ├── settings_window.py # Settings editor
│ ├── window_icon.py # Title-bar icon helper (Hearsay logo)
│ ├── icons.py # Programmatic icon generation
│ └── theme.py # customtkinter theme
└── utils/
├── paths.py # %APPDATA%\Hearsay directories
├── logging_setup.py # File + console logging
└── threading_utils.py # StoppableThread, safe_after
- Python 3.11+ (64-bit) -- the installer packages x64-only builds
- Project dependencies:
pip install -r requirements.txt - PyInstaller:
pip install pyinstaller - Inno Setup 6+:
winget install JRSoftware.InnoSetup
# 1. Bundle the app with PyInstaller (output in dist\Hearsay\)
build.bat
# 2. Compile the Windows installer (winget does not add ISCC to PATH)
"C:\Program Files (x86)\Inno Setup 6\ISCC.exe" installer.issThe installer is written to installer_output\HearsaySetup.exe.
The PyInstaller bundle is defined by Hearsay.spec; build.bat is a thin wrapper around it. Edit the spec to change bundled data, hidden imports, or the icon.
See RELEASING.md for instructions on creating GitHub releases with the installer attached. This is a reference for the author and LLM when updating the application.
- Python 3.11+
- faster-whisper -- CTranslate2-based Whisper inference
- PyAudioWPatch -- WASAPI loopback recording
- sounddevice -- Microphone capture
- customtkinter -- Modern UI
- pystray + Pillow -- System tray
- PyInstaller + Inno Setup -- Build and install
Robert Parks
raparks.com
MIT -- free to use, modify, and distribute for any purpose (personal or commercial). See LICENSE for full text.