Providers
fal
fal.ai TTS model marketplace with voice cloning on select models.
| Prefix | fal-ai |
| Default model | (user-specified) |
| Env var | FAL_API_KEY |
| Official docs | fal.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
| Model | Streaming | Voice Cloning | Open Source | Notes |
|---|---|---|---|---|
fal-ai/f5-tts | No | Yes | Yes | Zero-shot voice cloning |
fal-ai/dia-tts | No | Yes | Yes | Dialogue-focused |
fal-ai/index-tts-2 | No | Yes | Yes | Multi-speaker |
fal-ai/chatterbox | No | No | Yes | Conversational |
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" },
})