Windows desktop audio transcription widget — stay present, capture everything.
Built for meetings, calls, and conversations you don't want to forget.
Features • Install • Quick Start • How It Works • Configuration • Development
MeetAndRead is a compact, always-on-top desktop widget that records and transcribes audio in real time using Whisper (via pywhispercpp). It captures microphone input and Windows system audio (WASAPI loopback), transcribes speech live, and produces formatted Markdown transcripts with speaker identification.
The widget sits on your desktop like a record button — click to start, click to stop. A live closed-captioning overlay shows what's being said as it happens. When you stop recording, a stronger model runs post-processing for higher accuracy, and the final transcript is saved to disk.
- Microphone input — capture your voice via any recording device
- System audio — WASAPI loopback captures what others are saying (Windows 11)
- Dual-source — record both simultaneously for complete coverage
- Live closed captions — CC-style overlay shows speech as it happens
- Whisper models — choose tiny, base, or small for real-time; base through large for post-processing
- Confidence coloring — low-confidence words highlighted so you can spot gaps
- Phrase detection — 3-second silence detection for natural turn-taking
- Voice signatures — automatic speaker embedding and matching via sherpa-onnx
- Speaker diarization — identify who said what in multi-person conversations
- Persistent signatures — recognized speakers remembered across recordings
- Aetheric Glass design — translucent, always-on-top floating widget
- Drag & dock — move anywhere on screen, snaps to desktop edges
- Resizable panels — edge-drag resize for Settings and CC panels with proper cursors on all edges
- Scrollable settings — each settings tab scrolls independently for overflow safety
- System tray — minimize to tray, runs quietly in the background
- Audio source lobes — toggle mic and system audio with overlapping buttons
- Model selection — choose real-time and post-process models independently
- Benchmark history — see WER and speed for each model on your hardware
- Recording management — browse, review, rename, and delete past recordings
- Re-transcribe — re-transcribe with a stronger model and compare results
- Startup cleanup — orphaned files from prior sessions cleaned automatically on launch
- Portable build — PyInstaller onedir, no Python needed to run
- CI/CD — automated testing and GitHub Releases on tag push
- Resource monitoring — live CPU/RAM tracking with threshold warnings
Download the latest zip from GitHub Releases:
- Download
meetandread-v0.16.1.zip - Extract anywhere
- Run
meetandread.exe
No Python installation required.
# Clone the repo
git clone https://github.com/NachoTek/meetandread.git
cd meetandread
# Install with dev dependencies
pip install -e ".[dev]"
# Run
python -m meetandread.mainRequirements: Python 3.10+, Windows 11
- Launch MeetAndRead — the widget appears on your desktop
- Select audio sources — click the mic and/or system audio lobes around the record button
- Click the record button — recording starts, live transcription appears in the CC overlay
- Click again to stop — post-processing runs with a stronger model
- Review — open the Settings panel → Library tab to browse transcripts
Your recordings and transcripts are saved in your Documents folder under MeetAndRead/.
MeetAndRead uses a hybrid transcription architecture:
┌─────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Audio Source │────▶│ Real-Time Engine │────▶│ CC Overlay │
│ (mic+system) │ │ (tiny/base Whisper)│ │ (live display) │
└─────────────┘ └──────────────────┘ └─────────────────┘
│
audio saved to disk
│
▼
┌──────────────────┐ ┌─────────────────┐
│ Post-Processing │────▶│ Markdown │
│ (base/small/med) │ │ Transcript │
└──────────────────┘ └─────────────────┘
│
▼
┌──────────────────┐
│ Speaker │
│ Diarization │
│ (sherpa-onnx) │
└──────────────────┘
- Real-time — A smaller Whisper model transcribes audio as it's captured, updating the CC overlay every ~2 seconds with accumulated context
- Post-processing — When recording stops, a stronger model re-transcribes the full audio for higher accuracy
- Speaker diarization — sherpa-onnx segments the audio by speaker and matches against stored voice signatures
Settings are managed through the Settings panel (click the gear lobe on the widget) and persisted in AppData/meetandread/settings.json.
| Setting | Default | Description |
|---|---|---|
| Real-time model | tiny |
Whisper model for live transcription |
| Post-process model | base |
Whisper model for final transcript |
| Enable post-processing | true |
Run stronger model after recording |
| Speaker diarization | true |
Identify speakers in recordings |
| Confidence threshold | 0.7 |
Below this, words are highlighted |
src/meetandread/
├── main.py # Application entry point
├── audio/
│ ├── capture/ # Audio source backends (WASAPI, sounddevice)
│ ├── storage/ # PCM buffering, WAV finalization
│ └── session.py # Recording session coordinator
├── config/ # Settings models and persistence
├── hardware/ # Hardware detection and model recommendations
├── performance/ # Resource monitoring, WER benchmarking
├── recording/ # Recording controller (UI-facing API)
├── speaker/ # Speaker diarization and voice signatures
├── transcription/ # Whisper engine, streaming pipeline, transcript store
└── widgets/ # PyQt6 UI (widget, panels, theme, tray icon)
# Install dev dependencies
pip install -e ".[dev]"MeetAndRead is a Windows app — its audio stack (sounddevice/PortAudio, WASAPI loopback via pyaudiowpatch) targets Windows native binaries that a Linux/WSL process cannot load. The suite therefore runs in two layers (see ADR 0001):
| Layer | Command | What it covers |
|---|---|---|
| Pure logic | make test |
Footer parsing, state machines, UI helpers — no native deps. Runs under your shell's python3. |
| Native / integration | make test-windows |
The authoritative full pass, incl. real audio + CLI subprocess tests. Runs under the Windows venv (.venv/Scripts/python.exe) via WSL interop. |
On WSL, make test is the fast feedback loop; make test-windows is the gate that matches production. windows-marked tests auto-skip off-Windows, so the logic layer stays green without the native libs. More targets: make test-native (Windows-native subset only), make test-unit (logic layer, verbose). If make isn't installed, run the pytest commands directly, e.g. .venv/Scripts/python.exe -m pytest.
A versioned pre-push hook (.githooks/pre-push) runs the full suite under the Windows venv before allowing a push. Activate it once per clone:
git config core.hooksPath .githooksOverride the interpreter with WIN_PY=.... Use git push --no-verify only for content-free pushes (e.g. branch deletions) — never to paper over a real test failure.
# Build portable executable
pip install pyinstaller
pyinstaller meetandread.spec --noconfirmBefore pushing a release tag, validate the build locally:
# Quick build + validation (Windows)
build-and-validate.bat
# Or manually
pyinstaller meetandread.spec --noconfirm
python validate_build.pyThe validation script checks:
- All required DLLs are bundled (pywhispercpp, sherpa-onnx, PortAudio, MSVC runtimes)
- Python modules can import from the built exe
- Assets (icons, test data) are included
- Executable launches without errors
If validation passes, create the release:
git tag vX.Y.Z
git push origin vX.Y.ZSee docs/RELEASE-CHECKLIST.md for full release process.
| Component | Technology |
|---|---|
| UI Framework | PyQt6 |
| Transcription | whisper.cpp (via pywhispercpp) |
| Speaker ID | sherpa-onnx |
| System Audio | WASAPI loopback (pyaudiowpatch) |
| Microphone | sounddevice |
| Audio Processing | numpy, soxr |
| Build | PyInstaller |
| CI/CD | GitHub Actions |
This project is licensed under the GNU General Public License v3.0. See the LICENSE file for details.
Built by NachoTek

