# Text to Speech AI - 21 Natural Voices, 8 Languages (`andrew_babo/kokoro-tts`) Actor

Convert text into natural speech with 21 AI voices across English, Spanish, French, Italian, Portuguese, Hindi, Japanese and Chinese. Speed control, long text support, MP3/WAV/Opus download. No rental fee - you pay Apify compute only.

- **URL**: https://apify.com/andrew\_babo/kokoro-tts.md
- **Developed by:** [Andrew Babo](https://apify.com/andrew_babo) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Text to Speech AI — 21 Natural Voices, 8 Languages

Turn any text into natural-sounding speech in seconds. Paste your text, pick a voice, get a ready-to-use audio file (MP3, WAV or Opus) you can drop straight into a video, podcast, app or website.

**Good for:** YouTube / TikTok / Reels voiceovers, e-learning narration, product demos, audiobooks, IVR and phone prompts, accessibility read-aloud, app notifications.

### Quick start

```json
{
  "text": "Hello! This audio was generated automatically.",
  "voice": "af_heart",
  "format": "mp3"
}
```

Run it and you get back an audio file URL in the run's storage — no setup, no API key, no external account.

### What you get

- **21 voices** across English, Spanish, French, Italian, Portuguese, Hindi, Japanese and Chinese
- **Male and female** voices, several accents per language
- **Long text supported** — the Actor handles the splitting and joins the audio seamlessly
- **Speed control** from slow narration to fast reads
- **MP3, WAV or Opus** output, ready for editing software
- **Fast warm mode** so repeated requests answer almost instantly

### Input

| Field | Default | What it does |
|---|---|---|
| `text` | required | The text you want spoken |
| `voice` | `af_heart` | Which voice to use |
| `lang` | auto | Force a language if your text mixes several |
| `speed` | `1.0` | `0.5` = slower, `1.5` = faster |
| `format` | `wav` | `wav`, `mp3` or `opus` |
| `precision` | `fp32` | Use `int8` to trade a little quality for more speed |

### Output

Each run stores the audio file and adds one dataset row with the audio URL, duration, voice used and processing time — easy to plug into Make, Zapier, n8n or your own backend.

### Pricing

No rental fee. You only pay Apify platform compute, which is typically a fraction of a cent per short clip.

### Notes

- For **Vietnamese**, use the Vietnamese Text to Speech Actor instead — this one is not trained on Vietnamese.
- Generated voices are synthetic. Make sure your use complies with the rules of the platform you publish on.

# Actor input Schema

## `text` (type: `string`):

Required text to synthesize. Kokoro automatically splits long text to respect its phoneme limit. Maximum 20,000 characters.

## `voice` (type: `string`):

Which speaker voice to use for the generated audio.

## `lang` (type: `string`):

espeak language code, e.g. en-us, en-gb, es, fr-fr. Leave empty to derive it from the voice.

## `speed` (type: `string`):

Speech rate multiplier. 1.0 is the natural pace of the voice.

## `precision` (type: `string`):

Which quantization of the Kokoro ONNX graph to run.

## `format` (type: `string`):

Container/codec of the returned audio file.

## `chunk_chars` (type: `integer`):

Kokoro caps at 510 phoneme tokens per pass; keep chunks small.

## `chunk_parallel` (type: `integer`):

How many chunks to synthesize at the same time. 0 lets the Actor pick based on available CPU cores.

## Actor input object example

```json
{
  "text": "Hello! This audio was generated by Kokoro running on Apify.",
  "voice": "af_heart",
  "speed": "1.0",
  "precision": "fp32",
  "format": "wav",
  "chunk_chars": 300,
  "chunk_parallel": 0
}
```

# Actor output Schema

## `audio` (type: `string`):

Generated audio record stored in the run's key-value store (audio.wav / audio.mp3 / audio.ogg).

## `metrics` (type: `string`):

Dataset rows with engine, duration, synthesis time, RTF, peak RAM and the audio URL.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "text": "Hello! This audio was generated by Kokoro running on Apify."
};

// Run the Actor and wait for it to finish
const run = await client.actor("andrew_babo/kokoro-tts").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "text": "Hello! This audio was generated by Kokoro running on Apify." }

# Run the Actor and wait for it to finish
run = client.actor("andrew_babo/kokoro-tts").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "text": "Hello! This audio was generated by Kokoro running on Apify."
}' |
apify call andrew_babo/kokoro-tts --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,andrew_babo/kokoro-tts"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/GCH9KiuRUi7wuRhuf/builds/dVcNLPuSElaYnyYy3/openapi.json
