Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Render text to mp3 via Google Gemini Flash TTS. Free-tier eligible (1500 req/day). Use for video narration, demo voiceovers, audio notes. Parallels openai-tts; default for make-viral-video.
.claude/skills/sonichi-gemini-tts/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | -3% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -24% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -38% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 202% | 0% |
| case-11 | ✗→✓ | ▲ Improved | -28% | 0% |
Synthesize speech via Google's gemini-2.5-flash-preview-tts (or -pro-tts / -lite-preview-tts per env override). Reads GEMINI_API_KEY from .env.
This is offline synthesis — distinct from voice-agent's bidirectional Gemini Live audio. Same model family, different surface (POST text → get audio bytes back, no streaming).
Usage: /gemini-tts [text]
ARGUMENTS: $ARGUMENTS
Aoede (default — alto, neutral), Charon (baritone, news-anchor), Kore (mid, expressive), Puck (high, conversational). Per Lucy's 2026-05-09 testing: Aoede is the closest match to OpenAI's sage.
Inline bracket tags like [whispers], [excitedly], [slowly] are interpreted as stylistic direction, not spoken literally. Empirically verified against gemini-2.5-flash-preview-tts (per PR #646 comment): [whispers] hello → 1.05s audio; hello alone → 1.01s. If the tag were spoken literally as 8 words, the clip would be ~5× longer.
bashbash "$SKILL_DIR/scripts/synthesize.sh" -- "[whispers] Pull request 691 has landed."
Default: gemini-2.5-flash-preview-tts (free tier, 1500 req/day, $0 within quota).
Override via GEMINI_TTS_MODEL env var:
gemini-2.5-pro-tts — paid, higher fidelitygemini-2.5-flash-lite-preview-tts — preview, fastergemini-3.1-flash-tts-preview — previewbashbash "$SKILL_DIR/scripts/synthesize.sh" -- "Hello, this is Sutando." bash "$SKILL_DIR/scripts/synthesize.sh" --voice Charon --out /tmp/intro.mp3 -- "Hi." GEMINI_TTS_MODEL=gemini-2.5-pro-tts bash "$SKILL_DIR/scripts/synthesize.sh" -- "High-fidelity narration."
Default output path: results/gemini-tts-{epoch}.mp3.
Free tier: $0 within 1500 req/day quota. For our cadence (a few demos a day), stays free indefinitely. Paid (Flash): $0.50 / 1M input tokens + $10.00 / 1M output tokens.
Compared to OpenAI TTS (gpt-4o-mini-tts) at ~$0.02 per 60s: Gemini Flash is free-equivalent for typical demo workloads.
The make-viral-video skill auto-falls-back to OpenAI TTS when:
GEMINI_API_KEY missingTTS_PROVIDER=OPENAI env override setIf ARGUMENTS is empty, ask the user for the text. Otherwise:
bashbash "$SKILL_DIR/scripts/synthesize.sh" -- "$ARGUMENTS"
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 7,173 | 6,958 | -3% | 1 | 1 | 0% | 1,173 | 1,021 | -13% | 0 | 0 | — |
case-02 | fail→fail | 2,909 | 7,304 | +151% | 1 | 1 | 0% | 337 | 1,135 | +237% | 0 | 0 | — |
case-03 | fail→pass | 6,407 | 1,884 | -71% | 1 | 1 | 0% | 1,080 | 1,051 | -3% | 0 | 0 | — |
case-04 | pass→pass | 18,261 | 10,728 | -41% | 1 | 1 | 0% | 3,458 | 2,715 | -21% | 0 | 0 | — |
case-05 | pass→pass | 12,374 | 8,942 | -28% | 1 | 1 | 0% | 2,275 | 2,330 | +2% | 0 | 0 | — |
case-06 | pass→pass | 12,853 | 9,582 | -25% | 1 | 1 | 0% | 2,026 | 2,230 | +10% | 0 | 0 | — |
case-07 | pass→pass | 6,399 | 1,249 | -80% | 1 | 1 | 0% | 919 | 938 | +2% | 0 | 0 | — |
case-08 | fail→pass | 7,041 | 1,423 | -80% | 1 | 1 | 0% | 1,302 | 992 | -24% | 0 | 0 | — |
case-09 | fail→pass | 9,687 | 1,868 | -81% | 1 | 1 | 0% | 1,759 | 1,089 | -38% | 0 | 0 | — |
case-10 | fail→pass | 3,099 | 1,957 | -37% | 1 | 1 | 0% | 365 | 1,103 | +202% | 0 | 0 | — |
case-11 | fail→pass | 8,556 | 1,443 | -83% | 1 | 1 | 0% | 1,414 | 1,015 | -28% | 0 | 0 | — |
case-12 | fail→fail | 8,657 | 6,496 | -25% | 1 | 1 | 0% | 1,391 | 1,066 | -23% | 0 | 0 | — |
case-13 | fail→pass | 9,513 | 1,656 | -83% | 1 | 1 | 0% | 1,364 | 1,043 | -24% | 0 | 0 | — |
case-14 | fail→fail | 3,898 | 5,441 | +40% | 1 | 1 | 0% | 500 | 1,074 | +115% | 0 | 0 | — |
case-15 | fail→pass | 3,822 | 1,533 | -60% | 1 | 1 | 0% | 495 | 1,017 | +105% | 0 | 0 | — |
case-16 | fail→fail | 7,678 | 5,892 | -23% | 1 | 1 | 0% | 1,247 | 1,012 | -19% | 0 | 0 | — |
case-17 | fail→fail | 5,598 | 6,164 | +10% | 1 | 1 | 0% | 788 | 1,131 | +44% | 0 | 0 | — |
case-18 | fail→pass | 8,628 | 1,594 | -82% | 1 | 1 | 0% | 1,231 | 970 | -21% | 0 | 0 | — |
case-19 | fail→pass | 4,589 | 1,371 | -70% | 1 | 1 | 0% | 653 | 939 | +44% | 0 | 0 | — |
case-20 | fail→pass | 11,750 | 2,748 | -77% | 1 | 1 | 0% | 1,694 | 1,200 | -29% | 0 | 0 | — |
case-21 | pass→pass | 6,823 | 1,369 | -80% | 1 | 1 | 0% | 1,079 | 975 | -10% | 0 | 0 | — |
case-22 | pass→pass | 13,646 | 3,386 | -75% | 1 | 1 | 0% | 1,921 | 1,299 | -32% | 0 | 0 | — |
case-23 | fail→pass | 10,065 | 1,861 | -82% | 1 | 1 | 0% | 1,384 | 998 | -28% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 17 counted toward the lift figure. The other 6 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +48 percentage points is the difference between those two pass rates over the 17 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.