Your meetings, transcribed live.
Your next move, surfaced mid-call -- on your own hardware.
Backchannel is a self-hosted, open-source AI meeting assistant that builds a live speaker-attributed transcript and runs AI agents that surface questions, objections, opportunities, and action items in real time. No bot joins the call: it captures audio in the browser, works with Zoom, Google Meet, Teams, or any meeting app, and keeps your recordings on your own server.
MIT licensed · runs with Docker Compose · local diarization · optional fully offline transcription
Everything a second set of ears should do
Built for sales, discovery, and client calls -- provider-flexible and centered on a transcript you can trust.
Live diarized transcription
Silero VAD and WeSpeaker ResNet152 speaker embeddings attribute every line to a speaker, with interim text streaming seconds ahead of the final transcript.
Agent-based analysis
An analyst, a fast objection handler, a synthesizer, and an opportunity specialist each run on their own trigger and push insights mid-call.
Provider-routed models
Mix Google Gemini and OpenAI models per agent, or transcribe fully offline with local ONNX Whisper and Parakeet -- no API key needed for transcription.
Dual-track audio
Microphone and tab/system audio are captured as separate tracks, so remote participants get their own speaker identities.
Import and re-transcribe
Bring in existing transcripts or audio files, and replay any recorded call through a different transcription model later.
Exports and chat
Transcript, insight, and summary exports -- plus cross-session chat that answers questions over your past meetings.
Running in one copy-paste
Docker is the only hard requirement. The default transcription and analysis models use Google Gemini -- add your key in the app after it starts, or put it in .env first.
git clone https://github.com/talberthoule/backchannel.git
cd backchannel
cp .env.example .env # optionally set GEMINI_API_KEY here
docker compose up --build
# app at http://localhost:3000 -- add API keys any time in Admin -> API Keys
The first start builds images and downloads models, so give it a few minutes. Prefer zero API keys? Switch batch transcription to a local ONNX Whisper or Parakeet model: transcription and diarization run fully offline, and only the insight agents still need a Gemini or OpenAI key.
Have an NVIDIA GPU? Add the override for GPU diarization:
docker compose -f docker-compose.yml -f docker-compose.gpu.yml up -d --build
From spoken word to actionable insight
The live call path, end to end.
- Capture. The browser records mic (and optionally tab) audio and streams PCM16 16 kHz chunks over a WebSocket.
- Diarize. Voice activity detection cuts speech into segments; speaker embeddings assign each segment to a voice.
- Transcribe. Each segment is transcribed by Gemini Flash or a local ONNX model, filtered, and saved in speaking order.
- Analyze. Text agents read the growing transcript on their own schedules and propose questions, objections, opportunities, and action items.
- Deliver. Deduplicated insights stream to the call view instantly; a synthesizer refines them as the conversation evolves.
Three services, two AI paths, one transcript
A React SPA, a FastAPI backend, and PostgreSQL -- with a low-latency interim path for feedback and a durable batch path for the record.
A crew, not a monolith
Each agent has one job, its own trigger, and a configurable model and prompt.
| Agent | Trigger | Purpose |
|---|---|---|
audio_gateway |
Continuous audio stream | Listens silently via Gemini Live or OpenAI Realtime and streams interim transcription |
consolidated_analyst |
Every 15s | Produces questions, observations, opportunities, and action items in one LLM pass |
objection_handler |
Every 5s over the last ~90s | Scans for objections and pairs an immediate response with the strategic angle |
synthesizer |
New-insight events | Reconciles and enriches insights, detects answered questions, elevates item types |
opportunity_specialist |
New-opportunity events | Matches opportunities against your offerings and knowledge catalog |
Privacy, data flow, and what it takes to run
The questions that decide whether you self-host, answered plainly.
Is Backchannel free?
Yes. Backchannel is open source under the MIT License, with no hosted tier, no seat pricing, and no feature paywall. Your only costs are your own hardware and any Gemini or OpenAI API usage you configure.
Does my meeting audio leave my machine?
Only where you route it. Voice activity detection and speaker diarization always run locally. By default, transcription and analysis use the Gemini API -- you can route agents to OpenAI instead, or transcribe fully offline with local ONNX Whisper or Parakeet models. Recordings and transcripts stay on your server.
Does it work with Zoom, Google Meet, and Teams?
Yes -- with all of them, because it never joins the call. Backchannel captures your microphone and, optionally, tab or system audio directly in the browser, so there is no bot participant and no per-platform integration to install.
How is it different from Otter.ai and other cloud note-takers?
Cloud note-takers such as Otter.ai, Fireflies.ai, and Granola send your meetings to their cloud and deliver most of their value after the call. Backchannel is self-hosted and works during the meeting: agents push questions, objection responses, opportunities, and action items while you can still act on them.
Do I need a GPU?
No. CPU-only Docker Compose is the default. An NVIDIA GPU can accelerate diarization via a compose override, and AMD GPUs on Windows are supported with a native backend setup script.
What do I need to run it?
Docker with the Compose plugin, plus a Gemini API key for the default transcription and analysis models. An OpenAI key is optional for OpenAI-routed agents, and local ONNX transcription needs no key at all.
Go deeper
Full technical documentation, searchable and readable.
Hear more from your next meeting
Self-hosted, open source, MIT licensed. If Backchannel is useful to you, a star on GitHub helps others find it.