Skip to content

Latest commit

 

History

550 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MeetAndRead

Zero information loss during conversations

Windows desktop audio transcription widget — stay present, capture everything.
Built for meetings, calls, and conversations you don't want to forget.

Platform Python License Version

FeaturesInstallQuick StartHow It WorksConfigurationDevelopment


What is MeetAndRead?

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.

MeetAndRead Widget


Features

🎙️ Recording

  • 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

📝 Real-Time Transcription

  • 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

🔊 Speaker Identification

  • 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

🎛️ Polished Desktop Widget

  • 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

⚙️ Settings & Management

  • 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

🏗️ Production Ready

  • 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

Install

Pre-built Release (Recommended)

Download the latest zip from GitHub Releases:

  1. Download meetandread-v0.16.1.zip
  2. Extract anywhere
  3. Run meetandread.exe

No Python installation required.

From Source

# 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.main

Requirements: Python 3.10+, Windows 11


Quick Start

  1. Launch MeetAndRead — the widget appears on your desktop
  2. Select audio sources — click the mic and/or system audio lobes around the record button
  3. Click the record button — recording starts, live transcription appears in the CC overlay
  4. Click again to stop — post-processing runs with a stronger model
  5. Review — open the Settings panel → Library tab to browse transcripts

Your recordings and transcripts are saved in your Documents folder under MeetAndRead/.


How It Works

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)     │
                    └──────────────────┘
  1. Real-time — A smaller Whisper model transcribes audio as it's captured, updating the CC overlay every ~2 seconds with accumulated context
  2. Post-processing — When recording stops, a stronger model re-transcribes the full audio for higher accuracy
  3. Speaker diarization — sherpa-onnx segments the audio by speaker and matches against stored voice signatures

Configuration

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

Project Structure

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)

Development

# Install dev dependencies
pip install -e ".[dev]"

Running tests

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.

Pre-push hook

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 .githooks

Override 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.

Building

# Build portable executable
pip install pyinstaller
pyinstaller meetandread.spec --noconfirm

Building Releases

Before 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.py

The 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.Z

See docs/RELEASE-CHECKLIST.md for full release process.

Tech Stack

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

License

This project is licensed under the GNU General Public License v3.0. See the LICENSE file for details.


NachoTek
Built by NachoTek

# v0.19.1 rebuild

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages