Sooo, I had to write meeting minutes once. Got bored after first half, so I made this tool to automate this task using Whisper and Gemini AI. No more writing boring minutes! From now on, just record the meeting and let the AI do the work.
git clone git@github.com:misobalogh/cant-be-bothered-ai.git
cd cant-be-bothered-ai
uv sync- Get free API key: https://aistudio.google.com/app/apikey
- Create
.envfile and add your key:
GEMINI_API_KEY=your_api_key_here- Get free API key: https://huggingface.co/settings/tokens
- Agree to the model terms: https://huggingface.co/pyannote/speaker-diarization-community-1
- Create
.envfile and add your key:
HF_TOKEN=your_huggingface_token_here# Basic transcription only
uv run transcribe meeting.mp3
# With AI-generated meeting minutes
uv run transcribe meeting.mp3 --summarize
# Simple bullet-point summary
uv run transcribe meeting.mp3 --summarize --simple
# Transcription with diarization (different speaker recognition)
uv run transcribe meeting.mp3 --diarizeTry uv run transcribe --help for more options!
Complete summary of commands comming soon.
Alternatively, you can use Docker to run the application without installing dependencies locally.
docker build -t cant-be-bothered -f Dockerfile .docker run --rm -it --gpus all cant-be-bothered audio_samples/audio1.aac --device cuda --summarizeuv run transcribe meeting.wav
# Output: output/meeting.txt (raw transcript)uv run transcribe meeting.mp3 --summarize
# Output: output/meeting.md (formatted minutes)uv run transcribe meeting.mp3 -s --simple
# Output: output/meeting.md (bullet points)uv run transcribe meeting.mp3 -o my_notes.txt
uv run transcribe meeting.mp3 --summarize -o minutes.md# Faster but less accurate
uv run transcribe audio.mp3 -m base
# Best quality (recommended for Slovak)
uv run transcribe audio.mp3 -m large-v3 --summarizetinybasesmallmediumlarge-v3- best quality for Slovak (~8 VRAM)
- Python 3.12+
- NVIDIA GPU with CUDA (at least 8GB VRAM recommended)
- Gemini API key (free tier available)
- Windows/Linux/macOS
On a system with NVIDIA RTX 4060 Laptop GPU (8GB VRAM), 25 minutes of audio transcribes in approximately 3 minutes using the large-v3 model.
Audio Input → Whisper STT → [Optional: Gemini AI] → Text/Markdown Output
┌─────────────────┐
│ Audio Input │ (mp3/wav)
└────────┬────────┘
│
┌────▼─────────────────────────┐
│ Audio Preprocessing │
│ (normalization, conversion) │
└────┬─────────────────────────┘
│
┌────▼──────────────────────────┐
│ Parallel Processing: │
│ ┌─────────────┬─────────────┐│
│ │ STT Module │ Diarization ││
│ │ (Whisper) │ (Pyannote) ││
│ └──────┬──────┴──────┬──────┘│
└─────────┼─────────────┼───────┘
│ │
┌─────────▼─────────────▼───────┐
│ Alignment & Merging Module │
│ (merging timestamps) │
└─────────┬─────────────────────┘
│
┌─────────▼─────────────────────┐
│ Structured Transcript │
│ (speaker + text + time) │
└─────────┬─────────────────────┘
│
┌─────────▼─────────────────────┐
│ LLM Processing Module │
│ (Gemini API) │
└─────────┬─────────────────────┘
│
┌─────────▼─────────────────────┐
│ Output Formatter │
│ (markdown export) │
└───────────────────────────────┘
- Basic Whisper transcription
- Gemini AI meeting minutes generation
- Markdown export
- Docker containerization
- Speaker diarization (Pyannote)
- Speaker name mapping
- Timestamp preservation
- Tests
- Refactoring and code cleanup
- Nice CLI interface
- Specific to our use case - output the minutes to our page repository and publish automatically
- Add more information to README - how it works, all supported command options
If you encounter errors related to something else then dependencies, try to use CPU only mode:
uv run transcribe audio.mp3 --device cpu --summarizeIf you see cudnn_ops64_9.dll errors:
uv pip install nvidia-cudnn-cu12If that doesnt work, try installing it manually from: https://developer.nvidia.com/cudnn-downloads
Then, add the bin folder to your PATH environment variable.
(Probably just ask ChatGPT for help with this one if its your first time xD)
Use smaller Whisper model:
uv run transcribe audio.mp3 -m base --summarizeMake sure your .env file contains valid API key:
GEMINI_API_KEY=AIza...Status:
MVP v4 - Transcription + Diarization + AI Minutes + Markdown export