Skip to content

About

Transcriber & translator for audio files. Like Otter.ai but free and build with Gemini AI.

Resources

Stars

14 stars

Watchers

1 watching

Forks

Repository files navigation

The Transcriber

Python License: Unlicense DeepSource FOSSA Status Ruff pyrefly Pixi Badge

Transcriber & translator for audio files. Like Otter.ai, but open-source and almost free.

Screenshot

Otter.ai

Otter.ai monthly subscription is $16.99 per user.
You get:

1200 monthly transcription minutes; 90 minutes per conversation

The Transcriber app

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.

How to start

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 --build

The 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 down

Docker (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:latest

The 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 | sh

Clone the repo, create .streamlit/secrets.toml with your API keys (see Config), then run:

pixi run start

Technical details

Running 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) Comparison of processing times by model

Limitations

OpenAI Whisper model

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.

Gemini post-processing

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.

Optional settings

HuggingFace.co

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.

Config

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.

Streamlit Secrets management

PS

Your transcription and Google NotebookLM are a very powerful combination.
Using context caching, you can ask a ton of questions about the topic.

Docs

Links
Libraries streamlit
Replicate HTTP API
Google Gen AI SDK
yt-dlp
bs4
curl_cffi
Docker Docker Best Practices

Docker
Dockerfile reference
Dockerfile Linter

.dockerignore
.dockerignore validator

Docker Compose
Syntax for environment files in Docker Compose
Ways to set environment variables with Compose
Compose file version 3 reference
GitHub Actions Workflow syntax for GitHub Actions
Publishing images to Docker Hub and GitHub Packages
Dev Containers An open specification for enriching containers with development specific content and settings
Developing inside a Container
uv uv pip
pixi pixi
direnv direnv
Speech to Text AI Model Leaderboard Artificial Analysis

Deploy

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

License

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 -gpl build variant conda-forge resolves for this project (ffmpeg is unpinned to a variant in pyproject.toml) also pulls in GPL-licensed encoders x264/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.

Footnotes

  1. Last supported version is 0.1.0 ↩

  2. For August 2024 ↩

About

Transcriber & translator for audio files. Like Otter.ai but free and build with Gemini AI.

Resources

Stars

14 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages