Docs /Getting Started/Qwen3-TTS Base

Qwen3-TTS Base

Multilingual preset speech with nine named voices; a cloning reference is accepted but ignored.

Identity

Featherless model ID: Qwen/Qwen3-TTS-12Hz-1.7B-Base.

Qwen describes Base as its voice-cloning and fine-tuning checkpoint. Featherless currently exposes nine named preset choices under this model ID and is preparing a corrected reference-cloning workflow. Treat the named presets as Featherless inventory rather than as intrinsic Base-checkpoint voices. Fine-tuning is not exposed through /v1/audio/speech.

The two intended workflows are mutually exclusive: send a discovered preset name in voice, or send a voice.clone reference, which this model accepts and then ignores. Do not combine a preset with a clone reference.

Preset voices

The authenticated /v1/audio/voices response currently returns nine case-sensitive presets: Aiden, Dylan, Eric, Ono_anna, Ryan, Serena, Sohee, Uncle_fu, and Vivian. The discovery-reported default is Serena. Query voice discovery at runtime instead of freezing the list in an application.

Qwen describes Aiden and Ryan as English voices; Vivian, Serena, Uncle_fu, Dylan, and Eric as Chinese voices or regional Chinese voices; Ono_anna as Japanese; and Sohee as Korean. These native-language descriptions are quality guidance, not hard restrictions.

Every example on this page reads your key from the FEATHERLESS_API_KEY environment variable, so export it once before running any of them. The Python examples need pip install requests. The TypeScript examples use top-level await, so save one with an .mjs extension, or set "type": "module" in package.json, and run it on Node 18 or newer, which supplies the built-in fetch they rely on.

Generate preset speech with Serena
curl --fail-with-body https://api.featherless.ai/v1/audio/speech \
  --header "Authorization: Bearer $FEATHERLESS_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "model": "Qwen/Qwen3-TTS-12Hz-1.7B-Base",
    "input": "Please leave the blue folder beside the window before seven tonight.",
    "voice": "Serena",
    "response_format": "wav"
  }' \
  --output qwen-preset.audio \
  --write-out "Content-Type: %{content_type}\n"

The example uses a neutral .audio filename because clients should choose the final extension from the returned Content-Type, not only from the requested format.

Voice cloning

This model does not clone on Featherless. A voice.clone reference is accepted rather than rejected: the request returns 200 with audio in the default preset voice, and nothing in the response says the reference was discarded. Send a preset name instead, and choose another model when matching a speaker from a reference clip is a requirement.

Qwen documents a cloning workflow for the checkpoint itself — roughly three seconds of reference speech, and both transcript-assisted and transcriptless speaker-embedding modes. Those describe the model, not the Featherless request path for this model ID.

See Voices and cloning for the reference-audio envelope, recording guidance, consent requirements, and the models that do accept a reference clip.

Languages

10 languages — inferred from input; no language field.

Supported languages are Chinese, English, Japanese, Korean, German, French, Russian, Portuguese, Spanish, and Italian. Write the input in the language you want spoken. This Spanish example deliberately omits a language property.

Generate Spanish speech
curl --fail-with-body https://api.featherless.ai/v1/audio/speech \
  --header "Authorization: Bearer $FEATHERLESS_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "model": "Qwen/Qwen3-TTS-12Hz-1.7B-Base",
    "input": "La lluvia suave moja las hojas del jardín.",
    "voice": "Serena",
    "response_format": "wav"
  }' \
  --output qwen-spanish.audio \
  --write-out "Content-Type: %{content_type}\n"

There is intentionally no language property in this request. Change only the input text to generate another supported language. Accent, pronunciation, long-form and mixed-language quality vary by language.

Controls and prompt syntax

Qwen3-TTS Base has no documented inline expression-tag vocabulary or SSML contract. Punctuation and wording may influence delivery naturally, but bracketed actions such as [laugh] are not supported syntax and may be spoken literally.

Parameter support

This endpoint does not reject fields it does not recognize. An unrecognized field is accepted, the request returns a normal 200 with audio, and the field is discarded before the request reaches the model. A successful response is therefore never evidence that a field was honored. Use the tables below rather than inferring support from a 200.

Supported

Parameter

Required

Behavior

model

yes

Qwen/Qwen3-TTS-12Hz-1.7B-Base, case-sensitive

input

yes

The text to speak, forwarded unchanged

voice

no

Case-sensitive preset name from voice discovery; the discovery-reported default is Serena

stream

no

Boolean

stream_format

no

sse or audio

delivery

no

stream, json, or bulk

encoding

no

binary or base64

input is never inspected or rewritten, so bracketed tokens and markup travel through as literal characters. stream, stream_format, delivery, and encoding select how the audio is returned, not how it is generated. When more than one is present, delivery wins over stream_format, which wins over stream. Set delivery to json (or encoding to base64) to receive the JSON envelope with its format field instead of raw bytes.

Unsupported

Rejected with an error. These fail before any audio is produced, so a client can detect them from the status code and act on it.

Parameter

Result

Error code

voice preset name not in the discovery list

400

invalid_voice

response_format outside the advertised set

400

unsupported_format

speed outside 0.25 to 4.0

422

None (schema validation)

Reference-clip format outside mp3, opus, aac, flac, wav, pcm

422

None (schema validation)

stream_format outside sse, audio

422

None (schema validation)

delivery outside stream, json, bulk

422

None (schema validation)

voice matching none of the three accepted shapes

422

None (schema validation)

Preset matching is exact and case-sensitive, so a wrong-case name fails with invalid_voice rather than falling back to a default, and the message lists the names that are available. mp3 and wav are always in the set this model advertises through voice discovery, so neither of those two can ever produce unsupported_format.

Convert MP4 or M4A reference audio to WAV before sending it. The three accepted voice shapes are a preset name string, a custom voice object, and a clone reference; a description-based voice prompt sent inside voice matches none of them and fails here.

Accepted and ignored. These return a normal 200 with audio, raise no error, and have no effect. A client cannot detect them from the response, so remove them at the source and never present them as working controls in an interface built on this model.

Parameter

What happens

voice.clone

Returns 200 with audio in the default voice. Cloning is not rejected on this model, it is ignored, so a reference clip produces speech that is not the reference speaker and nothing in the response says so.

language

Returns 200, no effect on output

Sampling controls such as temperature, seed, and top_p

Returns 200, no effect on output

Voice design and description-based voice prompting as top-level fields

Returns 200, no effect on output

Any other field the endpoint does not define

Returns 200, no effect on output

This endpoint has no language field, so write the input in the language you want spoken. Voice design and description-based voice prompting have no top-level field either, and the same payload sent inside voice is rejected instead, as the table above shows. Do not send any of these fields, and do not read a 200 as confirmation that one took effect.

Best-effort

Three parameters belong in neither list. They are accepted and carried through the request, but they are not guaranteed to affect the output for this model, so treat them as best effort and verify against this model ID before depending on them. speed is a real, enforced parameter: it must be between 0.25 and 4.0, an out-of-range value fails with 422 before any audio is produced, and omitting it substitutes 1.0 — yet a value inside the range is not guaranteed to change the delivered rate. instructions is accepted as a string and carried through unchanged, and may or may not influence delivery. response_format is a request rather than a guarantee: mp3 and wav are always accepted, and because the only conversion available is a lossless PCM-to-WAV rewrap and never codec transcoding, an accepted request can come back in a container other than the one asked for. Read the container off the response Content-Type, or off the format field of a JSON response, instead of assuming the request was honored.

A custom voice object, sent as {"id": "your-id"} in place of a preset name, is best effort as well, and it differs from a preset name in one way that matters: it deliberately skips preset validation, so an unknown id does not produce the invalid_voice error a mistyped preset name produces. It is accepted and forwarded as-is, and it may select nothing at all or surface as an opaque synthesis failure. Prefer a discovered preset name, and do not present custom voice IDs as a working control in an interface built on this model.

Output and limits

The 12Hz in the model name describes the codec frame rate, not the audio sampling rate. Qwen uses a 24 kHz waveform rate, and the runtime-verified Featherless sample was mono 24 kHz PCM audio in a WAV container. Explicitly request wav for the most predictable result.

Voice discovery currently reports mp3, pcm, and wav as accepted output requests. An accepted selector does not guarantee that exact container: trust the binary response Content-Type or the JSON response format field.

Featherless does not currently publish a stable maximum character count, reference-duration boundary, or output-duration guarantee for this model. Treat those values as unknown, not unlimited, and test realistic input lengths before production.

Streaming

SSE transport is available, but this model currently completes synthesis before audio bytes are delivered. Treat SSE as deferred delivery, not real-time generation; no early-audio or time-to-first-audio guarantee applies. Qwen describes the architecture as streaming-capable, but that model-level capability is not currently exposed by Featherless.

When to use Qwen3-TTS Base

Use the preset workflow for multilingual named-voice speech. Choose another model when speaker matching from a reference clip, explicit speed control, style instructions, inline expression tags, description-based voice design, reusable voice IDs, or live incremental audio are requirements.

Sources

Official Qwen3-TTS Base model card, official Qwen3-TTS repository, official inference interface, and official speech-tokenizer configuration.

Last edited: Aug 27, 2026