# Gemini Tts

> Generate speech from text using Google Gemini TTS. Use when creating voiceovers, narration, podcasts, or any text-to-speech task. Supports 70+ languages, style/emotion control via natural language prompts, and 30 prebuilt voices. Trigger on "Gemini TTS", "Google TTS", "voiceover", "narration", "text to speech", "speech generation".

- **Type:** Skill
- **Install:** `agentstack add skill-memex-lab-product-launch-video-skill-gemini-tts`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [memex-lab](https://agentstack.voostack.com/s/memex-lab)
- **Installs:** 0
- **Category:** [Content & Media](https://agentstack.voostack.com/c/content-and-media)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [memex-lab](https://github.com/memex-lab)
- **Source:** https://github.com/memex-lab/product-launch-video-skill/tree/main/skills/gemini-tts
- **Website:** https://www.memexlab.ai/

## Install

```sh
agentstack add skill-memex-lab-product-launch-video-skill-gemini-tts
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Gemini Text-to-Speech

Generate natural, expressive speech from text using Google Gemini TTS. Supports 70+ languages, 30 prebuilt voices, and style control via natural language prompts and audio tags.

> **Requirements:** Node.js 18+, ffmpeg, `@google/genai` npm package, `GEMINI_API_KEY` env var.

## Available Scripts

- **`scripts/generate-tts.mjs`** — All-in-one TTS generator with single-request consistency, silence-based splitting, and automatic trimming.

## Quick Start

### Single text to speech

```bash
npm install @google/genai
GEMINI_API_KEY=your-key node scripts/generate-tts.mjs \
  --text "Hello, welcome to our product!" \
  --output-dir public/vo \
  --voice Kore
```

### Multi-segment voiceover (consistent voice)

Create a `segments.json`:

```json
[
  { "id": "intro", "text": "Welcome to our product launch." },
  { "id": "features", "text": "Here are the three features you will love." },
  { "id": "close", "text": "Get started today at our website." }
]
```

Run:

```bash
GEMINI_API_KEY=your-key node scripts/generate-tts.mjs \
  --segments segments.json \
  --output-dir public/vo \
  --voice Kore \
  --director-notes "Tone: Warm, confident, inspiring. Style: Professional narrator with a vocal smile. Accent: Neutral American English. Pacing: Moderate."
```

Output (JSON to stdout):

```json
{
  "success": true,
  "segments": [
    { "id": "intro", "file": "public/vo/vo-intro.mp3", "duration": 3.25 },
    { "id": "features", "file": "public/vo/vo-features.mp3", "duration": 4.10 },
    { "id": "close", "file": "public/vo/vo-close.mp3", "duration": 2.80 }
  ],
  "totalDuration": 10.15,
  "fullAudioFile": "public/vo/vo-full.wav"
}
```

### Script Options

| Flag | Default | Description |
|------|---------|-------------|
| `--segments FILE` | — | JSON file with `[{id, text}]` segment definitions |
| `--text TEXT` | — | Single text to generate (alternative to `--segments`) |
| `--output-dir DIR` | — | Output directory for audio files (required) |
| `--voice NAME` | `Kore` | Prebuilt voice name (see Voices table) |
| `--model NAME` | `gemini-3.1-flash-tts-preview` | Gemini TTS model ID |
| `--director-notes TEXT` | — | Performance guidance: style, pacing, accent, breathing, articulation. Does not control gender/age (use `--voice` for that). |
| `--retries N` | `3` | Max retry attempts for API errors |
| `--trim` / `--no-trim` | `--trim` | Trim silence from segment boundaries |
| `--format FORMAT` | `mp3` | Output format: `mp3` or `wav` |

### Exit Codes

| Code | Meaning |
|------|---------|
| 0 | Success |
| 1 | Missing required arguments or env vars |
| 2 | API error after retries exhausted |
| 3 | ffmpeg not installed or processing failed |
| 4 | File I/O error |

## How It Works (Multi-Segment)

Gemini TTS does NOT guarantee voice consistency across separate API requests. The script solves this by:

1. Combining all segments into ONE prompt with `[3 second pause]` markers between them
2. Generating a single continuous audio file in one API call
3. Detecting silence gaps with ffmpeg `silencedetect` using adaptive thresholds (starts at noise=-35dB, d=1.5s, progressively relaxes). If an exact match is found, uses it directly. If a threshold jump occurs (too few → too many), regenerates audio with faster speech pacing to make inter-segment pauses more distinct, then retries detection.
4. Splitting at silence midpoints into individual segment files
5. Trimming residual silence padding (~1.5s per side) from each segment, keeping 0.15s breathing room

## Models

| Model | Best For |
|-------|----------|
| `gemini-3.1-flash-tts-preview` | Latest, most controllable, 200+ audio tags (default) |
| `gemini-2.5-flash-preview-tts` | Fast, good quality, general use |
| `gemini-2.5-pro-preview-tts` | Highest quality, complex performances |

## Voices

30 prebuilt voices:

| Voice | Gender | Character | Pitch |
|-------|--------|-----------|-------|
| Achernar | Female | Soft | Higher |
| Achird | Male | Friendly | Lower middle |
| Algenib | Male | Gravelly | Lower |
| Algieba | Male | Smooth | Lower |
| Alnilam | Male | Firm | Lower middle |
| Aoede | Female | Breezy | Middle |
| Autonoe | Female | Bright | Middle |
| Callirrhoe | Female | Easy-going | Middle |
| Charon | Male | Informative | Lower |
| Despina | Female | Smooth | Middle |
| Enceladus | Male | Breathy | Lower |
| Erinome | Female | Clear | Middle |
| Fenrir | Male | Excitable | Lower middle |
| Gacrux | Female | Mature | Middle |
| Iapetus | Male | Clear | Lower middle |
| Kore | Female | Firm | Middle |
| Laomedeia | Female | Upbeat | Higher |
| Leda | Female | Youthful | Higher |
| Orus | Male | Firm | Lower middle |
| Puck | Male | Upbeat | Middle |
| Pulcherrima | Male | Forward | Middle |
| Rasalgethi | Male | Informative | Middle |
| Sadachbia | Male | Lively | Lower |
| Sadaltager | Male | Knowledgeable | Middle |
| Schedar | Male | Even | Lower middle |
| Sulafat | Female | Warm | Middle |
| Umbriel | Male | Easy-going | Lower middle |
| Vindemiatrix | Female | Gentle | Middle |
| Zephyr | Female | Bright | Higher |
| Zubenelgenubi | Male | Casual | Lower middle |

## Director's Notes (`--director-notes`)

Performance guidance for the selected voice. Define only what matters — overspecifying limits the model's creativity and can worsen results.

The three most common directions are Style, Pacing, and Accent, but you can include any custom instructions relevant to the performance.

- **Style** — Emotional quality and delivery character. Be descriptive: `"Infectious enthusiasm — the listener should feel part of something exciting"` works better than just `"energetic"`. You can layer characteristics and use voiceover industry terms like "vocal smile".
- **Pacing** — Overall speed and rhythm variation. Can range from `"Speak as fast as possible"` to `"Incredibly slow and liquid, words bleed into each other, zero urgency"`.
- **Accent** — Be specific. `"British English as heard in Croydon, England"` works much better than `"British accent"`.

```bash
--director-notes "Style: Enthusiastic and sassy GenZ beauty YouTuber. Pacing: Extremely fast, rapid delivery like short-form video influencers. Accent: Southern California valley girl from Laguna Beach."
```

## Audio Tags

Inline `[brackets]` in segment text for per-word control. Override director-notes locally.

`[whispers]` `[shouting]` `[excited]` `[serious]` `[short pause]` `[laughs]` `[very fast]` `[very slow]` `[sarcastic]` `[curious]`

Creative tags work too: `[like dracula]`, `[whispering conspiratorially]`

Example: `"[excited] This changes everything! [short pause] Let me show you how."`

## References

- [Prompting Guide](references/prompting-guide.md) — Advanced prompt engineering for style, emotion, and accent

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [memex-lab](https://github.com/memex-lab)
- **Source:** [memex-lab/product-launch-video-skill](https://github.com/memex-lab/product-launch-video-skill)
- **License:** MIT
- **Homepage:** https://www.memexlab.ai/

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-memex-lab-product-launch-video-skill-gemini-tts
- Seller: https://agentstack.voostack.com/s/memex-lab
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
