What it does
Genesis toma el audio de una sala, lo manda a Gemini y devuelve subtítulos traducidos al instante. Esos subtítulos se dibujan en un overlay transparente que vMix superpone al program out. El stream ya sale con el texto. Cada sala tiene su idioma de origen y de destino, y se pueden tener varias al mismo tiempo.
How we built it
El audio entra por WebSocket en PCM de 16 bits, 16 kHz y mono, en pedazos de unos 100 ms. El backend es FastAPI. Gemini Live traduce y el texto sale por SSE. El overlay es una página que vMix carga como Browser Source: abajo, centrado, a dos líneas. Un parcial se ve más tenue que una frase cerrada. Para probar sin la mesa de corte armamos un script que lee un WAV y lo manda por el mismo canal. Langfuse registra cada sala: latencia, tokens y si la traducción se corta.
Challenges we ran into
El primer modelo transcribía y no traducía. Hubo que pasar a Gemini Live Translate y quedarnos con el texto traducido, no con el audio que el modelo también devuelve. vMix no habla nuestro WebSocket, así que el vivo de la mesa todavía no entra solo. El servidor se quedaba trabado al recargar porque el overlay deja el SSE abierto. Y el costo no viene en dólares: Gemini manda tokens y Langfuse los cotiza.
Accomplishments that we're proud of
Una charla de prueba, en WAV, se traduce y se ve en el overlay como si ya estuviera en el program. Varias salas no se mezclan. Si Langfuse no responde, la traducción sigue. El camino de vMix quedó escrito paso a paso: el overlay ya se puede poner encima del video.
What we learned
Traducir en vivo no es pegarle a un chat con un audio entero. Es un flujo continuo, con un formato fijo, y el primer mensaje tiene que decir el idioma antes de que llegue el PCM. El tamaño del pedazo cambia la latencia, no el precio: se cobra la duración. Y quemar subtítulos en la salida es un problema de capas de video, no de un reproductor.
What's next for Genesis
Conectar el audio del program de vMix al mismo WebSocket, sin el WAV. Pasar el bus de memoria a Redis, una charla por canal, para que el que traduce y el que muestra el texto no dependan del mismo proceso. Y una pantalla chica para elegir sala e idiomas, en lugar de armar el hello a mano.
Built With
- gemini
- langfuse
- python
- sse
- websockets
Log in or sign up for Devpost to join the conversation.