Skip to content

zoom-out-agent is an open source meeting transcriber and summarizer that uses LLM to record meetings in a smart way

License

Notifications You must be signed in to change notification settings

manojag115/zoom-out-agent

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Meeting Transcriber 🎙️

Record, transcribe, and summarize meetings with complete privacy. Everything runs locally on your machine.

A macOS CLI tool that captures system audio, transcribes it using AI (Whisper), and generates intelligent summaries. Perfect for Zoom calls, podcasts, or any audio content.

Features

  • 🎧 Real-time Audio Recording - Captures system audio via BlackHole virtual audio device
  • 🤖 AI Transcription - Whisper speech-to-text (100% local, offline)
  • 📝 AI Summaries - BART transformer-based abstractive summarization
  • 💬 Q&A with Meetings - Ask questions using semantic search (sentence-transformers)
  • 🔍 Search & Browse - Find meetings by keywords or view complete history
  • 🔒 100% Private - No data ever leaves your computer
  • 💾 Local Storage - Full control over your data

Prerequisites

macOS only. You need these installed before proceeding:

  1. Python 3.8+

    brew install python
  2. BlackHole (virtual audio driver)

    brew install blackhole-2ch

    Or download from: https://existential.audio/blackhole/

  3. System libraries (for audio processing)

    brew install portaudio ffmpeg

Installation

Step 1: Clone and Setup Environment

# Clone this repository
git clone <repository-url>
cd zoom-out-agent

# Create virtual environment (recommended)
python3 -m venv venv
source venv/bin/activate

Step 2: Install Python Package

For Apple Silicon (M1/M2/M3 Macs):

CFLAGS="-I/opt/homebrew/include" LDFLAGS="-L/opt/homebrew/lib" pip install -e .

For Intel Macs:

pip install -e .

Step 3: Run Setup

zoom-out setup

This will:

  • ✅ Verify BlackHole installation
  • ✅ Download Whisper model (~150MB)
  • ✅ Download BART summarization model (~1.6GB, first run only)
  • ✅ Download sentence-transformers model (~90MB)
  • ✅ Create data directories

First-time setup takes 2-5 minutes to download models. Subsequent runs are instant.


Audio Configuration

To hear audio while recording, you need to create a Multi-Output Device:

  1. Open Audio MIDI Setup (Applications → Utilities → Audio MIDI Setup)
  2. Click the + button → Create Multi-Output Device
  3. Check both:
    • ✅ BlackHole 2ch
    • ✅ Your speakers (e.g., "MacBook Pro Speakers")
  4. Right-click the Multi-Output Device → Use This Device For Sound Output

Now system audio plays through your speakers AND gets captured for transcription.


Usage

Recording a Meeting

Basic usage:

zoom-out record

The tool will:

  1. Start recording system audio
  2. Show real-time transcription
  3. Wait for you to press Ctrl+C to stop
  4. Generate and save a summary

With options:

# Add a custom title
zoom-out record --title "Sprint Planning Meeting"

# Use a better model (slower but more accurate)
zoom-out record --model small

# Limit recording duration (in seconds)
zoom-out record --duration 600

Available Whisper models: tiny, base (default), small, medium, large


Example Output

Here's what you'll see when recording a meeting:

zoom-out record --title 'My test zoom meeting 7'
Initializing meeting transcriber...
2025-12-21 14:27:10,864 - meeting_transcriber.transcriber - INFO - Loading Whisper model: base
2025-12-21 14:27:11,214 - meeting_transcriber.transcriber - INFO - Whisper model loaded successfully
2025-12-21 14:27:13,568 - meeting_transcriber.summarizer - INFO - Loading transformer summarization model (first time may take a few minutes)...
Device set to use cpu
2025-12-21 14:27:14,563 - meeting_transcriber.summarizer - INFO - Transformer summarization ready

🎙️  Recording from BlackHole 2ch...
Press Ctrl+C to stop recording

2025-12-21 14:27:14,564 - meeting_transcriber.audio_capture - INFO - Found device: BlackHole 2ch at index 1
2025-12-21 14:27:14,622 - meeting_transcriber.audio_capture - INFO - Started recording audio
2025-12-21 14:27:14,623 - meeting_transcriber.transcriber - INFO - Starting real-time transcription
2025-12-21 14:27:44,596 - meeting_transcriber.transcriber - INFO - Transcribing audio file: /var/folders/.../tmp.wav
📝  Let's kick off. I wanted to start out with some reminders. First, we have a book club 
    coming up on inspired in four weeks on August 7th. I just reread it myself...

📝  Yeah, also believe to be important. So it's nice to have another voice explaining all 
    of that. So please do read that...

^C
Stopping recording...

📊 Generating summary...

============================================================
Meeting ID: 20251221_142934
============================================================

📋 Summary:
The CEO of Salesforce.com has a book club coming up on inspired in four weeks on August 
7th. The book is highly aligned with how I think about product management and does a good 
job of explaining why some of these things are important. I want to ensure good will with 
that team and follow up promptly with meetings with these customers. Third reminder, we've 
got a little engagement survey. I'm going to run this once a month in Q3.

🔑 Key Points:
  1. The CEO of a tech company held a meeting with his employees on Tuesday
  2. "I wanted to start out with some reminders. First we have a book club coming up..."
  3. "I want to ensure good will with that team and follow up promptly with meetings..."
  4. Book club meeting scheduled for August 7th on "Inspired"
  5. Engagement survey to be run monthly in Q3

✅ Meeting saved successfully!
   Transcript: 1493 characters
   Summary: 433 characters

What happens:

  1. Models load (Whisper + BART transformer)
  2. Real-time transcription shows as audio is captured
  3. Press Ctrl+C to stop
  4. AI generates intelligent summary and key points
  5. Everything saved locally

View a specific meeting:

zoom-out show 20251221_142934

================================================================================
Meeting: My test zoom meeting 7
Date: 2025-12-21T14:29:34.129675
================================================================================

📋 Summary:
The CEO of Salesforce.com has a book club coming up on inspired in four weeks on August 7th. The book is highly aligned with how. I think about product management and does a good job of explaining why some of these things are important. I want to ensure good will with that team and follow up promptly with meetings with these customers. Third reminder, we've got a little engagement survey. I'm going to run this once a month in Q3.

🔑 Key Points:
  1. The CEO of a tech company held a meeting with his employees on Tuesday. He asked them to take a moment to remind them of some of the things they need to do to succeed.
  2. "I wanted to start out with some reminders. First
  3. we have a book club coming up on inspired in four weeks on August 7th" "I want to ensure good will with that team and follow up promptly with meetings with these customers" "Please do follow up on that"
  4. we have a book club coming up on inspired in four weeks on August 7th. I just reread it myself. It's a it's a good read
  5. " she said. "It's highly aligned with how. I think about product management"

Viewing Meetings

List all recordings:

zoom-out list

📚 Stored Meetings:
================================================================================

ID: 20251220_203455
Title: My test youtube video 4
Date: 2025-12-20 20:34:55
--------------------------------------------------------------------------------

ID: 20251220_204352
Title: My test youtube video 5
Date: 2025-12-20 20:43:52
--------------------------------------------------------------------------------

View summary:

zoom-out show 20251220_143022

View full transcript:

zoom-out show 20251220_143022 --full

Asking Questions

Use natural language to query meeting content:

# Check if you were mentioned
zoom-out ask 20251220_143022 "Was my name mentioned?"

# Find decisions
zoom-out ask 20251220_143022 "What did we decide about the budget?"

# Extract action items
zoom-out ask 20251220_143022 "What are my action items?"

# Find who said something
zoom-out ask 20251220_143022 "Who volunteered to lead the project?"

How it works:

  • Uses local AI (sentence-transformers) for semantic search
  • Finds relevant segments even without exact keyword matches
  • Shows similarity scores (0.0 to 1.0)
  • Fallback to keyword search if semantic search finds nothing

Searching Meetings

Search by keyword:

zoom-out search "budget"
zoom-out search "deadline"

Delete a meeting:

zoom-out delete 20251220_143022

List audio devices:

zoom-out devices

Use this to verify BlackHole is installed and available.


Complete Examples

Example 1: Record a Zoom Call

# 1. Start Zoom and join meeting
# 2. Start recording
zoom-out record --title "Client Kickoff Call"

# 3. During the call, you'll see real-time transcription
# 4. When call ends, press Ctrl+C

# 5. View the summary
zoom-out list
zoom-out show <meeting-id>

# 6. Ask specific questions
zoom-out ask <meeting-id> "What are the deliverables?"
zoom-out ask <meeting-id> "When is the next meeting?"

Example 2: Transcribe a Podcast

# 1. Play podcast in browser/app
# 2. Record with a descriptive title
zoom-out record --title "Tim Ferriss Podcast Ep 500"

# 3. Let it run, press Ctrl+C when done
# 4. Search for specific topics later
zoom-out search "productivity tips"

Example 3: Review Old Meetings

# Find all meetings about "performance"
zoom-out search "performance"

# Ask questions across meetings
zoom-out ask 20251215_100000 "What metrics did we discuss?"
zoom-out ask 20251218_140000 "What was the performance improvement?"

Data & Privacy

100% Local Processing

No internet required (except for initial model downloads):

  • ✅ Whisper transcription runs on your CPU/GPU
  • ✅ Summarization uses local AI (BART transformers)
  • ✅ Q&A uses local AI model (sentence-transformers)
  • ✅ No cloud APIs, no data transmission
  • ✅ Perfect for confidential meetings

Where Your Data Lives

zoom-out-agent/
└── data/
    ├── transcripts/           # .txt files with full transcripts
    │   └── 20251220_143022.txt
    ├── summaries/             # .json files with summaries
    │   └── 20251220_143022.json
    └── index.json             # Meeting index

You have complete control:

  • All files are plain text (JSON and TXT)
  • Easy to back up, search, or delete
  • No proprietary formats
  • No telemetry or tracking

Security Best Practices

  • 🔐 Keep ./data/ directory permissions restrictive
  • 🗑️ Delete old recordings you no longer need
  • 📝 Document which meetings you've recorded
  • ⚖️ Follow your organization's data retention policies

⚠️ Legal & Ethical Notice

Recording Consent Requirements

YOU MUST OBTAIN CONSENT BEFORE RECORDING.

  • 📋 Always get permission from all participants before recording
  • ⚖️ Know your local laws:
    • One-party consent: You can record if you're part of the conversation (most US states)
    • Two-party/all-party consent: Everyone must agree (California, Florida, etc.)
    • International: Laws vary by country
  • 🏢 Corporate policies: Follow your company's recording rules
  • 🎓 Educational settings: Get instructor/student permission

Your Responsibilities

BY USING THIS SOFTWARE, YOU AGREE:

  • ✅ You are solely responsible for legal compliance
  • ✅ You will obtain all necessary consents
  • ✅ The authors are not liable for any misuse or legal issues
  • ✅ You will not use this for illegal or unethical purposes

When in doubt, ask for permission!


Troubleshooting

"No audio captured" or empty transcripts

Fix:

  1. Verify BlackHole is installed: zoom-out devices
  2. Check that Multi-Output Device is selected as system output
  3. Make sure audio is actually playing
  4. Try: zoom-out record --device "BlackHole 2ch"

PyAudio installation fails

Fix:

brew install portaudio
CFLAGS="-I/opt/homebrew/include" LDFLAGS="-L/opt/homebrew/lib" pip install pyaudio

"ffmpeg: command not found"

Fix:

brew install ffmpeg

Whisper is slow

Solutions:

  • Use a smaller model: zoom-out record --model tiny
  • For M1/M2/M3 Macs, Whisper can use Apple's Neural Engine
  • Consider upgrading RAM (Whisper uses 1-10GB depending on model)

Microphone permission denied

Fix:

  1. Open System SettingsPrivacy & SecurityMicrophone
  2. Enable for Terminal (or your terminal app)

Advanced Configuration

Choosing Whisper Models

Model Size RAM Speed Accuracy Use Case
tiny 75 MB ~1 GB Very Fast Low Quick drafts
base 150 MB ~1 GB Fast Good Default - Best balance
small 500 MB ~2 GB Medium Better Important meetings
medium 1.5 GB ~5 GB Slow High High accuracy needed
large 3 GB ~10 GB Very Slow Best Professional transcription

Change model:

zoom-out record --model small

Custom Data Directory

# Use a different location
zoom-out record --data-dir ~/Documents/MeetingRecordings

# All commands support --data-dir
zoom-out list --data-dir ~/Documents/MeetingRecordings

Background Recording

Create a shell script for long recordings:

#!/bin/bash
cd ~/zoom-out-agent
source venv/bin/activate
zoom-out record --title "$1" --duration 3600

Save as record-meeting.sh, make executable:

chmod +x record-meeting.sh
./record-meeting.sh "Daily Standup"

Project Structure

zoom-out-agent/
├── meeting_transcriber/          # Main package
│   ├── cli.py                    # Command-line interface
│   ├── audio_capture.py          # BlackHole audio recording
│   ├── transcriber.py            # Whisper integration
│   ├── summarizer.py             # BART transformer summarization
│   └── storage.py                # Local file management
├── data/                         # Your recordings (created on first run)
│   ├── transcripts/
│   ├── summaries/
│   └── index.json
├── requirements.txt              # Python dependencies
├── setup.py                      # Package installer
└── README.md                     # This file

Technical Details

Dependencies:

  • openai-whisper - Speech recognition (local AI model)
  • transformers + torch - BART abstractive summarization (local AI model)
  • sentence-transformers - Semantic search (local AI model)
  • pyaudio - Audio recording
  • click - CLI framework

Models downloaded on first run:

  • Whisper base model: ~150 MB
  • BART facebook/bart-large-cnn: ~1.6 GB
  • sentence-transformers all-MiniLM-L6-v2: ~90 MB

Total storage: ~1.85 GB + your recordings


Contributing

Contributions welcome! Areas for improvement:

  • Windows/Linux support
  • Web UI for browsing meetings
  • Export to PDF/Word
  • Speaker diarization (identify who said what)
  • Live meeting notes during recording
  • Integration with calendar apps

To contribute:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Submit a pull request

License

MIT License - See LICENSE file for details.


Acknowledgments


Support

Issues? Open an issue on GitHub with:

  • Your macOS version
  • Python version (python --version)
  • Error messages
  • Steps to reproduce

Questions? Check existing issues or start a discussion.


Made with ❤️ for privacy-conscious note-takers

About

zoom-out-agent is an open source meeting transcriber and summarizer that uses LLM to record meetings in a smart way

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages