Built for voice agents that can't wait 600ms

Fish Audio: Fish Audio Drama 3

fish/drama-3
active tts 1 provider
Playground

Fish Audio's Drama 3 text-to-speech model for directed performances, taking plain-language bracketed directions, inline sounds and pauses, paired word-level delivery tags and multi-speaker dialogue on the same /v1/tts, streaming and WebSocket endpoints as the S2 family.

AuthorFish Audio
Languagesnot specified
VoicesLoading...
Response formatsMP3 · WAV · PCM · Opus
Statusactive

Providers

Different providers can host the same model. Choose one provider when you need a fixed backend, or let routing select among them.

ProviderSlugPer 1k charactersLatencyiFor TTS, latency is measured as time to first byte of audio. For STT, latency is measured as time to first token.ModesUptime
Fish Audio 19 params
fish
$0.05
—
Synchronous · Streaming

Supported languages

No reviewed language list for this model yet.

Voices

Features

Text to speech

Generates spoken audio from text input.

text_to_speech
Streaming

Listed in the model enum of the streaming HTTP (/v1/tts/stream/with-timestamp) and WebSocket (/v1/tts/live/with-timestamp) endpoints in the OpenAPI document, and live-probed on the streaming HTTP endpoint 2026-10-15.

streaming
Synchronous

Synthesizes speech from fully-submitted text in a single POST /v1/tts request.

synchronous
Voice cloning

Accepts reference_id (persistent voice models) and references (zero-shot reference audio) like every Fish TTS model; the endpoint schema is model-agnostic.

voice_cloning
Multi-speaker dialogue

Multi-speaker dialogue synthesis (reference_id array + <|speaker:N|> tags) is available with the S2 family and drama-3, not s1.

multi_speaker

Code

Client
Mode
Language

ElevenLabs SDK streaming TTS

Routes the ElevenLabs SDK through allmodels and streams the audio response.

import { ElevenLabsClient } from "elevenlabs";

const client = new ElevenLabsClient({
  apiKey: process.env.ALLMODELS_API_KEY,
  baseUrl: "https://api.allmodels.io/el"
});

const stream = await client.textToSpeech.stream("voice_id", {
  text: "I'm sorry, Dave. I'm afraid I can't do that.",
  modelId: "fish/drama-3",
  outputFormat: "mp3_44100_128"
}, {
  queryParams: {
    provider: {
      "only": [
        "fish"
      ]
    }
  }
});

const reader = stream.getReader();
for (;;) {
  const { done, value } = await reader.read();
  if (done) break;
  // Write value to your response, file, or audio playback pipeline.
}