Docs /Getting Started/F5-TTS

F5-TTS

Reference-voice synthesis where clean audio and an exact transcript materially improve results.

Identity

Featherless model ID: SWivid/F5-TTS.

Use F5-TTS when

Choose F5-TTS when the target voice comes from a reference recording and you can provide a clean sample with an accurate transcript. It is not a preset-voice model, and reference audio is effectively required.

Reference audio is required

F5-TTS cannot synthesize without a reference recording. A request carrying only model and input is rejected with 400 invalid_input, so this model has no preset-voice form. The smallest request that returns audio is the one under Recommended request, which supplies a voice.clone block.

Every example on this page reads your key from the FEATHERLESS_API_KEY environment variable. The Python examples need pip install requests. The TypeScript examples use top-level await, so save each one with an .mjs extension, or set "type": "module" in package.json, and run it on Node 18 or newer.

Recommended request

These examples read a WAV recording named reference.wav from the working directory and send it as bare base64 alongside its transcript. Put a clean single-speaker clip there first, then run the snippet.

Generate with a reference voice
reference_audio=$(base64 < reference.wav | tr -d '\n')

curl --fail-with-body https://api.featherless.ai/v1/audio/speech \
  --header "Authorization: Bearer $FEATHERLESS_API_KEY" \
  --header "Content-Type: application/json" \
  --data-binary @- \
  --output f5-tts-clone.audio \
  --write-out "Content-Type: %{content_type}\n" <<JSON
{
  "model": "SWivid/F5-TTS",
  "input": "Generate the target sentence in the reference voice.",
  "voice": {
    "clone": {
      "audio": {
        "data": "$reference_audio",
        "format": "wav"
      },
      "reference_text": "Exact words spoken by the reference speaker."
    }
  },
  "response_format": "wav"
}
JSON

Set reference_text to the exact words spoken in your own clip. The transcript is what aligns the reference to the target text, so a transcript that does not match the recording degrades the result.

Reference recipe

Use one speaker, little background noise or reverberation, and a natural cadence. The F5-TTS authors recommend a reference under roughly 12 seconds and about one second of trailing silence. The original project can transcribe an omitted reference text; Featherless does not generate one for you, so supplying the exact transcript is the reliable approach here and usually improves alignment and voice transfer.

Keep the combined reference and target generation within a practical short-form window. The F5-TTS authors suggest approximately 30 seconds total for a single generation; verify that limit against your own requests before depending on it.

Speed and prompt syntax

speed is validated against the public range 0.25 to 4.0, and no narrower ceiling is applied for this model. See Parameter support below for what happens to it after validation. F5-TTS has no supported general-purpose expression-tag vocabulary. The local [main] examples in the F5-TTS project refer to CLI/TOML multi-voice configuration and should not be inserted into this API’s input text.

Parameter support

The request body accepts fields it does not recognize. Sending one returns a normal 200 with audio and the field is discarded before synthesis, so a successful response is never evidence that a field was honored. Read the lists below rather than the response status when deciding what this model actually reads.

Supported

Parameter

Required

Behavior

model

yes

Use SWivid/F5-TTS

input

yes

Target text, forwarded exactly as sent

voice.clone.audio.data

yes

Reference clip as bare base64

voice.clone.audio.format

no

Container of the reference clip

voice.clone.reference_text

no

Exact words spoken in the clip

stream

no

Boolean delivery selector

stream_format

no

Takes sse or audio

delivery

no

Takes stream, json, or bulk

encoding

no

Takes binary or base64

input is forwarded exactly as sent. Featherless does not parse, strip, or interpret markup, so any tag syntax arrives at the model as literal characters.

The voice.clone block is how you choose a voice for this model, and cloning is available here. F5-TTS advertises no preset voices, so there is no preset to fall back to: a clip in a container this model does not accept is rejected before synthesis with 400 and unsupported_clone_format. voice.clone.reference_text is sent only alongside the clip, never on its own. When you omit it, no transcript is sent and Featherless does not generate one for you.

delivery wins over stream_format, which wins over stream. These four selectors change how the audio is framed on the way out, not how it is generated.

Unsupported

Rejected with an error. These fail before any audio is produced, so the response status and error code tell your client exactly what to fix.

Parameter

Result

Error code

speed outside 0.25 to 4.0

422

None (schema validation)

input when empty

422

None (schema validation)

response_format this model can neither emit nor be rewrapped into

400

unsupported_format

voice.clone.audio.format this model does not accept

400

unsupported_clone_format

voice naming a preset this model does not advertise

400

invalid_voice

The 422 cases are schema validation failures, so nothing is synthesized. Compressed containers such as opus, aac, and flac land under unsupported_format when the model cannot produce them. A reference clip is never silently dropped: a clip in a container this model does not accept fails with unsupported_clone_format before synthesis rather than being ignored. When a preset voice name is rejected, send the reference clip and no voice name.

Accepted and ignored. These return 200 with normal audio, have no effect on it, and raise no error, so your client cannot detect them from the response at all. Do not surface them as controls.

Parameter

What happens

language

Returns 200, no effect on output

seed, temperature, and other sampling controls

Returns 200, no effect on output

Silence-trimming, text-splitting, and similar toggles from the F5-TTS project

Returns 200, no effect on output

Any other field outside the tables above

Returns 200, no effect on output

None of these fields are part of the speech request body. The key is accepted and then discarded before synthesis. We do not publish a supported-language list for this model, and a 200 is never evidence that one of these fields was applied.

Best-effort

speed, instructions, and response_format belong in neither list above. Each one is accepted and validated, but is not guaranteed to affect the output for this model. Send them if you want them, and do not build an interface that guarantees the result.

speed is a real parameter of the speech API, constrained to 0.25 to 4.0, with no narrower ceiling for this model. Omitting it does not select the model default: 1.0 is substituted before synthesis, so the model receives 1.0. A value inside the range that the model itself will not accept surfaces as a synthesis failure rather than a validation error.

response_format names the container you want back rather than guaranteeing it. wav and mp3 are always accepted, the only conversion available is rewrapping between pcm and wav, and no codec transcoding is performed, so an accepted request can return a different container than the one you asked for. Read the Content-Type on the response, or the format field on a JSON delivery, instead of assuming the value you sent.

Language and streaming

Featherless does not publish a language list for this model, so test the languages you need before depending on them. Featherless returns a completed file for this model, so SSE is deferred delivery rather than native incremental generation.

Sources

Official F5-TTS repository and official inference guidance.

Last edited: Aug 27, 2026