Skip to main content

Choose models, voices, and output

Choose the model first: it determines which voices, controls, and output modes you can use. The Console shows the voices and languages currently enabled for your project.

1. Choose a model​

Luna-TTSNatural, consistent delivery for voiceovers, content narration, and product prompts. Use luna-tts.
Luna-TTS CharacterScene-based delivery for character voices, game dialogue, and companion experiences. Use luna-tts-character.
CompareLuna-TTSLuna-TTS Character
Best forVoiceovers, content narration, and voice promptsCharacter voiceovers, game dialogue, and companion experiences
model_idluna-ttsluna-tts-character
VoicesLuna-TTS system voices and cloned voicesCharacter system voices only; does not support cloned voices
OutputComplete audio or streaming audioComplete audio only

Omitting model_id selects luna-tts. When you switch models, choose a new voice_id from the corresponding voice list. System voices cannot be used across models.

2. Choose a voice and controls​

Pass a voice_id enabled for the current project. Set language to a language code enabled for the current account.

Match the modelChoose the voice from the Luna-TTS or Character list that matches your model_id.
Match the audienceTest the language, accent, and delivery with text your audience will actually hear.
Use cloning when neededCloned voices work with Luna-TTS. Character supports only its own system voices.
Keep results consistentOnce approved, reuse the same model, voice, language, and control values.
SettingLuna-TTSLuna-TTS Character
Speed speed0.6–1.2; omit it or set it to 0 for the default speedNot supported
Volume volume-5–5-5–5
Delivery scene sceneNot supportednormal: Normal (default)
whisper: whispering delivery
Text normalization text_normalizationtrue enables normalization (default); false preserves the input textAccepted but ignored by the synchronous HTTP API; omit this field
Expression tagsAdd an official tag, such as [laughs], directly to textNot supported
Change one setting at a time

Generate one representative sentence with the default controls, then change only one setting for the next request. This makes differences in voice, speed, volume, and delivery easier to evaluate.

View the complete request fields and examples →

3. Choose an output mode​

Use this whenModelEndpointResponse
You need the complete file before playback or storageLuna-TTS or Luna-TTS CharacterPOST /v1/text-to-speechComplete audio bytes
You want to begin consuming audio as it is generatedLuna-TTS onlyPOST /v1/text-to-speech/streamHTTP-chunked audio

Both endpoints default to WAV: omit audio_format or set it to wav. Both accept audio_format: "pcm" for raw signed PCM16LE without a WAV container; streaming supports Luna-TTS only.

The streaming response is HTTP-chunked audio, not an SSE or JSON event stream. Consume the bytes in order. WAV includes its file header and needs a WAV-capable decoder. For PCM, use X-Audio-Sample-Rate, X-Audio-Channels, and X-Audio-Bit-Depth from the response to configure playback; do not assume a fixed sample rate. See the streaming contract and PCM example.

4. Review the result​

  1. Start with a short piece of text that represents the real product experience.
  2. Confirm the target language and accent, then test names, numbers, abbreviations, uncommon symbols, pauses, and pacing.
  3. Adjust only one control at a time and compare the new result with the previous one.
  4. Test in the actual playback environment. For phone and IVR use, confirm that the channel accepts the selected WAV or PCM format and its sample rate and channel count; convert the audio if needed.
  5. Save the approved model_id, voice_id, language, and control values as one configuration.
Pronunciation and pacing

Clear punctuation and complete sentences usually produce more consistent delivery. Test the exact text patterns your product uses instead of relying on a generic sample sentence.

See the Text to Speech API for the complete request contract and Request Limits for current limits.