# Fish Audio Drama 3

> Run Fish Audio Drama 3 by fish-audio online or via API. Pay per run, no setup.

**URL:** https://inference.sh/apps/fish-audio/drama-3
**Last updated:** 2026-10-15

---

Fish Audio Drama 3 text to speech. Direct the delivery in plain language, add laughs and sighs, clone a voice from a clip, or voice a dialogue. 80+ languages.

- app: `fish-audio/drama-3`
- maker: [fish-audio](https://inference.sh/apps/fish-audio.md)
- category: [audio](https://inference.sh/apps/category/audio.md)
- input → output: text → speech
- tasks: [text to speech](https://inference.sh/apps/tag/text-to-speech.md), [voice cloning](https://inference.sh/apps/tag/voice-cloning.md)
- price: $50.00/1M UTF-8 bytes
- runs via: api, javascript and python sdk, belt cli, mcp

## drama-3 API Guide

### About
fish audio drama 3 text to speech. direct the delivery in plain language, add laughs and sighs, clone a voice from a clip, or voice a dialogue. 80+ languages.

### 1. Calling the API

#### Install the Client

```bash
pip install inferencesh
```

#### Setup Your API Key
Set `INFERENCE_API_KEY` as an environment variable. Get your key from settings → api keys.

```bash
export INFERENCE_API_KEY="inf_your_key"
```

#### Run and Get Result

```python
import os
from inferencesh import inference

client = inference(api_key=os.environ["INFERENCE_API_KEY"])


result = client.run({
        "app": "fish-audio/drama-3@678h4stx",
        "input": {
            "text": "text",
            "voice_ids": [
                "bf322df2096a46f18c579d0baa36f41d"
            ]
        }
    })

print(result["output"])
```

#### Stream Live Updates

```python
import os
from inferencesh import inference

client = inference(api_key=os.environ["INFERENCE_API_KEY"])


## stream=True yields updates as they arrive
for update in client.run({
        "app": "fish-audio/drama-3@678h4stx",
        "input": {
            "text": "text",
            "voice_ids": [
                "bf322df2096a46f18c579d0baa36f41d"
            ]
        }
    }, stream=True):
    if update.get("progress"):
        print(f"progress: {update['progress']}%")
    if update.get("output"):
        print(f"output: {update['output']}")
```

### 2. Authentication
The API uses API keys for authentication. See the authentication docs for detailed setup instructions.

### 3. Files

#### Automatic Upload

```python
## local file paths are automatically uploaded
result = client.run({
    "app": "fish-audio/drama-3@678h4stx",
    "input": {
        "image": "/path/to/local/image.png",  # detected & uploaded
        "audio": "https://example.com/audio.mp3",  # url passed through
    }
})
```

#### Manual Upload

```python
## upload and get a hosted URL
file = client.files.upload("/path/to/file.png")
print(file.uri)  # https://cloud.inference.sh/...
```

### 4. Schema

#### Input
- **text** (string) *required*: What to say, and how. Bracketed directions and sounds are performed, not read: [barely holding it together] I'm fine. [small laugh] Paired tags shape specific words: <whisper>, <emphasis>, <soft>, <fast>, <slow>, <stress>, <forceful>. For dialogue, mark turns with <|speaker:0|>, <|speaker:1|>, ... matching the order of voice_ids.
- **voice_ids** (array): Fish Audio voice ids (from fish.audio). One id for a single voice; several for a dialogue, one per speaker tag in order. Empty: the model picks a voice.
- **reference_audio** (string): A clip of the voice to clone: 10 to 30 seconds of clear speech, WAV, MP3 or FLAC. Use it instead of voice_ids.
- **reference_text** (string): Exact transcript of reference_audio. Required with it.
- **format** (string): Audio format. pcm is raw 16-bit mono.
- **sample_rate** (integer): Sample rate in Hz. Empty: 44100, or 48000 for opus. mp3 takes 32000 or 44100; opus only 48000.
- **speed** (number): Speaking speed, 0.5 to 2.
- **temperature** (number): Sampling temperature, 0 to 1. Higher is more varied. Empty: Fish Audio's default.
- **top_p** (number): Nucleus sampling, 0 to 1. Empty: Fish Audio's default.
- **normalize** (boolean): Normalize numbers and symbols in English and Chinese text before speaking.
- **latency** (string): normal for best quality; balanced and low trade quality for a faster start.

#### Output
- **audio** (string): The generated speech.

## other audio apps

- [Eleven Flash v2.5](https://inference.sh/apps/elevenlabs/eleven-flash-v2-5.md): $0.04/1K characters
- [Eleven Multilingual v2](https://inference.sh/apps/elevenlabs/eleven-multilingual-v2.md): $0.08/1K characters
- [Eleven v3](https://inference.sh/apps/elevenlabs/eleven-v3.md): $0.08/1K characters
- [Eleven v4 Turbo](https://inference.sh/apps/elevenlabs/eleven-v4-turbo.md): $0.04/1K characters
- [Eleven v4](https://inference.sh/apps/elevenlabs/eleven-v4.md): $0.08/1K characters

## faq

### how much does Fish Audio Drama 3 cost?

$50.00/1M UTF-8 bytes. you pay per run from your inference shell credits. no subscription is required.

### how do I run Fish Audio Drama 3 via api?

call fish-audio/drama-3 with the javascript or python sdk, the rest api, or `belt app run fish-audio/drama-3` from a terminal. the api reference on this page lists every input.

### who makes Fish Audio Drama 3?

Fish Audio Drama 3 is made by fish-audio and runs on inference shell. every fish-audio app is listed at https://inference.sh/apps/fish-audio.

### can my agent use Fish Audio Drama 3?

yes. agents call it as a tool through the inference shell mcp server (https://api.inference.sh/mcp), the belt cli or the sdk, and pay per run like you do.

### what are the alternatives to Fish Audio Drama 3?

other audio apps on inference shell include Eleven Flash v2.5, Eleven Multilingual v2, Eleven v3, Eleven v4 Turbo. they run through the same api, so switching is a one-line change.
