OpenTransLive is a broadcast-style (one-to-many) realtime translation framework for event organizers, not a generic meeting collaboration tool. Fully open source (GNU AGPL v3.0), with a web UI and YouTube sync, designed to be self-hosted and freely modified.
The design assumes a single speaker or subtitle team produces the transcription, while an unlimited audience — onsite or online — watches in their preferred language: on the big screen, on a mobile webpage, or in YouTube live subtitles.
Typical scenarios: conferences, hackathons, public hearings, community meetups, livestreamed talks — anywhere a single audio source must be translated live for a multilingual audience. The viewer side requires no signup, no login, and has no audience cap; only the speaker / subtitle operator pushing audio needs to authenticate.
Language: English (繁體中文)
- Realtime transcription: WhisperX, OpenAI, Groq, ElevenLabs Scribe, Gemini Live Transcribe, Google Speech-to-Text
- Multilingual translation: LLM-based, context-aware
- User accounts: Email OTP login, admin console, realtime permission, session co-owners
- Session panel:
/panel/{session_id}for translation languages, transcription engine and detect language, tone, keywords, text dictionary - Edit history:
/edit/{session_id}to revise or delete committed segments and all translations - Viewer broadcast: Viewer pages (
/rt,/yt) receive subtitles over SSE — no login, no audience cap - YouTube sync:
/yt/{session_id}aligns subtitles with a YouTube live stream or VOD - Export: Full JSON and per-language SRT
- Storage: MongoDB persistence with Redis for caching and multi-server scaling
opentranslive/
├── live_server/ # FastAPI + Socket.IO web server
│ ├── app/ # Main application
│ │ ├── __init__.py # FastAPI app, routes, Socket.IO handlers
│ │ ├── config.py # Config loader (reads secret/config.toml)
│ │ ├── secret/ # config.toml (secret), models.toml (override), *.example.toml
│ │ ├── database.py # MongoDB integration
│ │ ├── email_auth.py # Email OTP login
│ │ ├── scribe_manager.py # Shared transcription session logic + ElevenLabs / Gemini
│ │ ├── translation_service.py # Translation pipeline & queue
│ │ ├── translators/ # Per-provider implementations
│ │ ├── socket_schema.py # Socket.IO event schema
│ │ ├── static/ # Static assets
│ │ └── templates/ # Jinja2 templates
│ ├── Dockerfile
│ ├── docker-compose.yml
│ └── README.en.md # Server configuration details
├── transcribe_client/ # Batch transcription client (WhisperX / OpenAI / Groq)
├── realtime_client/ # Realtime streaming client (ElevenLabs / Google STT)
├── docs/USAGE.en.md # Full usage guide (roles, flows, APIs, FAQ)
├── milestone.en.md # Milestones
└── README.en.md # This file
- Python 3.11+
- MongoDB
- Redis
- At least one AI provider API key (any of OpenAI, Gemini, Groq, Cerebras)
- An ElevenLabs API key or a Gemini API key for realtime microphone transcription (
STT_PROVIDERpicks which)
cd live_server
# Docker Compose (recommended)
cp app/secret/config.example.toml app/secret/config.toml
# Edit app/secret/config.toml — set SECRET_KEY, API keys, SMTP, etc.
docker-compose up -dOr manually:
cd live_server
uv sync
cp app/secret/config.example.toml app/secret/config.toml
uv run uvicorn app:socket_app --host 0.0.0.0 --port 5000After startup:
- Landing / login:
http://localhost:5000/ - Viewer subtitles:
http://localhost:5000/rt/{session_id} - YouTube view:
http://localhost:5000/yt/{session_id}
Server config details: live_server/README.en.md. Full usage flow (creating sessions, panel, editing, exporting): docs/USAGE.en.md.
The live_server panel can run realtime transcription directly from a browser microphone via ElevenLabs Scribe or Gemini Live Transcribe — no client needed. The clients below exist for local inference or alternative STT providers.
Batch client (transcribe_client/README.en.md):
cd transcribe_client
uv sync
uv run python run.py -t your_session_idRealtime client (realtime_client/README.en.md):
cd realtime_client
uv sync
uv run python run.py -t your_session_idMic → Panel (browser) → ElevenLabs Scribe / Gemini Live Transcribe → Correct/Translate → Server → SSE → Viewer pages
↓
MongoDB
(persistent)
- Panel: Socket.IO bidirectional control + audio upload
- Viewer pages: SSE one-to-many broadcast
- Redis: Cross-server pub/sub and cache
- MongoDB: Committed segments
- Context-aware: Uses recent subtitles as context
- Keyword learning: Auto-extract domain terms; user can pin
- Text dictionary: User-defined direct substitutions
- Async pipeline: Doesn't block the main transcription path
- Parallel languages: Translate to multiple targets concurrently
- CPU: 2+ cores (4 recommended)
- RAM: 4GB+ (8GB recommended)
- Storage: 20GB+
- Stable internet
- CPU: 4+ cores
- RAM: 8GB+ (large models need 16GB)
- Optional NVIDIA GPU for major speedup
- CPU: 2+ cores
- RAM: 2GB+
- Low-latency internet
cd live_server
docker-compose up -d- MongoDB Atlas or self-hosted cluster
- Redis Cloud or self-hosted cluster
- Reverse proxy: Nginx or Caddy
- SSL/TLS: Let's Encrypt
- Multi-server horizontal scaling via Redis pub/sub
Copyright (c) 2025 Sean Gau rrtw0627@gmail.com
This project is released under the GNU AGPL v3.0. See LICENSE. In short:
- You are free to use, modify, and self-host it.
- If you modify the project and let users interact with it over a network (e.g. running it as a public service), AGPL section 13 requires you to offer those users the complete corresponding source of your modified version.
- Any derivative work must also be licensed under AGPL v3.0.
- Copyright notices and license headers must be preserved.
Trademark: the OpenTransLive name and logos are not covered by the AGPL (section 7 grants no trademark rights). Forks and derivative works must use a different name and branding.
Issues and pull requests welcome. Lead contributor: SeanGau.
Please read CONTRIBUTING.md before opening a PR: this project uses a Contributor License Agreement, and every contribution must carry a Signed-off-by line to be merged.
- Fork the repo
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit (
git commit -m 'Add amazing feature') - Push (
git push origin feature/amazing-feature) - Open a Pull Request
- Visual operator manual docs/MANUAL.en.md — illustrated session, panel, viewer, and export workflow
- Usage guide docs/USAGE.en.md — roles, flows, URLs, APIs, storage, FAQ
- Milestones milestone.en.md
- Live Server config live_server/README.en.md
- Issue tracker
This project is supported by FtO (Facing the Ocean, 面海松) and g0v intl.
Thanks to every contributor and to the g0v community.

