Real-time meeting transcription, summarization, and integration platform powered by AI.
Kontext is a self-hosted meeting assistant that captures audio from your microphone, transcribes it in real-time using OpenAI's Whisper, generates intelligent summaries with Groq's LLMs, and automatically sends them to email, Notion on request, or stores them locally.
Enable streaming: Set ENABLE_STREAMING=true in .env
- Real-time Audio Capture: WebRTC-based audio streaming from browser to backend
- ** Transcription**: Streaming transcription using faster-Whisper (CPU-friendly)
- Smart Summaries: Automatic meeting summaries with key points, decisions, and action items
- ** Email Integration**: Send meeting summaries directly to team members via email
- Notion Integration: Push summaries to Notion databases for team documentation
- ** RAG Search**: Query meeting content using semantic search with Pinecone
- Post-Meeting Chat: Ask questions about meetings after they end
- Local Storage: SQLite database keeps all data on your server
- ** Docker Ready**: One-command deployment with Docker Compose
| Component | Technology | Purpose |
|---|---|---|
| Backend | FastAPI + Uvicorn | Real-time WebSocket streaming |
| Speech-to-Text | faster-Whisper (base/medium) | CPU-efficient transcription |
| Summarization | Groq API (Llama 70B) | High-quality meeting summaries |
| Embeddings | Sentence-Transformers | Semantic search for meeting content |
| Vector DB | Pinecone | Store and query meeting embeddings |
| Frontend | Vanilla JavaScript + HTML | Lightweight, no frameworks |
| Database | SQLite | Local persistent storage |
| SMTP (Gmail) | Send summaries to team | |
| Notion API | Official Python Client | Push to shared Notion databases |
- Docker & Docker Compose
- Groq API key (free at https://console.groq.com/keys)
- (Optional) Notion API token
- (Optional) Email credentials for sending transcripts
- Clone the repository
git clone <repo-url>
cd Kontext-Agent- Create
.envfile
cp .env.example .env- Configure environment variables (edit
.env)
# Groq API (required for streaming mode)
GROQ_API_KEY=your_groq_api_key_here
# Streaming configuration
ENABLE_STREAMING=true # Set to false for local batch mode
FRAME_SIZE_MS=20 # Audio frame size in milliseconds
SUMMARY_INTERVAL_MIN=1 # Update summary every 1 minute
# Notion integration (optional)
NOTION_API_TOKEN=your_notion_token
NOTION_DATABASE_ID=your_database_id
# Email integration (optional)
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587
SENDER_EMAIL=your_email@gmail.com
SENDER_PASSWORD=your_app_password- Start the application
docker-compose up -d- Access the UI
http://localhost:8000
- Open http://localhost:8000
- Click Start Recording
- Allow microphone access when prompted
- Speak naturally - transcription happens in real-time
- See live captions with:
- π΄ Gray italic text = interim (being processed)
- β« Black bold text = final (confirmed)
- Transcripts appear in real-time (streaming mode)
- Summaries auto-update every 1 minute
- Live indicator shows when meeting is active
- Click Stop Recording
- Transcript and summary automatically saved
- Email sent (if configured)
- Notion database updated (if configured)
ENABLE_STREAMING=true
GROQ_API_KEY=your_groq_api_key_here
FRAME_SIZE_MS=20
SUMMARY_INTERVAL_MIN=1- Pros: 100x faster, real-time, low memory
- Cons: Requires API key, rate limited on free tier
- Best for: Live meetings, demos, presentations
ENABLE_STREAMING=false
GROQ_API_KEY= # Not needed
SUMMARY_INTERVAL_MIN=10- Pros: No API needed, unlimited, local processing
- Cons: 30-60s latency, high memory (2-3GB), slow startup
- Best for: Privacy-first, offline, recorded audio files
# Frame size (20ms = 320 samples at 16kHz)
FRAME_SIZE_MS=20 # Recommended: 20-40ms
FRAME_SIZE_MS=10 # Faster but more overhead
FRAME_SIZE_MS=40 # Slower but less overhead
# Summary interval
SUMMARY_INTERVAL_MIN=1 # Streaming mode
SUMMARY_INTERVAL_MIN=10 # Batch modeGROQ_API_KEY=your_key_here
ENABLE_STREAMING=true- Get free key: https://console.groq.com/keys
- Free tier: 30 requests/minute (sufficient for ~6 hours of meetings)
- No setup needed beyond API key
NOTION_API_TOKEN=your_token
NOTION_DATABASE_ID=your_database_idSMTP_SERVER=smtp.gmail.com
SMTP_PORT=587
SENDER_EMAIL=your_email@gmail.com
SENDER_PASSWORD=your_app_passwordβββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Web UI (index.html) β
β β’ Audio capture (16ms frames in streaming mode) β
β β’ Real-time transcript display β
β β’ Meeting controls β
ββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β WebSocket (AUDIO_FRAME)
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β WebSocket Handler (websocket.py) β
β β’ Streaming transcription worker β
β β’ Batch transcription worker (fallback) β
β β’ Broadcast partial/final results β
ββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
ββββββββββ΄βββββββββ
βΌ βΌ
βββββββββββ ββββββββββββ
β Groq β β Local β
β API β β Whisper β
β(Stream) β β (Batch) β
ββββββ¬βββββ ββββββ¬ββββββ
ββββββββββ¬ββββββββ
βΌ
βββββββββββββββββββββββββ
β Audio Processing β
β β’ Normalization β
β β’ Noise handling β
β β’ Format conversion β
βββββββββββββββββββββββββ
β
ββββββββββ΄βββββββββ
βΌ βΌ
βββββββββββ ββββββββββββββββ
β Database β β Summarizer β
β Storage β β (Every 1 min) β
ββββββββββββ βββββββ¬βββββββββ
βΌ
ββββββββββββββββ
β Integrations β
β β’ Email β
β β’ Notion β
β β’ Services β
ββββββββββββββββ
Speech β Browser (16ms frames) β WebSocket
β
Groq API (100-300ms) β Partial results
β
UI (real-time captions) β Database
β
Summarizer (1-min interval) β Email/Notion
## File Structure
Kontext-Agent/ βββ app/ β βββ init.py β βββ main.py # FastAPI app β βββ config.py # Configuration β βββ database.py # Database operations β βββ api/ β β βββ routes.py # HTTP endpoints β β βββ websocket.py # WebSocket handlers β βββ core/ β β βββ audio_processor.py # Audio normalization β β βββ transcriber.py # Local Whisper β β βββ rag_engine.py # RAG for summaries β β βββ summarizer.py # Summary generation β βββ services/ β β βββ streaming_transcriber.py # Groq streaming β β βββ meeting_service.py β β βββ email_service.py β β βββ notion_service.py β β βββ meeting_service.py β βββ models/ β β βββ schemas.py # Pydantic models β βββ ui/ β βββ index.html # Web UI β βββ audio_recorder.py βββ data/ β βββ meeting_transcripts/ # Stored transcripts βββ logs/ # Application logs βββ docker-compose.yml βββ Dockerfile βββ requirements.txt βββ start_server.py βββ README.md
## Contributing
Contributions welcome! Please:
1. Fork the repository
2. Create feature branch: `git checkout -b feature/amazing-feature`
3. Commit changes: `git commit -m 'Add amazing feature'`
4. Push to branch: `git push origin feature/amazing-feature`
5. Open Pull Request
- **Email**: funboy.ea@gmail.com
## Why I Built This
I attend multiple meetings daily at Payvite and other commitments. Traditional meeting assistants are expensive. I wanted:
- **Privacy**: All data stays on my server
- **Cost**: No monthly subscriptions
- **Control**: Integrate with our tools (Notion, email)
- **Simplicity**: One-click to start recording
- **Extensibility**: Add new integrations easily
Maybe it'll help you too!
---