Day 0 support for Google Gemini 3.1 Flash TTS Try it now →
Providers

fal

fal.ai TTS model marketplace with voice cloning on select models.

Prefixfal-ai
Default model(user-specified)
Env varFAL_API_KEY
Official docsfal.ai/models

fal.ai is a marketplace — there's no default TTS model. You must pass a specific model identifier. Common choices include fal-ai/f5-tts, fal-ai/dia-tts, fal-ai/index-tts-2, and fal-ai/chatterbox.

Models

ModelStreamingVoice CloningOpen SourceNotes
fal-ai/f5-ttsNoYesYesZero-shot voice cloning
fal-ai/dia-ttsNoYesYesDialogue-focused
fal-ai/index-tts-2NoYesYesMulti-speaker
fal-ai/chatterboxNoNoYesConversational

Streaming is not supported — calling streamSpeech on any fal model throws a StreamingNotSupportedError.

Usage

import { generateSpeech } from "@speech-sdk/core"

const result = await generateSpeech({
  model: "fal-ai/fal-ai/f5-tts",
  text: "Hello from SpeechSDK!",
  voice: { url: "https://example.com/reference.wav" },
})

The model string is fal-ai/<model-path> — the first fal-ai is the SpeechSDK provider prefix, and the rest is the fal model path.

Voice Cloning

Voice-cloning fal models accept either a URL or an inline audio object:

// from a URL
await generateSpeech({
  model: "fal-ai/fal-ai/f5-tts",
  text: "Hello!",
  voice: { url: "https://example.com/reference.wav" },
})

// from bytes
import { readFileSync } from "fs"

await generateSpeech({
  model: "fal-ai/fal-ai/f5-tts",
  text: "Hello!",
  voice: { audio: readFileSync("./reference.wav") },
})

See Voice Cloning for the full Voice type.

Custom Configuration

import { generateSpeech } from "@speech-sdk/core"
import { createFal } from "@speech-sdk/core/providers"

const fal = createFal({
  apiKey: process.env.FAL_API_KEY,
})

const result = await generateSpeech({
  model: fal("fal-ai/f5-tts"),
  text: "Hello!",
  voice: { url: "https://example.com/reference.wav" },
})

On this page