Otter is two products. One is a transcript library: audio in, speaker-labelled text out, with search, a summary and questions over everything. An agent builds that for one person in a weekend on faster-whisper, pyannote and SQLite. The other is the notetaker that joins Zoom, Teams and Meet from your calendar, plus the phone apps and shared workspaces. That part is meeting-bot infrastructure, and the open projects for it need servers and upkeep. The weekend version gives you uploaded or browser-recorded conversations, not the hands-off kind.
Before you buildCheck the free plan first: Otter Basic gives 300 minutes a month with live transcription, but caps each conversation at 30 minutes and keeps only the 25 most recent.
Build me a self-hosted meeting transcriber to replace Otter.ai. Requirements: - Python 3.12 + FastAPI with htmx pages. `uvicorn app:app --port 4860` serves http://localhost:4860, bound to localhost; a docker-compose.yml runs the same thing. ffmpeg must be installed. - Input, three ways: upload an audio or video file, record in the browser (getDisplayMedia for tab audio mixed with the microphone, MediaRecorder, one chunk uploaded every 30 seconds), or drop a file into ./inbox/. - Transcription: `faster-whisper` with word timestamps (WHISPER_MODEL, default medium; CPU int8, or CUDA if present). A recording shows a rolling partial transcript every 30 seconds and gets a full pass when it stops. - Speakers: `pyannote.audio` diarization merged with the words; renaming a speaker applies to the whole conversation. It needs HF_TOKEN in .env and an accepted model licence; show that on the page when missing, never fail silently. - Storage: SQLite at ./data/otter.db with conversations, segments (start, end, speaker, text) and an FTS5 index; audio under ./data/audio/, deleted after KEEP_AUDIO_DAYS (default 30). - Notes: a button sends the transcript to an OpenAI-compatible endpoint (LLM_BASE_URL, LLM_MODEL, LLM_API_KEY; Ollama works) and stores a title, summary, decisions and action items with owners. A question box answers over one conversation or all of them from the top FTS5 hits and cites timestamps. - Playback page: click a sentence to jump the audio there, search across conversations, export TXT, SRT and DOCX (`python-docx`). - Single user. No accounts, no telemetry, local-first. Outbound calls: the model endpoint, and Hugging Face once for models. - Out of scope: a bot that joins Zoom, Teams or Meet, calendar integration, mobile apps, sharing with other people. - README: capturing a call's audio (Chrome tab audio, BlackHole on macOS), CPU against GPU speed, and a reminder to tell participants you are recording.
Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own Otter.ai.
Extend the transcriber in this folder. Requirements: - Watch ./inbox/ and any extra folders listed in WATCH_DIRS with `watchdog`, and queue each new audio or video file once its size stops changing for 10 seconds. - Process one file at a time in a background worker, show queue position and progress on the home page, and move finished files to ./inbox/done/. - Retry a failed file once, then show the error and keep the file. - Update the README.
Add speaker memory to the transcriber in this folder. Requirements: - Store a voice embedding per named speaker from pyannote's embedding model, in SQLite. - When a new conversation is diarized, suggest names for speakers whose embedding is close to a stored one and show the match score; accept or correct in one click. - Never apply a suggestion without confirmation, and let me delete a stored voice. - Update the README.
Add an action-item list to the transcriber in this folder. Requirements: - Collect action items from every conversation into one page with owner, due date if stated, source conversation and a link to the exact timestamp. - Let me tick items off and filter by owner; keep the state in SQLite. - Provide a daily Markdown export to a path set in .env. - Update the README.
The pull is capture without effort: the bot is in the call, the transcript is in your pocket, and nobody operates a server. Pro also lifts Basic's 30-minute cap per conversation and 300-minute pool, which is what makes regular use practical.
Estimate · Transcription runs on your machine at no cost. Summaries cost cents per meeting through an API, or nothing with Ollama; $6 covers a small VPS if you want it reachable from your phone. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Basic | $0 | $0 | 300 monthly minutes (a pool shared with imports), 30 minutes per conversation, 3 lifetime file imports, 25 most recent conversations kept in history, 5 custom vocabulary terms, 1 concurrent meeting. |
| Pro | $16.99 | $8.33 | 1,200 recording minutes and 10 file imports a month, up to 90 minutes per meeting, 2 concurrent meetings, unlimited history and storage, advanced AI workflows. |
| Business | $30 | $19.99 | Unlimited meetings and in-app recordings, 6,000 imported-file minutes a month, up to 4 hours per meeting, 3 concurrent meetings, activity logs, usage analytics, prioritised support. |
| Enterprise | custom | — | Everything in Business plus SSO and SCIM (100-user minimum), API and webhooks, custom integrations, HIPAA add-on. |
Basic is free: 300 transcription minutes a month, 30 minutes per conversation and 3 lifetime file imports.
Kinda. The core is a weekend build with the prompt on this page, but real gaps remain: The notetaker that joins Zoom, Teams and Google Meet from your calendar by itself, The iOS and Android apps for recording on the go.
About $16.99 a month on the Pro plan per seat, $203.88 a year (checked 2026-10-19).
The notetaker that joins Zoom, Teams and Google Meet from your calendar by itself; The iOS and Android apps for recording on the go; Shared workspaces, shared speaker names and team permission controls; Salesforce, HubSpot and Zapier integrations, and auto-sync from Zoom or Dropbox; Live notes and captions inside the call. If any of those matter to you, keep paying.
Yes: Scriberr (open source), Meetily (open source), Buzz (open source).