---
title: "generate_voiceover: Generate voice-over"
description: "Start a voice-over generation from text."
canonical_url: "https://meetkuro.com/agents/tools/generate_voiceover/"
updated: 2026-11-03
locale: "en"
tool: "generate_voiceover"
scopes: ["generation.write"]
---

# generate_voiceover

**Generate voice-over**

Start a voice-over generation from text. This spends credits, or runs on the user's own key, and returns immediately. Pass `subject` to read in the voice bound to one of the account's Subjects — her model, voice, delivery and language — or pick `model` and `voice` yourself; omit both to use the default model's default voice.
Lines of one script must sound like one take: generate the whole script once and cut it, or keep the model, voice and delivery fixed across lines.
Models:
- elevenlabs-tts (Eleven v3): ~8.5 per 1,000 chars; up to 3000 chars; default voice Rachel; controls language/speed; custom voice ids
- eleven-v4 (Eleven v4): ~7 per 1,000 chars; up to 4000 chars; default voice JBFqnCBsd6RMkjVDRZzb; controls language; custom voice ids; stitches lines (continues_from)
- gemini-3.1-flash-tts (Gemini 3.1 Flash TTS): ~11 per 1,000 chars; up to 4000 chars; default voice Kore; controls style prompt/language
- kokoro-82m (Kokoro 82M): ~0.5 per 1,000 chars; up to 4000 chars; default voice af_bella; controls speed
- minimax-speech-2.8-hd (MiniMax Speech 2.8 HD): ~4.5 per 1,000 chars; up to 4000 chars; default voice Wise_Woman; controls language/speed/emotion; custom voice ids
- inworld-tts-2 (Inworld TTS 2.0): ~2.5 per 1,000 chars; up to 2000 chars; default voice Ashley; controls language/speed; custom voice ids

## Scope

- `generation.write` — Makes, edits, imports, shares and deletes media in the account.

## Behaviour

- **Writes**: Creates or changes items in the caller's own account.
- **Adds or updates**: Adds or updates; nothing the caller already has is deleted or overwritten.
- **Stays in the account**: Stays inside the caller's private Kuro account: any media provider it calls acts on Kuro's account, and the result is visible to no one else.

## Credits

What the tool's description says about credits, verbatim:

- This spends credits, or runs on the user's own key, and returns immediately.

## Inputs

| Name | Type | Required | Details |
| --- | --- | --- | --- |
| `text` | string | yes | The words to speak. Each model has its own ceiling, shown in its roster line ("up to N chars"); a longer script is split into lines. — at least 1 character; at most 4000 characters |
| `idempotency_key` | string | no | Optional. Pass the same value to retry one operation without spending twice; omit it for a new operation. Different arguments under a reused key are refused. — at least 1 character; at most 128 characters |
| `subject` | string | no | A Subject's name or id. Reads in her bound voice; model, voice, style_prompt and language_code then come from the binding and may not be passed. — at least 1 character; at most 120 characters |
| `model` | string | no | one of "elevenlabs-tts", "eleven-v4", "gemini-3.1-flash-tts", "kokoro-82m", "minimax-speech-2.8-hd", "inworld-tts-2" |
| `voice` | string | no | at least 1 character; at most 120 characters |
| `style_prompt` | string | no | at most 4000 characters |
| `language_code` | string | no | at least 2 characters; at most 35 characters |
| `speed` | number | no | ≥ 0.1; ≤ 5 |
| `emotion` | string | no | one of "auto", "neutral", "happy", "sad", "angry", "fearful", "disgusted", "surprised", "calm" |
| `continues_from` | array of string | no | The generation ids of up to three earlier lines of the same script, oldest first, on a model whose roster line says it stitches; keeps the voice continuous across separately generated lines. Same model and voice as those lines. — at least 1 item; at most 3 items |
| `runs_on` | string | no | Who pays: "credits", or one of the user's own keys by vendor (get_credits lists them). Leave out to follow their payer order; set it only when the user chose. — one of "credits", "replicate", "fal", "siray", "runware", "higgsfield", "sunra", "comfy" |

## Example call

A `tools/call` request with the required arguments only, each a placeholder read off the schema. Replace them before sending.

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "generate_voiceover",
    "arguments": {
      "text": "<text>"
    }
  }
}
```

## Input schema

As the server sends it in `tools/list`:

```json
{
  "type": "object",
  "properties": {
    "idempotency_key": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "Optional. Pass the same value to retry one operation without spending twice; omit it for a new operation. Different arguments under a reused key are refused."
    },
    "text": {
      "type": "string",
      "minLength": 1,
      "maxLength": 4000,
      "description": "The words to speak. Each model has its own ceiling, shown in its roster line (\"up to N chars\"); a longer script is split into lines."
    },
    "subject": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120,
      "description": "A Subject's name or id. Reads in her bound voice; model, voice, style_prompt and language_code then come from the binding and may not be passed."
    },
    "model": {
      "type": "string",
      "enum": [
        "elevenlabs-tts",
        "eleven-v4",
        "gemini-3.1-flash-tts",
        "kokoro-82m",
        "minimax-speech-2.8-hd",
        "inworld-tts-2"
      ]
    },
    "voice": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "style_prompt": {
      "type": "string",
      "maxLength": 4000
    },
    "language_code": {
      "type": "string",
      "minLength": 2,
      "maxLength": 35
    },
    "speed": {
      "type": "number",
      "minimum": 0.1,
      "maximum": 5
    },
    "emotion": {
      "type": "string",
      "enum": [
        "auto",
        "neutral",
        "happy",
        "sad",
        "angry",
        "fearful",
        "disgusted",
        "surprised",
        "calm"
      ]
    },
    "continues_from": {
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid"
      },
      "minItems": 1,
      "maxItems": 3,
      "description": "The generation ids of up to three earlier lines of the same script, oldest first, on a model whose roster line says it stitches; keeps the voice continuous across separately generated lines. Same model and voice as those lines."
    },
    "runs_on": {
      "type": "string",
      "enum": [
        "credits",
        "replicate",
        "fal",
        "siray",
        "runware",
        "higgsfield",
        "sunra",
        "comfy"
      ],
      "description": "Who pays: \"credits\", or one of the user's own keys by vendor (get_credits lists them). Leave out to follow their payer order; set it only when the user chose."
    }
  },
  "required": [
    "text"
  ],
  "additionalProperties": false
}
```

## Related tools

- [`quote_generation`](https://meetkuro.com/agents/tools/quote_generation.md): Price a request exactly, and compare it to the balance, without creating anything.
- [`cast_voice`](https://meetkuro.com/agents/tools/cast_voice.md): Read a portrait already in the account and return the voices that suit it, best first.
- [`list_voices`](https://meetkuro.com/agents/tools/list_voices.md): The voices this account saved from a provider, newest first, each with the id to pass as generate_voiceover's voice, plus which providers this server can save from.

---

## About Kuro

Kuro is an AI picture studio: prompt-driven images, clips, voice-overs and music, and storyboard-backed films with consistent characters across every scene.

Agents connect over MCP and can generate directly:

```
claude mcp add kuro https://api.meetkuro.com/mcp --transport http
```

The app is at https://app.meetkuro.com and requires an account.

Each guide, model page, comparison and free tool page on this site (not a tool's variants, and not the index pages) has a Markdown twin at its own URL plus `.md`, and so do /benchmarks/, the English /agents/ page (as /agents.md) and the MCP tool reference. Every tool: https://meetkuro.com/agents/tools/
