three.js로 입체 모델을 만들고 회전 가능한 뷰어에서 모든 각도로 확인합니다. OBJ + MTL이나 GLB로 저장해 다른 3D 제작 소프트웨어에서 사용할 수 있습니다.
- 입체 모델을 만들고 모든 각도에서 확인하기
- Blender에서 편집할 모델 만들기
- 모델의 윤곽과 재질 표현 확인하기
Gemini Live API로 오디오, 영상, 텍스트를 양방향으로 실시간 전송하는 앱을 만들거나 이전합니다. 음성 전사와 번역, 음성 활동 감지, 도구 호출, 세션 관리, Python 및 JavaScript/TypeScript SDK를 다룹니다.
Use this skill when building real-time, bidirectional streaming applications with the Gemini Live API, or migrating legacy Live models (2.0/2.5/3.1) to Gemini 3.8 Live. Covers WebSocket-based audio/video/text streaming, voice activity detection (VAD), background reasoning (extended thinking), asynchronous function calling, session management, ephemeral tokens, live transcription, and live translation. SDKs covered - google-genai (Python), @google/genai (JavaScript/TypeScript).
실행 점수 미검증
설치 방법 보기이 스킬은 Gemini Live API를 사용해 WebSocket으로 오디오, 영상, 텍스트를 양방향으로 주고받는 실시간 앱을 만드는 일을 돕습니다. 음성 응답, 스트리밍 전사, 70개가 넘는 언어의 실시간 번역, 카메라 영상 전송을 다룹니다. 음성 활동 감지, 응답이 진행되는 동안 도구를 비동기적으로 실행하는 방법, 세션 재개와 대화 맥락 관리도 설명합니다. 이전 Live 모델에서 Gemini 3.8 Live 계열로 옮길 때 필요한 변경 사항도 다루며, Python용 google-genai와 JavaScript/TypeScript용 @google/genai를 안내합니다.
음성 대화 에이전트, 실시간 전사나 번역 기능, 음성과 카메라 영상을 함께 사용하는 앱을 개발할 때 활용할 수 있습니다. 기존 Live API 연동을 새 모델에 맞게 업데이트할 때도 유용합니다.
API 키와 해당 SDK가 필요합니다. Python에서는 google-genai, JavaScript/TypeScript에서는 @google/genai를 사용합니다. 연결은 WebSocket으로 이루어집니다. 이전 SDK인 google-generativeai와 @google/generative-ai는 더 이상 권장되지 않습니다.
이 소개문은 공개된 SKILL.md를 바탕으로 AI(OpenAI Codex)가 작성했습니다. 정확한 사양은 아래 원문을 확인하세요.
AI가 SKILL.md의 내용에서 주의가 필요한 작업과 도입 전제를 확인했습니다. 점수는 실제로 실행한 결과(실행 검증)만으로 매깁니다.
점수에는 넣지 않았습니다. 2026년 10월 30일 기준으로 AI(OpenAI Codex)가 판정했습니다. 참고용이므로 설치 전에 원문도 확인해 주세요.
설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
The Live API enables low-latency, real-time voice and video interactions with Gemini over WebSockets. It processes continuous streams of audio, video, or text to deliver immediate, human-like spoken responses and background reasoning.
Key capabilities:
[!NOTE]
The Live API connects directly via WebSockets. For WebRTC support or simplified integration, use a partner integration.
gemini-3.8-live — Default option for most low-latency voice agent experiences and real-time dialogue without reasoning delays. Supports interleaved reasoning, asynchronous function calling by default (behavior: NON_BLOCKING), and full-session client content updates.gemini-3.8-live-extended-thinking — High-reasoning audio-to-audio model recommended when higher background reasoning is required during live interactions. Processes background reasoning and async tool calls (behavior: NON_BLOCKING required) while streaming continuous spoken conversational fillers; lifecycle managed via interaction_status (IN_PROGRESS vs IDLE).gemini-3.5-transcribe-live — Real-time streaming speech-to-text with interim hypotheses, finalized transcripts, smart formatting, and Hybrid VAD.gemini-3.5-live-translate-preview — Real-time speech-to-speech streaming translation across 70+ languages.[!WARNING]
Legacy Models (gemini-3.1-flash-live-preview,gemini-2.5-flash-native-audio-*,gemini-live-2.5-flash-preview,gemini-2.0-flash-live-001): Readreferences/migration.mdfor breaking protocol changes (behavior: "NON_BLOCKING",thinking_level,interaction_status,send_client_content).
google-genai >= 2.3.0 — pip install -U google-genai@google/genai >= 2.3.0 — npm install @google/genai[!WARNING]
Legacy SDKsgoogle-generativeai(Python) and@google/generative-ai(JS) are deprecated. Never use them.
To streamline real-time audio/video app development, use a third-party integration supporting the Gemini Live API over WebRTC or WebSockets:
audio/pcm;rate=16000[!IMPORTANT]
Usesend_realtime_input/sendRealtimeInputfor all real-time streaming user input (audio, video, and text). On Gemini 3.8 models,send_client_content/sendClientContentis supported across the full session lifecycle with explicit roles (userormodel) to inject conversation context (turn_complete=trueunconditionally interrupts active generation).
[!WARNING]
Do not usemediainsendRealtimeInput. Use the specific keys:audiofor audio data,videofor images/video frames, andtextfor text input.
from google import genai
client = genai.Client(api_key="YOUR_API_KEY")
import { GoogleGenAI } from '@google/genai';
const ai = new GoogleGenAI({ apiKey: 'YOUR_API_KEY' });
from google.genai import types
config = types.LiveConnectConfig(
response_modalities=[types.Modality.AUDIO],
system_instruction=types.Content(
parts=[types.Part(text="You are a helpful assistant.")]
)
)
async with client.aio.live.connect(model="gemini-3.8-live", config=config) as session:
pass # Session is active
const session = await ai.live.connect({
model: 'gemini-3.8-live',
config: {
responseModalities: ['audio'],
systemInstruction: { parts: [{ text: 'You are a helpful assistant.' }] }
},
callbacks: {
onopen: () => console.log('Connected'),
onmessage: (response) => console.log('Message:', response),
onerror: (error) => console.error('Error:', error),
onclose: () => console.log('Closed')
}
});
await session.send_realtime_input(text="Hello, how are you?")
session.sendRealtimeInput({ text: 'Hello, how are you?' });
await session.send_realtime_input(
audio=types.Blob(data=chunk, mime_type="audio/pcm;rate=16000")
)
session.sendRealtimeInput({
audio: { data: chunk.toString('base64'), mimeType: 'audio/pcm;rate=16000' }
});
# frame: raw JPEG-encoded bytes
await session.send_realtime_input(
video=types.Blob(data=frame, mime_type="image/jpeg")
)
session.sendRealtimeInput({
video: { data: frame.toString('base64'), mimeType: 'image/jpeg' }
});
[!IMPORTANT]
A single server event can contain multiple content parts simultaneously (e.g., audio chunks and transcript). Always process all parts in each event to avoid missing content.
async for response in session.receive():
content = response.server_content
if content:
# Audio — process ALL parts in each event
if content.model_turn:
for part in content.model_turn.parts:
if part.inline_data:
audio_data = part.inline_data.data
# Transcription
if content.input_transcription:
print(f"User: {content.input_transcription.text}")
if content.output_transcription:
print(f"Gemini: {content.output_transcription.text}")
# Interruption
if content.interrupted is True:
pass # Stop playback, clear audio queue
// Inside the onmessage callback
const content = response.serverContent;
if (content?.modelTurn?.parts) {
for (const part of content.modelTurn.parts) {
if (part.inlineData) {
const audioData = part.inlineData.data; // Base64 encoded
}
}
}
if (content?.inputTranscription) console.log('User:', content.inputTranscription.text);
if (content?.outputTranscription) console.log('Gemini:', content.outputTranscription.text);
if (content?.interrupted) { /* Stop playback, clear audio queue */ }
Use gemini-3.8-live-extended-thinking when your voice agent must evaluate complex data, plan multiple steps, or handle long-running tools. The model speaks natural conversational fillers (e.g. "Checking flight options now...") while executing asynchronous tools in the background.
Key requirements:
thinking_config=types.ThinkingConfig(thinking_level="low") ("minimal" | "low" | "medium" | "high").behavior="NON_BLOCKING". Synchronous blocking mode is not supported and returns an error.interaction_status): Do not rely on turn_complete=True alone to detect turn completion. Monitor message.interaction_status (Python) / message.interactionStatus (JS):
"IN_PROGRESS": Server is reasoning, speaking conversational fillers, or waiting for async tool responses."IDLE": Server has completed all background reasoning and tool calls; session is ready for user input.See references/migration.md and the Thinking in Live API Guide for complete Python and JavaScript implementation examples.
The Live API supports real-time, low-latency streaming translation of speech (audio) across 70+ languages. For full details on options and capabilities, see the Live Translate Guide.
gemini-3.5-live-translate-preview — The recommended translation model for all Live Translate use cases.TranslationConfig)To enable translation, specify a TranslationConfig object inside your live session setup:
translation_config on LiveConnectConfig:
config = types.LiveConnectConfig(
response_modalities=[types.Modality.AUDIO],
translation_config=types.TranslationConfig(
target_language_code="es", # Target language code (e.g. es, fr, pl)
echo_target_language=True,
),
input_audio_transcription=types.AudioTranscriptionConfig(),
output_audio_transcription=types.AudioTranscriptionConfig(),
)
translationConfig inside generationConfig:
{
"setup": {
"model": "models/gemini-3.5-live-translate-preview",
"generationConfig": {
"responseModalities": ["AUDIO"],
"translationConfig": {
"targetLanguageCode": "es",
"echoTargetLanguage": true
}
}
}
}
The Live API supports real-time streaming speech-to-text over WebSockets with low-latency interim hypotheses, finalized transcripts, and Hybrid VAD. For full details, see the Live Transcription Guide and Colab Cookbook.
gemini-3.5-transcribe-livesmart: cleans up filler words, resolves inline self-corrections, and structures formatting.verbatim (default): exact word-for-word transcript.config = types.LiveConnectConfig(
response_modalities=["TEXT"],
input_audio_transcription=types.AudioTranscriptionConfig(),
)
async with client.aio.live.connect(model="gemini-3.5-transcribe-live", config=config) as session:
# Stream audio
await session.send_realtime_input(audio=types.Blob(data=chunk, mime_type="audio/pcm;rate=16000"))
# Hybrid VAD: notify turn end on client-detected silence for zero latency
await session.send_realtime_input(audio_stream_end=True)
const session = await ai.live.connect({
model: 'gemini-3.5-transcribe-live',
config: {
responseModalities: ['text'],
inputAudioTranscription: { mode: 'smart' }
},
callbacks: {
onmessage: (msg) => {
if (msg.serverContent?.interimInputTranscription) {
console.log('Interim:', msg.serverContent.interimInputTranscription.text);
}
if (msg.serverContent?.inputTranscription) {
console.log('Final:', msg.serverContent.inputTranscription.text);
}
}
}
});
session.sendRealtimeInput({ audio: { data: chunkBase64, mimeType: 'audio/pcm;rate=16000' } });
session.sendRealtimeInput({ audioStreamEnd: true }); // Hybrid VAD
{
"setup": {
"model": "models/gemini-3.5-transcribe-live",
"generationConfig": {
"responseModalities": ["TEXT"],
"speechConfig": {
"voiceConfig": {}
}
},
"inputAudioTranscription": {
"mode": "smart"
}
}
}
TEXT or AUDIO per session, not both. Native audio models output audio (response_modalities=["AUDIO"]); enable output_audio_transcription if you need text transcripts.For step-by-step migration checklists and protocol deltas when upgrading from gemini-3.1-flash-live-preview, gemini-2.5-flash-native-audio-*, or gemini-2.0-flash-live-001 to Gemini 3.8 Live or Gemini 3.8 Live Extended Thinking, read references/migration.md.
send_realtime_input for real-time user input (audio, video, text). Use send_client_content with explicit user/model roles to inject context turns mid-streamaudioStreamEnd / audio_stream_end (Hybrid VAD) when the mic is paused or user finishes speakinginterrupted: true)interaction_status (IN_PROGRESS vs IDLE) when using gemini-3.8-live-extended-thinking rather than relying on turn_complete aloneIf the gemini_search_docs tool (or search_docs) is available, use it as your only documentation source:
gemini_search_docs with your query (or use gemini_get_doc to retrieve a specific doc path)[!IMPORTANT]
When MCP tools are present, never fetch URLs manually. MCP provides up-to-date, indexed documentation that is more accurate and token-efficient than URL fetching.
If no MCP documentation tools are available, fetch from the official docs index:
llms.txt URL: https://ai.google.dev/gemini-api/docs/llms.txt
This index contains links to all documentation pages in .md.txt format. Use web fetch tools to:
llms.txt to discover available documentation pageshttps://ai.google.dev/gemini-api/docs/live-session.md.txt)[!IMPORTANT]
Those are not all the documentation pages. Use thellms.txtindex to discover available documentation pages
The Live API supports 70 languages including: English, Spanish, French, German, Italian, Portuguese, Chinese, Japanese, Korean, Hindi, Arabic, Russian, and many more. Native audio models automatically detect and switch languages.
아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
three.js로 입체 모델을 만들고 회전 가능한 뷰어에서 모든 각도로 확인합니다. OBJ + MTL이나 GLB로 저장해 다른 3D 제작 소프트웨어에서 사용할 수 있습니다.
Audit web accessibility with Chrome DevTools MCP and Lighthouse. Inspect semantic structure, labels, keyboard focus, tap target size, and color contrast, then identify page elements that may need changes based on web.dev guidance.
한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.
개인 작업 목록에 할 일, 기한, 다음 단계, 답변을 기다리는 대상과 진행을 막는 이유를 기록합니다. 진행 상황과 의존 관계를 갱신하고 중복 및 완료 항목을 정리합니다.
Coordinate a task from a verifiable goal through completion. Handle work directly or split independent tasks across separate agent sessions, track progress, verify results, and arrange pull request merging when included in the goal.
한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.
Antigravity가 사용자 지정 항목을 발견하고 불러오는 위치와 우선순위를 알아봅니다. 에이전트 작업 흐름과 외부 도구 연결에 맞춰 스킬, 규칙, 플러그인, 훅, MCP 서버를 선택하고 만드는 방법을 안내합니다.
재생, 일시 정지, 시간 위치 지정이 가능한 HTML 애니메이션을 만듭니다. 장면 길이와 속도를 조절하고 가로형·세로형 영상 내보내기를 준비합니다.