Skip to main content

Gemini 3.8 Flash (Understanding + TTS)

Two Google Gemini 3.8 models share one key (GEMINI_API_KEY, the same one used by Nano Banana, Veo and Gemini Omni):

CLI modelServiceModel idWhat it does
gemini-3.8-flashunderstandgemini-3.8-flashText, image, video, audio and PDF in → text out
gemini-3.8-flash-ttsttsgemini-3.8-flash-ttsMost expressive speech, 130+ languages, two-speaker dialogue
gemini-3.8-flash-lite-ttsttsgemini-3.8-flash-lite-ttsFaster, lower-cost speech, 100+ languages

Google-only, cloud-only: there are no open weights.

export GEMINI_API_KEY="your_api_key"

Understanding — gemini-3.8-flash​

Google's most capable Flash model (stable since 2 Sep 2026): 1,048,576-token context, 65,536 max output tokens. For flagship reasoning, long decode, and agentic video on long clips, use Gemini 4 Argon (gemini-4-argon).

Fashion uses: attribute extraction from look photos, lookbook and runway video review, reading care labels and size charts from PDFs, voice-note briefs.

opentryon understand --model gemini-3.8-flash \
--image look1.jpg look2.jpg --prompt "Compare the two outfits: garments, colours, fabrics."

opentryon understand --model gemini-3.8-flash \
--video runway.mp4 --prompt "Summarise the collection and list each look's key pieces." \
--thinking-level low

opentryon understand --model gemini-3.8-flash --pdf size_chart.pdf --prompt "Extract the size table as JSON."
FlagNotes
--image, --video, --audio, --pdfOne or more inputs each (path or URL); mix freely in one call
--prompt, --systemQuestion and optional system instruction
--thinking-levellow, medium or high. minimal is not supported and the API rejects it
--max-tokensOutput cap, at most 65,536

Inputs larger than about 18 MB go through the Files API automatically (the adapter waits until the upload is ACTIVE). YouTube links are passed straight to Gemini. gs:// and Files API URIs are used as-is.

from tryon.api.gemini import GeminiUnderstandAdapter

out = GeminiUnderstandAdapter().understand(
image="look.jpg",
prompt="List garments, colours and fabrics.",
thinking_level="low",
)
print(out["text"], out["usage"])

Notes: thinking_level="medium" is sent as-is even if your installed google-genai predates it (the SDK's enum may not list it; the adapter silences that cosmetic warning). Planner pin: gemini 3.8 flash / gemini-3.8-flash; the understand default stays kimi-k2.6. MCP tool: understand_gemini_3_8_flash.

Text-to-speech — gemini-3.8-flash-tts / gemini-3.8-flash-lite-tts​

Text in, audio out. The adapter calls the Gemini Interactions endpoint (POST /v1beta/interactions) over plain REST, so it works regardless of your google-genai version (Google recommends ≥ 2.25.0 for the SDK).

  • 30 prebuilt voices — Zephyr, Puck, Charon, Kore (default), Fenrir, Leda, Orus, Aoede, Callirrhoe, Autonoe, Enceladus, Iapetus, Umbriel, Algieba, Despina, Erinome, Algenib, Rasalgethi, Laomedeia, Achernar, Alnilam, Schedar, Gacrux, Pulcherrima, Achird, Zubenelgenubi, Vindemiatrix, Sadachbia, Sadaltager, Sulafat — plus the extended voice library and custom voice_... / voicekey_... ids from Google's voice design / replication features.
  • Style, not stage directions. The transcript is read verbatim. Put delivery direction (emotion, pace, accent) in --style; put momentary events inline as English tags such as <sigh>, <laugh>, <short pause>, <long pause>.
  • Output. 24 kHz mono 16-bit WAV by default. --audio-format audio/l16 (raw PCM), audio/mulaw or audio/alaw with --sample-rate 24000|16000|8000 for telephony/IVR.
  • Two speakers per request, prebuilt voices only. For more characters, or to mix custom voices, synthesize each turn separately.
opentryon tts --model gemini-3.8-flash-tts \
--text "Welcome to the spring collection <short pause> linen is back." \
--voice Puck --style "warm, upbeat, a little amused"

# Two-speaker dialogue
cat > turns.json <<'JSON'
[
{"speaker": "Joe", "text": "Which look is your favourite?", "style": "curious"},
{"speaker": "Jane", "text": "The linen set, by far.", "style": "relaxed"}
]
JSON
opentryon tts --model gemini-3.8-flash-lite-tts \
--dialogue turns.json --speaker Joe=Puck Jane=Kore
from tryon.api.gemini import GeminiTTSAdapter

adapter = GeminiTTSAdapter() # gemini-3.8-flash-tts
open("hello.wav", "wb").write(adapter.generate_speech("Have a wonderful day!", voice="Kore", style="cheerful"))
open("dialogue.wav", "wb").write(adapter.generate_dialogue(
[{"speaker": "Joe", "text": "Hi Jane!"}, {"speaker": "Jane", "text": "Hey Joe."}],
speakers={"Joe": "Puck", "Jane": "Kore"},
))

Notes: MCP tools tts_gemini_3_8_flash_tts and tts_gemini_3_8_flash_lite_tts. Planner pins: gemini tts, gemini 3.8 flash tts, gemini lite tts (a bare TTS request still defaults to eleven-v4). Compare with ElevenLabs Eleven v4, which offers cloned voices and 90+ languages. Not yet wired: the GET /v1beta/voices listing and voice design / replication endpoints (use a voice_... id you created elsewhere).

References: Gemini 3.8 Flash · Speech generation · Thinking