CLI

Synthesis

Generate speech with the CLI and control voices, models, emotions, and output files.

Feature map

NeedUse
Immediate local playbackcast "text"
Reusable audio file--out file.wav or --out file.mp3 --format mp3
Realtime-feeling agent responseDefault playback without --out
Timestamp JSON--timestamp-out file.json
SRT or WebVTT subtitles--timestamp-out file.srt or --timestamp-out file.vtt
Custom cloned voice--voice-id uc_xxx after cast voices clone

Basic usage

# Play immediately
cast "Hello, world!"

# Use a specific voice
cast "Hello, world!" --voice-id tc_xxx

# Save to WAV file
cast "Hello, world!" --out hello.wav

# Save to MP3 file
cast "Hello, world!" --out hello.mp3 --format mp3

# Save audio with SRT subtitles
cast "Hello, world. This is a test." --out hello.wav --timestamp-out hello.srt

By default, cast plays audio immediately. Use --out to save a WAV or MP3 file instead.

Options

FlagDescriptionDefault
--voice-idVoice IDtc_60e5426de8b95f1d3000d7b5
--modelModel (ssfm-v30, ssfm-v21)ssfm-v30
--languageLanguage code (ISO 639-3)auto-detected
--emotionEmotion type: smart, preset
--emotion-presetPreset emotion (requires --emotion preset)
--emotion-intensityEmotion intensity 0.0-2.0 (requires --emotion preset)1.0
--prev-textPrevious sentence for context (--emotion smart only)
--next-textNext sentence for context (--emotion smart only)
--volumeVolume (0-200)100
--pitchPitch in semitones (-12 to +12)0
--tempoTempo multiplier (0.5-2.0)1.0
--remove-silence-msSilence to retain (integer 0–1000 ms). 0 removes detected silenceunset
--formatOutput format (wav, mp3)wav
--seedUnsigned integer seed for reproducible output (>= 0)
--outSave to file instead of playing
--timestamp-outSave timestamp output to JSON, SRT, or WebVTT
--timestamp-formatTimestamp output format (json, srt, vtt)inferred from --timestamp-out
--timestamp-granularityTimestamp granularity (word, char, both)server default

Models

ModelLanguagesEmotionsLatency
ssfm-v3035+7 presets + smart emotionStandard
ssfm-v21274 presets: normal, happy, sad, angryLow
cast "Hello, world!" --model ssfm-v21

Emotions

AI automatically infers the appropriate emotion from the text. Smart emotion is available with ssfm-v30.

cast "I just got promoted!" --emotion smart

Provide surrounding sentences for better context:

cast "I just got promoted!" --emotion smart \
  --prev-text "I have been working so hard this year." \
  --next-text "Let's celebrate tonight!"

Control silence duration

Use --remove-silence-ms with Cast v1.0.10 or later. The default is unset, not 0.

cast "Hello. Thank you for listening." --voice-id tc_672c5f5ce59fac2a48faeaee --remove-silence-ms 300

remove_silence_ms specifies the silence duration to retain, not the amount to remove. Use an integer from 0 to 1000 ms. 0 removes detected silence; omission or null disables duration-based silence removal.

Standard, streaming, and timestamp TTS use output.remove_silence_ms; Compose uses segments[].output.remove_silence_ms on each tts segment. Returned timestamps align with the processed audio, and explicit pause segments are preserved.

Streaming's default leading-silence trimming is separate. Small values such as 0 can leave gaps between playable chunks; allow sufficient playback buffering and test with your content.

⌘I