Inspiration
Nerdearla already captions talks, with commercial tools that do not scale to 30+ English sessions at once. They cost too much, need an operator per room, and another conference cannot reuse them. We wanted an open-source caption system any conference can run.
What it does
One audio source is transcribed once and translated to Spanish, English, and Portuguese. The audience picks the room and the language. Production watches every room from one monitor, burns the captions into OBS or vMix, and exports SRT, VTT, or text when the talk ends. A glossary keeps names like Nerdearla untranslated. Ten rooms ran in parallel in a single process.
How we built it
A FastAPI process runs one async task per room. Gemini Live transcribes the audio. A text model translates that transcript, all languages in one request. A React app serves the audience page, a transparent OBS overlay, and the production monitor. Docker Compose starts it. With no API key, the same app boots on a demo backend.
Challenges we ran into
Gemini often waits for a pause before it emits a final line, so we cut captions out of the live text ourselves. The free-tier translator quota died if every partial went to three languages, so partials use a faster model and finals share one backoff across rooms. The session clock stays on the audio, so an 8-minute reconnect does not break the export.
Accomplishments that we're proud of
Live English-to-Spanish captions, two rooms at once, and all five optional features from the brief: OBS overlay, Portuguese, glossary, export, and a production monitor. MIT licensed, and it still starts without an API key.
What we learned
A correct line that arrives late is a failed caption. Keeping timestamps on the audio, not on the provider, mattered as much as the translation.
What's next for NerdTranscribe
A local speech model behind the same interface, so a conference can run with no Gemini key. The hook is already there.
Built With
- docker
- fastapi
- ffmpeg
- geminiapi
- node.js
- python
- typescript
Log in or sign up for Devpost to join the conversation.