Transcriber & translator for audio files. Like Otter.ai, but open-source and almost free.
Otter.ai monthly subscription is $16.99 per user.
You get:
1200 monthly transcription minutes; 90 minutes per conversation
Transcription:
Replicate AI models cloud-hosting with current prices and models used, 1200 minutes will cost approximately $1.60 - $5.50
At least three times cheaper with the same or even better quality of transcription, in my opinion.
And you pay as you go.
Translation (summarization is deprecated1; use vasiliadi/ai-summarizer-telegram-bot): Gemini Pro/Flash is free if you use the Gemini API from a project that has billing disabled, without the benefits available in the paid plan.
Hosting: Free tiers or trials from Render, Google Cloud, Oracle Cloud, AWS, Azure, IBM Cloud, or low-cost DigitalOcean, or any provider you like.
Total:2
Pay as you go for 10 hours audio.
Replicate with whisper-diarization + free Gemini API + DigitalOcean = $2.00 + $0.00 + $0.10 = $2.10
Replicate with incredibly-fast-whisper + free Gemini API + DigitalOcean = $0.70 + $0.00 + $0.10 = $0.80
Note
Prices are subject to change without notice.
AI agent setup (one-liner):
Read https://raw.githubusercontent.com/vasiliadi/transcriber/main/llms.txt and follow the instructions to run transcriber locally.
Docker Compose:
Install Docker Desktop first if Docker is not already installed.
docker compose up --buildThe app will be available at http://localhost:80. Secrets are loaded from src/.streamlit/secrets.toml if it exists (see Config).
To stop:
docker compose downDocker (pre-built image from Docker Hub):
docker run -p 8080:8080 \
-e REPLICATE_API_TOKEN=your_token \
-e GEMINI_API_KEY=your_key \
-e HF_ACCESS_TOKEN=your_token \
vasiliadi/transcriber:latestThe app will be available at http://localhost:8080.
To stop: press Ctrl+C.
Manual setup:
Install pixi:
# macOS (Homebrew)
brew install pixi
# or via install script
curl -fsSL https://pixi.sh/install.sh | shClone the repo, create .streamlit/secrets.toml with your API keys (see Config), then run:
pixi run startRunning the Whisper model on Replicate is much cheaper than using the OpenAI API for Whisper.
I use four models:
vaibhavs10/incredibly-fast-whisper best for speed
thomasmol/whisper-diarization best for dialogs
openai/gpt-4o-transcribe best for accuracy
victor-upmeet/whisperx best overall
Comparison of the same 45-minute audio file (6 speakers) by model (example)

OpenAI Speech to text Whisper model
File uploads are currently limited to 25 MB.
To avoid this limitation, I compress the audio before uploading (the models apply their own compression, but in practice I still hit the limit when relying on it). 45 minutes of audio is 63 MB raw and 4 MB compressed, which pushes the limit to roughly 3 hours 45 minutes without losing transcription quality — no chunking needed.
For anything longer you would have to split the file, which brings its own problems: splitting purely by time cuts words in half, and post-processing gets harder because speaker identity and timestamps don't survive the seams.
Diarized transcripts are translated one segment at a time, so every line keeps its own timestamp and speaker label. The cost is that each segment is translated without the context of its neighbours — slightly lower quality than a single pass — plus a short rate-limit pause between calls, which is what makes long files slow. See languages supported for translation.
For diarization, all models rely on pyannote.audio solutions. As a user, you must agree to the terms for accessing the models offered by pyannote. Therefore, it is necessary to accept the terms for pyannote/segmentation-3.0 and pyannote/speaker-diarization-3.1 and obtain a HuggingFace API token.
The thomasmol/whisper-diarization model also uses the same models for diarization, but the developer uses his own HuggingFace API token. This means that an additional token is not required.
Example of .env file:
GEMINI_API_KEY="your_api_key"
REPLICATE_API_TOKEN="your_api_key"
HF_ACCESS_TOKEN="your_api_key" # only for incredibly-fast-whisper and whisperx models with enabled diarization
PROXY="" # only if you need to use proxy
All keys are mandatory, but you can fill some of them with placeholder or incorrect values to complete the setup. Using features that require a specific key with an incorrect value will result in an error.
You need to replace the path to the env_file in compose.yaml.
Get Gemini API key
Get Replicate API token
Get HF API tokens, and don't forget to accept the terms for pyannote/segmentation-3.0 and pyannote/speaker-diarization-3.1. This is needed only for the incredibly-fast-whisper model with diarization enabled.
Your transcription and Google NotebookLM are a very powerful combination.
Using context caching, you can ask a ton of questions about the topic.
| Platform | Links |
|---|---|
| Render | Deploy from GitHub / GitLab / Bitbucket |
| Google Cloud | Quickstart: Deploy to Cloud Run Tutorial: Deploy your dockerized application on Google Cloud |
| Oracle Cloud | Container Instances |
| IBM Cloud | IBM Cloud® Code Engine |
| AWS | AWS App Runner |
| Azure | Web App for Containers Deploy a containerized app to Azure |
| Digital Ocean | How to Deploy from Container Images |
This project is released into the public domain under the Unlicense.
The published Docker image bundles third-party dependencies from two package
ecosystems — Python (pip) and conda/system (via the pixi docker environment).
Most are permissive (MIT/BSD/Apache-2.0), but some carry copyleft terms; full
details, including regeneration instructions, are in
THIRD_PARTY_NOTICES.md. The most notable are:
- mutagen (Python) — GPL-2.0-or-later, pulled in transitively by
yt-dlp[default] - ffmpeg (conda) — GPL-2.0-or-later; the
-gplbuild variant conda-forge resolves for this project (ffmpegis unpinned to a variant inpyproject.toml) also pulls in GPL-licensed encodersx264/x265 - certifi (Python) — MPL-2.0
The Docker image also bundles ~15 LGPL-licensed native libraries (audio/codec/
rendering dependencies of ffmpeg) and the standard GCC toolchain runtime
(GPL-3.0 with the GCC Runtime Library Exception) — see THIRD_PARTY_NOTICES.md
for the full inventory. License compliance is monitored with
FOSSA,
which may not cover conda/system packages; review them manually if
pyproject.toml's conda dependencies change.
