Manual queue-based pipeline for transcribing voice notes and saving structured meeting minutes to Notion with markdown backups.
If you're here as a Flocode subscriber - welcome π
Never used this before? Follow these 4 steps:
- Install dependencies:
uv sync
- Install FFmpeg: Open PowerShell as Admin β
choco install ffmpeg
- Get API keys: OpenAI + Notion (required), Groq + Gemini (recommended)
- Test setup:
uv run tests/test_voice_system.py
Then drag & drop your first voice note into quick_process.bat
β¨
- π€ Manual Transcription: Groq (whisper-large-v3-turbo) and/or OpenAI Whisper with intelligent audio chunking
- π€ AI Summarization: Gemini (with OpenAI fallback) for structured meeting minutes
- π Notion Integration: Manual database entries with title and date
- π Queue Management: Add files or URLs to a processing queue
- π Desktop Notifications: Real-time feedback on processing status
- πΎ Markdown Backups: Local markdown files saved for all transcriptions
- π Secure: Environment variable configuration for all API keys
uv sync
Windows - Easy Install (Recommended):
- Open PowerShell as Administrator (Right-click β "Run as administrator")
- Install Chocolatey (if not installed):
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
- Install FFmpeg:
choco install ffmpeg
- Restart your terminal and test:
ffmpeg -version
Alternative Methods:
- Scoop:
scoop install ffmpeg
- Manual: Download from https://ffmpeg.org/download.html, extract to
C:\ffmpeg
, addC:\ffmpeg\bin
to PATH
Step 1: Copy the template
# Copy the example file to create your .env
cp .env.example .env
Step 2: Get your API keys
π Required APIs (you need at least these):
- OpenAI: Get API key from https://platform.openai.com/api-keys
- Notion: Create integration at https://www.notion.so/my-integrations
π Recommended APIs (for best performance):
- Groq: Fast transcription - https://console.groq.com/keys
- Gemini: Best summarization - https://makersuite.google.com/app/apikey
π Get Notion Database ID:
- Open your Notion database in web browser
- Copy URL from address bar
- Database ID is the 32-character string:
https://notion.so/workspace/Database-Name-1f39eccecd884ebab89eb1697c08ab10
- In this example:
1f39eccecd884ebab89eb1697c08ab10
Step 3: Update your .env
file
# Required - Get from https://platform.openai.com/api-keys
OPENAI_API_KEY=sk-proj-your_actual_openai_key_here
# Required - Create at https://www.notion.so/my-integrations
NOTION_API_KEY=ntn_your_actual_notion_key_here
NOTION_DATABASE_ID=your_32_character_database_id_here
# Recommended - Get from https://console.groq.com/keys
GROQ_API_KEY=gsk_your_groq_key_here
# Recommended - Get from https://makersuite.google.com/app/apikey
GEMINI_API_KEY=your_gemini_key_here
# Your voice notes folder (use quotes for paths with spaces)
VOICE_NOTES_FOLDER="C:\Users\YourName\Documents\Voice Notes"
# Your organization info (personalizes meeting minutes)
COMPANY_NAME="Your Company Name"
COMPANY_SHORTHAND="YCN"
π‘ Tips:
- Use quotes around paths with spaces
- Keep your
.env
file private - never commit it to git - Share the database with your Notion integration for access
Test API connections and configuration:
# Test all APIs and create a test Notion entry
uv run tests/test_voice_system.py
# Test desktop notifications
uv run tests/test_notification.py
Expected output for successful setup:
π§ͺ Voice Note Monitoring System Test Suite
==================================================
π Testing environment variables...
β
All environment variables are set
π Testing OpenAI connection...
β
OpenAI connection successful
π Testing Notion connection...
β
Notion connection successful. Database: Your Database Name
π Testing Gemini connection...
β
Gemini connection successful
π Test Results: 6/6 tests passed
π All tests passed! Your system is ready to use.
If tests fail:
- Check your
.env
file has the correct API keys - Ensure Notion database is shared with your integration
- Verify your internet connection
- Double-click
quick_process.bat
- Drag and drop your audio file into the terminal window
- Press Enter - the file processes immediately with desktop notifications
π‘ Pro Tip: Create a desktop shortcut to quick_process.bat
for one-click access:
Right-click quick_process.bat β Send to β Desktop (create shortcut)
- Double-click
select_and_process.bat
- Browse and select your audio file from the dialog
- Automatic processing starts immediately
# Start interactive mode
uv run scripts/process_voice_notes.py --interactive
# Commands in interactive mode:
# add <file_or_url> - Add file or URL to processing queue
# latest - Process latest file from voice notes folder
# select - Browse and select files to add to queue
# process - Process next item in queue
# process_all - Process all items in queue
# p - Quick process all queued items
# queue - Show current queue
# clear - Clear the queue
# quit - Exit interactive mode
# Process single file or URL immediately
uv run scripts/process_voice_notes.py audio_file.mp3
uv run scripts/process_voice_notes.py https://example.com/audio.mp3
# Add multiple files to queue and process them
uv run scripts/process_voice_notes.py file1.mp3 file2.wav
# Process all items in queue
uv run scripts/process_voice_notes.py --process-queue
The system uses a simple text-based queue (processing_queue.txt
) that persists between sessions. You can:
- Add items: Files or URLs are added to the queue
- Process items: Items are processed one by one and removed from queue upon success
- View queue: Check what's currently queued for processing
- Clear queue: Remove all items from queue
Each processed file creates:
- Markdown backup: Saved in
transcription_backups/
with timestamp - Notion entry: Added to your configured Notion database (if successful)
- Processing log: Tracks completed files to avoid reprocessing
The system provides real-time feedback via Windows notifications:
- β Success: "Meeting Minutes successfully added to Notion" with filename
- β Error: Detailed error message if processing fails
- π Batch Complete: Summary when processing multiple files
No need to watch the terminal - you'll be notified when your transcription is ready!
whisper_2.0/
βββ README.md # This file
βββ pyproject.toml # Project dependencies
βββ .env.example # Environment configuration template
βββ post_processing_prompt.txt # AI summarization instructions
βββ processing_queue.txt # Queue file (auto-created)
βββ processed_files.txt # Processed files log (auto-created)
βββ scripts/
β βββ process_voice_notes.py # Main processing script
βββ tests/
β βββ test_voice_system.py # System component tests
β βββ test_notification.py # Notification system test
βββ transcription_backups/ # Markdown backups (auto-created)
βββ temp_downloads/ # Temporary downloads (auto-created)
- MP3 (.mp3)
- M4A (.m4a)
- WAV (.wav)
- FLAC (.flac)
- OGG (.ogg)
Voice Note/URL β Queue β Whisper Transcription β AI Summarization β Markdown + Notion
β β β β β
Audio File Queue File Raw Transcript Structured Summary Local + Cloud
- Queue Management: Files/URLs are added to a persistent queue
- Audio Processing: Files are automatically chunked for optimal Whisper processing
- Transcription: OpenAI Whisper converts speech to text with high accuracy
- Summarization: Custom engineering-focused prompt creates structured meeting minutes
- Storage: Results saved as markdown backup AND to Notion with proper formatting
- Tracking: Processed files logged to prevent duplicate processing
Edit post_processing_prompt.txt
to customize the meeting minute format and focus areas.
[ERROR] FFmpeg not found! Please install FFmpeg
Solution: Install FFmpeg and add to PATH:
- Open PowerShell as Administrator (Right-click β "Run as administrator")
- Install via Chocolatey:
choco install ffmpeg
- Restart your terminal and test:
ffmpeg -version
Alternative: Download from https://ffmpeg.org, extract, add bin
folder to PATH
- Check your API keys in
.env
file - Ensure audio file exists and isn't corrupted
- Try smaller audio files first (< 10 minutes)
- Check
NOTION_API_KEY
andNOTION_DATABASE_ID
in.env
- Ensure Notion integration has access to the database
- Backup files are saved in
transcription_backups/
folder
uv run tests/test_voice_system.py
# View current queue
uv run scripts/process_voice_notes.py --show-queue
# Clear stuck queue
uv run scripts/process_voice_notes.py --clear-queue
- Ctrl+C: Clean interrupt with proper cleanup
- Close Terminal: Force stop (files still cleaned up)
- Downloaded files: Automatically cleaned up after processing
β οΈ Never commit your.env
file - it contains sensitive API keys- π Use environment variables for all secrets - all sensitive data is properly configured via
.env
- π‘οΈ Keep your
.env
file private - add it to.gitignore
- π Rotate API keys if exposed - immediately regenerate any compromised keys
- π Company information is configurable - no hardcoded company names in the codebase
- π Safe for open source - all sensitive data externalized to environment variables
MIT
π’ Visit https://flocode.substack.com/ for more engineering tools.