tts-chatterbox-hd, upload a sample to /audio/voices, save the returned vv_... voice handle, then pass that handle to /audio/speech.
Voice handles are model-specific. A handle created with
tts-chatterbox-hd must be used with tts-chatterbox-hd.How it works
- Upload - Send a clean reference audio file to
POST /audio/voices - Save - Store the returned
idvoice handle - Generate - Send the handle as
voiceinPOST /audio/speech
Prerequisites
- A Venice API key
- A clean reference sample in MP3, WAV, FLAC, or MP4 format
- At least 5 to 10 seconds of clear speech from one speaker
Step 1: Upload a voice sample
Create a voice handle by uploading the reference audio as multipart form data:curl -F, do not set Content-Type manually. curl adds the multipart/form-data header and required boundary.
Response (200):
id for speech generation:
Step 2: Generate speech
Pass the cloned voice handle asvoice in the speech request:
tts-chatterbox-hd currently defaults to WAV.
Complete example
This example uploads a reference sample, extracts the voice handle withjq, and writes the generated audio to chatterbox-clone.wav:
Voice sample tips
Use a sample with one speaker, minimal background noise, and no music. Natural speech works better than whispered, sung, or heavily processed audio. Longer samples can help when the voice has distinctive pacing, accent, or tone, but keep the sample focused on the target speaker.Handle expiration
Chatterbox HD cloning is zero-shot: Venice stores the uploaded reference audio temporarily, and the model reads it when you synthesize speech. No persistent voice template is created. Voice handles expire automatically after 7 days. After a handle expires, upload the reference sample again to create a newvv_... handle.
Discover cloning support
Models that support cloning include avoice_cloning object in the model spec. Query TTS models to check supported formats, minimum sample length, and retention:
tts-chatterbox-hd advertises:
API parameters
Create voice
Generate speech
The successful speech response is binary audio, and its
Content-Type identifies the returned format. You can omit response_format to use the model default. Query model_spec.supported_formats and model_spec.default_format from GET /models?type=tts before overriding it; requesting an unsupported format returns HTTP 400.