Skip to main content

Offline meeting transcription for macOS with automatic meeting detection

Project description

Meeting Noter

Offline meeting transcription tool for macOS. Captures both your voice and meeting participants' audio, saves to MP3, and transcribes locally using Whisper.

Features

  • No virtual audio devices needed - Uses ScreenCaptureKit (like Notion, Discord)
  • Captures both sides - Your mic + system audio (meeting participants)
  • Offline transcription - Uses Whisper locally, no API calls
  • Auto-detection - Detects active meetings (Zoom, Teams, Meet, Slack)
  • Multiple interfaces - Menu bar app, desktop GUI, or CLI
  • Auto-segmentation - One file per meeting (detects silence)

Installation

Option 1: Using pipx (Recommended)

# Install pipx if you don't have it
brew install pipx
pipx ensurepath

# Install meeting-noter
cd /path/to/meeting-noter
pipx install -e .

Option 2: Using a virtual environment

cd /path/to/meeting-noter
python3 -m venv .venv
.venv/bin/pip install --upgrade pip
.venv/bin/pip install -e .

Then add an alias in your ~/.zshrc:

echo 'alias meeting-noter="/path/to/meeting-noter/.venv/bin/meeting-noter"' >> ~/.zshrc
source ~/.zshrc

Quick Start

1. One-time Setup

meeting-noter setup

This will request Screen Recording permission, which is needed to capture meeting participants' audio.

2. Launch the App

Menu Bar App (recommended):

meeting-noter menubar

Desktop GUI:

meeting-noter gui

CLI Recording:

meeting-noter start "Weekly Standup"

3. Record a Meeting

  • The menu bar app auto-detects meetings and prompts to record
  • Or manually start recording via the GUI/CLI
  • Press Ctrl+C (CLI) or click Stop to end recording

4. Transcribe

Recordings are auto-transcribed by default. Or manually:

# Transcribe the most recent recording
meeting-noter transcribe

# Transcribe a specific file
meeting-noter transcribe recording.mp3

# List all recordings
meeting-noter list

Commands

Command Description
meeting-noter setup One-time setup (Screen Recording permission)
meeting-noter menubar Launch menu bar app
meeting-noter gui Launch desktop GUI
meeting-noter start [name] Interactive CLI recording
meeting-noter daemon Start background audio capture
meeting-noter status Check daemon status
meeting-noter stop Stop the daemon
meeting-noter list List recent recordings
meeting-noter transcribe Transcribe a recording
meeting-noter devices List audio devices

Options

start

  • First argument: Meeting name (optional, auto-generates timestamp if omitted)

daemon

  • -o, --output-dir: Where to save recordings (default: ~/meetings)
  • -f, --foreground: Run in foreground instead of background
  • -n, --name: Meeting name for the recording

transcribe

  • -m, --model: Whisper model size (tiny.en, base.en, small.en, medium.en, large-v3)
  • -l, --live: Real-time transcription (experimental)
  • -o, --output-dir: Directory with recordings

list

  • -n, --limit: Number of recordings to show
  • -o, --output-dir: Directory with recordings

How It Works

┌─────────────────────────────────────┐
│         Your Meeting App            │
│      (Zoom/Teams/Meet/Slack)        │
└──────────────────┬──────────────────┘
                   │
     ┌─────────────┴─────────────┐
     ▼                           ▼
┌─────────┐               ┌─────────────┐
│   Mic   │               │ System Audio│
│(default)│               │(ScreenCaptureKit)
└────┬────┘               └──────┬──────┘
     │                           │
     └───────────┬───────────────┘
                 ▼
         ┌─────────────┐
         │Meeting Noter│
         │  (capture)  │
         └──────┬──────┘
                │
                ▼
    ~/meetings/2024-01-15_Weekly_Standup.mp3
                │
                ▼ (auto or on-demand)
         ┌─────────────┐
         │   Whisper   │ (local)
         └──────┬──────┘
                │
                ▼
    ~/meetings/2024-01-15_Weekly_Standup.txt

Permissions Required

  1. Microphone - For capturing your voice
  2. Screen Recording - For capturing system audio (meeting participants)
    • Grant in: System Settings > Privacy & Security > Screen Recording
    • This uses ScreenCaptureKit, the same API used by Notion, Discord, etc.

Troubleshooting

No system audio captured (only my voice)

Screen Recording permission not granted. Go to: System Settings > Privacy & Security > Screen Recording

Enable the toggle for Terminal (or your IDE/app).

Meeting not auto-detected

Meeting detection works for: Zoom, Microsoft Teams, Google Meet, Slack. The meeting window must be open (not minimized).

Transcription is slow

Use a smaller model:

meeting-noter transcribe --model tiny.en

Model sizes:

  • tiny.en (~75MB) - Fastest, good for most cases
  • base.en (~150MB) - Better accuracy
  • small.en (~500MB) - High accuracy
  • medium.en (~1.5GB) - Very high accuracy
  • large-v3 (~3GB) - Best accuracy

Configuration

Config file: ~/.config/meeting-noter/config.json

{
    "recordings_dir": "~/meetings",
    "transcripts_dir": "~/meetings",
    "whisper_model": "tiny.en",
    "auto_transcribe": true,
    "silence_timeout": 5,
    "capture_system_audio": true
}

Requirements

  • macOS 12.3+ (for ScreenCaptureKit)
  • Python 3.9+

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

meeting_noter-0.3.0.tar.gz (68.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

meeting_noter-0.3.0-py3-none-any.whl (75.6 kB view details)

Uploaded Python 3

File details

Details for the file meeting_noter-0.3.0.tar.gz.

File metadata

  • Download URL: meeting_noter-0.3.0.tar.gz
  • Upload date:
  • Size: 68.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for meeting_noter-0.3.0.tar.gz
Algorithm Hash digest
SHA256 4045f973f62bc5d8a1f1d3afab8d3686eb139a5271b95a4533b30e79b72448ea
MD5 123d7c8d3caf342efa218a89a597e871
BLAKE2b-256 fbbec9a0ceec0026f10366124c26d9277f8b0cafdd661bc89dce1ba479ae5768

See more details on using hashes here.

File details

Details for the file meeting_noter-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: meeting_noter-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 75.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for meeting_noter-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8a86a312c4f060e97feeda3f85a48ab624a2c669da900159f8587dde7764bad8
MD5 3a8b5c20302ef6959d46a721d52ac67e
BLAKE2b-256 83d8dc279aa82e6b41093531b89947a8a5f28f20f18a10a0141bd81c342d7670

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page