Cloud or self-hosted · Getting started · Repositories · Docker images · Models · Contributing · linto.ai
LinTO is a complete transcription platform you can run on your own infrastructure: a web application for recorded media and live meetings, the speech engines behind it, a live subtitling pipeline for events, and the tooling to deploy all of it on Kubernetes. Everything in this organization is AGPL-3.0.
It is developed by LINAGORA and runs in production at the European Parliament, the European Commission, French local governments and events such as Wikimania 2026.
LinTO Studio Cloud. The same platform, operated by us and hosted in France. Create an account, drop a file or invite the bot into your meeting, and you get who said what, the minutes and the subtitles. There is a free plan to start with. Details and sign-up on linto.ai.
On your own servers. Everything in this organization, installed on your Kubernetes cluster or with Docker, GPU models included. Nothing leaves your infrastructure. This page is the entry point for that path.
flowchart LR
subgraph app [LinTO Studio]
FE[studio-frontend] --- API[studio-api] --- WS[studio-websocket]
end
subgraph engines [Speech engines]
STT[linto-stt<br/>Whisper · Kaldi · NeMo]
DIA[linto-diarization<br/>pyannote]
end
subgraph live [Live sessions]
PL[linto-studio-plugins<br/>session-api · scheduler · transcriber · translator]
BOT[meeting bots<br/>Teams · Jitsi · BigBlueButton · Visio]
end
LLM[llm-gateway<br/>any OpenAI-compatible LLM]
VLLM[vLLM<br/>Voxtral realtime · TranslateGemma]
API --> STT
API --> DIA
API --> LLM
API --> PL
BOT --> PL
PL --> STT
PL --> VLLM
LLM --> VLLM
DEP[linto-deploy<br/>Helm · Ansible · k3s] -.deploys.-> app
DEP -.-> engines
DEP -.-> live
DEP -.-> LLM
DEP -.-> VLLM
- Studio is the product: upload or record media, get a transcript with speaker separation and word-level timestamps, edit it collaboratively, generate minutes and summaries, export to your own document templates, share, search, API and SDKs.
- Speech engines are stateless services with an HTTP and WebSocket API. They work on their own if you only need transcription.
- Live sessions ingest SRT, RTMP or WebSocket audio, or a bot that joins the meeting, and deliver subtitles and translations in real time to a screen, a QR-code page or back into Studio.
- llm-gateway sits between Studio and the LLM of your choice. Long documents are chunked and summarized in passes. Self-hosted models through vLLM are the default in sovereign deployments.
- linto-deploy installs the whole stack, including GPU provisioning, on a k3s cluster from a single profile.
The whole platform on a k3s cluster
git clone https://github.com/linto-ai/linto-deploy.git && cd linto-deploy
uv sync
uv run linto wizard # builds a deployment profile
uv run linto deploy <profile>Only the speech-to-text API
docker run -p 8080:80 --rm -e SERVICE_MODE=http -e MODEL=large-v3-turbo lintoai/linto-stt-whisper
curl -X POST http://localhost:8080/transcribe -F "[email protected];type=audio/wav"Add --gpus all -e DEVICE=cuda for GPU inference. SERVICE_MODE=websocket gives you the streaming endpoint instead.
Hacking on Studio
git clone https://github.com/linto-ai/linto-studio.git && cd linto-studio
docker compose up -d # web app + API + MongoDB on http://localhost:8003Each repository has its own README with configuration and environment variables. The next branch is where development happens, master or main holds releases.
| Layer | Repository | Notes |
|---|---|---|
| Platform | linto-studio | Web app (Vue), REST API (Node, MongoDB), real-time collaboration, JavaScript and Python SDKs |
| Platform | linto-studio-plugins | Live sessions: SRT/RTMP/WebSocket ingestion, ASR connectors (LinTO, Voxtral, Microsoft, Amazon, Google), translation, meeting bots |
| Speech | linto-stt | Speech-to-text API, offline and streaming. Whisper, Kaldi/Vosk, NeMo and Kyutai engines, CPU or GPU |
| Speech | linto-diarization | Speaker separation with pyannote, plus speaker identification from voice samples |
| Speech | linto-punctuation | Punctuation and casing restoration for raw ASR output |
| Speech | linto-transcription-service | Orchestrates transcription, diarization and punctuation as one job |
| LLM | llm-gateway | Summarization gateway: chunking, queuing, retries, token accounting, DOCX/PDF export, admin UI |
| Deployment | linto-deploy | CLI, Helm charts and Ansible roles for k3s, NVIDIA drivers, GPU time-slicing, TLS |
| Libraries | whisper-timestamped | Whisper with word-level timestamps and confidence scores. Used well beyond LinTO |
| Libraries | WebVoiceSDK | Browser building blocks: microphone, voice activity detection, wake word |
All images are published under hub.docker.com/u/lintoai. latest follows the release branch, latest-unstable follows next. Version tags are pinned in the linto-deploy charts.
| Image | Role | GPU |
|---|---|---|
lintoai/studio-frontend, studio-api, studio-websocket |
LinTO Studio | no |
lintoai/studio-plugins-sessionapi, studio-plugins-scheduler, studio-plugins-transcriber, studio-plugins-translator |
Live sessions | no |
lintoai/linto-stt-whisper |
Whisper transcription worker | optional |
lintoai/linto-stt-kaldi |
Kaldi/Vosk transcription worker | no |
lintoai/linto-stt-nemo |
NVIDIA NeMo transcription worker | yes |
lintoai/linto-diarization-pyannote |
Speaker separation | yes |
lintoai/linto-transcription-service |
Transcription job orchestrator | no |
lintoai/llm-gateway, llm-gateway-frontend |
LLM gateway and its admin UI | no |
lintoai/vllm |
Our vLLM build with the Voxtral realtime fixes below | yes |
- Offline transcription: Whisper (faster-whisper / CTranslate2), large-v3-turbo by default. Kaldi/Vosk models for CPU-only setups. NVIDIA NeMo and Kyutai engines are available in linto-stt.
- Streaming transcription: Voxtral Mini Realtime served by vLLM, and the streaming modes of the engines above. Commercial ASR (Microsoft, Amazon, Google) can be plugged into live sessions when the customer already has it.
- Speaker separation: pyannote. Speaker identification uses voice signatures stored per organization.
- Translation: TranslateGemma through vLLM for live subtitles.
- Summarization: any OpenAI-compatible endpoint. Sovereign deployments run their own models with vLLM.
- whisper-timestamped started here and is now a common way to get word timestamps out of Whisper.
- Voxtral realtime on vLLM: vllm#45022 fixes boot OOM, silent hangs and max-length crashes on 16 GiB cards; vllm#45833 proposes unbounded-duration streaming through RoPE re-anchoring. Both are open. Our
lintoai/vllmimage carries them in the meantime.
- Transcription editor rebuilt on Vue 3 and published as a standalone component
- Meeting bots as a separate horizontally scalable service, with native speaker attribution from the meeting platform
- Live translation pacing for subtitle banners
Release notes live in each repository's RELEASE.md.
Issues and pull requests are welcome on every repository. Please read the contribution guidelines first: open an issue before a large change, base your work on next, keep the diff focused. AI-assisted contributions are fine when a human submits and understands them. Pull requests generated by automated scanners are closed without review.
Security issues go through the security policy, never through public issues.
Everything else: [email protected].

