<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/build-a-live-translation-broadcast-app-with-the-gemini-live-api-and-livekit-o6ngzap8t" -->

---
title: Build a live translation broadcast app with the Gemini...
description: A walkthrough demonstrates building an open-source live translation broadcast app using the Gemini 3.5 Live API combined with LiveKit for WebRTC audio/data...
canonical: https://daily.dev/posts/build-a-live-translation-broadcast-app-with-the-gemini-live-api-and-livekit-o6ngzap8t
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Build a live translation broadcast app with the Gemini Live API and LiveKit | daily.dev
og:description: A walkthrough demonstrates building an open-source live translation broadcast app using the Gemini 3.5 Live API combined with LiveKit for WebRTC audio/data...
og:url: https://daily.dev/posts/build-a-live-translation-broadcast-app-with-the-gemini-live-api-and-livekit-o6ngzap8t
og:image: https://api.daily.dev/og/posts/o6NgzAp8t.png
og:image:alt: Build a live translation broadcast app with the Gemini Live API and LiveKit
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Build a live translation broadcast app with the Gemini Live API and LiveKit

**[Google for Developers](https://daily.dev/sources/googledevelopers)** · 12 min read · 0 upvotes · 0 comments

## Summary

A walkthrough demonstrates building an open-source live translation broadcast app using the Gemini 3.5 Live API combined with LiveKit for WebRTC audio/data streaming and Google Cloud Run for deployment. The demo lets a speaker broadcast audio that listeners can hear translated into their chosen language in real time, deduplicating sessions so only one Gemini Live translation stream runs per requested target language regardless of listener count. The walkthrough covers architecture (translation session manager, translation bridge), local development with LiveKit via Docker or LiveKit Cloud, deployment via Docker to Cloud Run with Secret Manager for credentials, and scaling limitations (single-instance in-memory state, roughly 15-20 simultaneous languages before hitting CPU limits).

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.youtube.com/watch?v=kN_iMEAi1dw>

## Questions this post answers

### How can I build a live speech translation broadcast app using the Gemini Live API?

Combine the Gemini Live API with LiveKit and Google Cloud Run: broadcasters stream microphone or tab audio into a LiveKit room, and a translation bridge opens a Gemini Live websocket session per requested target language, using audio input with output audio transcription enabled. Listeners selecting an existing language get subscribed to that session's stream rather than spawning a new one, and translated audio plus captions are delivered via WebRTC and WebRTC data channels.

_daily.dev surfaces real-time examples like this for developers wiring up Gemini Live translation pipelines._

### What are the scaling limits of a Gemini Live translation demo deployed on Google Cloud Run?

The demo caps out at one Cloud Run instance because translation session state is kept in memory rather than in a database, so it cannot be horizontally scaled as-is. It comfortably supports roughly 15 to 20 simultaneous target languages before hitting CPU limits, since each language requires its own long-running websocket session; going beyond that requires splitting languages across separate LiveKit rooms.

_Developers weighing in-memory versus database-backed session state can track trade-offs like this on daily.dev._

### How do I deploy a Next.js app with long-running websockets to Google Cloud Run?

Package the app with a Dockerfile that installs dependencies, runs the build, and publishes the app directory, then deploy with a Cloud Run command using --allow-unauthenticated for public access and minimum instances set to zero so it scales to zero when idle. Secrets like API keys and LiveKit credentials are stored and injected via Google Secret Manager rather than hardcoded.

_daily.dev helps developers deploying websocket-heavy Next.js workloads on Cloud Run stay on top of setup details._

## Similar posts on daily.dev

- [Fluid, natural voice translation with Gemini 3.5 Live Translate](https://daily.dev/posts/fluid-natural-voice-translation-with-gemini-3-5-live-translate-egnwzzctw) · DeepMind · 0 upvotes · 0 comments
- [Real-Time AI Translation over MoQ](https://daily.dev/posts/real-time-ai-translation-over-moq-qsydteobk) · Software Mansion · 0 upvotes · 0 comments

---

Tags: [#gcp](https://daily.dev/tags/gcp), [#webrtc](https://daily.dev/tags/webrtc)

[View this post on daily.dev](https://daily.dev/posts/build-a-live-translation-broadcast-app-with-the-gemini-live-api-and-livekit-o6ngzap8t)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Build a live translation broadcast app with the Gemini Live API and LiveKit","url":"https://daily.dev/posts/build-a-live-translation-broadcast-app-with-the-gemini-live-api-and-livekit-o6ngzap8t","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/build-a-live-translation-broadcast-app-with-the-gemini-live-api-and-livekit-o6ngzap8t"},"datePublished":"2026-08-17T23:15:38.686Z","dateModified":"2026-09-13T19:20:05.701Z","description":"A walkthrough demonstrates building an open-source live translation broadcast app using the Gemini 3.5 Live API combined with LiveKit for WebRTC audio/data...","image":"https://i.ytimg.com/vi/kN_iMEAi1dw/sddefault.jpg","thumbnailUrl":"https://i.ytimg.com/vi/kN_iMEAi1dw/sddefault.jpg","isAccessibleForFree":true,"articleSection":"Google for Developers","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Google for Developers","logo":"https://media.daily.dev/image/upload/s--jj3nxRoG--/f_auto/v1725035497/logos/googledevelopers","url":"https://daily.dev/sources/googledevelopers"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/build-a-live-translation-broadcast-app-with-the-gemini-live-api-and-livekit-o6ngzap8t","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"gcp,webrtc","timeRequired":"PT12M","video":{"@type":"VideoObject","name":"Build a live translation broadcast app with the Gemini Live API and LiveKit","description":"A walkthrough demonstrates building an open-source live translation broadcast app using the Gemini 3.5 Live API combined with LiveKit for WebRTC audio/data...","thumbnailUrl":"https://i.ytimg.com/vi/kN_iMEAi1dw/sddefault.jpg","uploadDate":"2026-08-17T23:15:38.686Z","duration":"PT12M","url":"https://api.daily.dev/r/o6NgzAp8t","embedUrl":"https://www.youtube.com/embed/kN_iMEAi1dw"}}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Google for Developers","item":"https://daily.dev/sources/googledevelopers"},{"@type":"ListItem","position":3,"name":"Build a live translation broadcast app with the Gemini Live API and LiveKit"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/build-a-live-translation-broadcast-app-with-the-gemini-live-api-and-livekit-o6ngzap8t#faq","mainEntity":[{"@type":"Question","name":"How can I build a live speech translation broadcast app using the Gemini Live API?","acceptedAnswer":{"@type":"Answer","text":"Combine the Gemini Live API with LiveKit and Google Cloud Run: broadcasters stream microphone or tab audio into a LiveKit room, and a translation bridge opens a Gemini Live websocket session per requested target language, using audio input with output audio transcription enabled. Listeners selecting an existing language get subscribed to that session's stream rather than spawning a new one, and translated audio plus captions are delivered via WebRTC and WebRTC data channels. daily.dev surfaces real-time examples like this for developers wiring up Gemini Live translation pipelines."}},{"@type":"Question","name":"What are the scaling limits of a Gemini Live translation demo deployed on Google Cloud Run?","acceptedAnswer":{"@type":"Answer","text":"The demo caps out at one Cloud Run instance because translation session state is kept in memory rather than in a database, so it cannot be horizontally scaled as-is. It comfortably supports roughly 15 to 20 simultaneous target languages before hitting CPU limits, since each language requires its own long-running websocket session; going beyond that requires splitting languages across separate LiveKit rooms. Developers weighing in-memory versus database-backed session state can track trade-offs like this on daily.dev."}},{"@type":"Question","name":"How do I deploy a Next.js app with long-running websockets to Google Cloud Run?","acceptedAnswer":{"@type":"Answer","text":"Package the app with a Dockerfile that installs dependencies, runs the build, and publishes the app directory, then deploy with a Cloud Run command using --allow-unauthenticated for public access and minimum instances set to zero so it scales to zero when idle. Secrets like API keys and LiveKit credentials are stored and injected via Google Secret Manager rather than hardcoded. daily.dev helps developers deploying websocket-heavy Next.js workloads on Cloud Run stay on top of setup details."}}]}
```

