Speak text
A text-to-speech family turns text into a waveform. The catalog's runnable TTS families (Chatterbox, Qwen3-TTS) provide speak: the model synthesizes, the wav lands on disk, and the payload on stdout is the file's path, ready to pipe into the next command. The runnable Chatterbox checkpoint is ResembleAI/chatterbox-flash (the original ResembleAI/chatterbox snapshot ships a flow estimator the runtime does not serve, and the tool's refusal names the served one). CSM is cataloged for identity resolution today (info recognizes it); its runnable path is not shipped yet.
From the command line
clika-modelverse ResembleAI/chatterbox-flash speak \
"The install works. Pick a model from the catalog." \
--voice reference.wav --output hello.wav
hello.wav
Play it with anything; the file is 16-bit PCM at 24 kHz. The flags:
--output PATH: the wav path (speech.wavby default). The path is the stdout payload, soaplay "$(clika-modelverse <model> speak "..." )"works as a one-liner.--voice PATH: REQUIRED for Chatterbox, a reference voice whose timbre the model matches (the family ships no default voice;speakwithout it refuses and says so). Where a family ships named voices,--voices-dirpoints at the set.- The synthesis knobs are the family's own (
<model> speak --helplists them); Chatterbox exposes--exaggeration(expressiveness),--steps(decode steps, quality against speed) and--temperature. - The load knobs apply unchanged:
--device,--cache-dir,--offline.
Over HTTP
The same model serves POST /v1/audio/speech (text in, waveform out) behind a voice registry, rows in the route table: POST /v1/voices registers a reference clip under a name, GET /v1/voices lists the registered voices, DELETE /v1/voices/<name> frees a slot, and a speech request names one of them. Chatterbox ships no default voice, so a speech request before any registration is refused (voice 'default' is not registered; POST /v1/voices first).
clika-modelverse ResembleAI/chatterbox-flash serve --port 8000
Register the reference clip once, as a multipart upload with name (the voice id) and file (the audio); the reply names the clip's decoded rate and duration:
curl -s http://127.0.0.1:8000/v1/voices -F name=reference -F file=@reference.wav
{"name":"reference","sample_rate":16000,"duration_seconds":11.0}
Then ask for speech in that voice; the reply body is the wav itself (audio/wav, 16-bit PCM at 24 kHz):
curl -s http://127.0.0.1:8000/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{"input": "The install works.", "voice": "reference"}' \
-o hello.wav
OpenAI SDK clients use their audio.speech.create(...) call against the base URL with voice set to a registered name; the server's built-in web page for a TTS model is a speech console rather than a chat window.
The round trip with Transcribe audio is the natural smoke test: speak a sentence, transcribe the wav, and compare the text. Sizing lives in Model requirements.