Skip to content
Catalog

cn8/voice-clone-tts

Two ways to clone a voice:

Learn more about Voice Clone + TTS
Audio & VoicesyncInstant previewvoiceaudiovoice-clone

Clone a voice

Voice sample (1–2 minutes of clear speech)
What should the clone say?
Provider

Instant clone is one-shot — nothing is stored. Permanent clones live in the API tab's flow guide.

Result

Your cloned voice shows up here

Record a minute or two, type a line, hit the button.

Overview

Two ways to clone a voice:

  1. 1Persistent clone (core-voice-clone, asynchronous): upload an audio sample, submit a job, and get back a reusable voice_id you can pass to core-tts whenever you like. One 1500 credits flat charge per clone; the TTS calls you make afterwards are billed at standard per-second rates.
  1. 1Instant clone + synthesize (core-instant-clone-tts, synchronous, 200 credits/request): one shot — send an audio URL plus the text and get the speech straight back. By default the body is a binary audio/wav stream; pass stream: false to have it uploaded and get a JSON envelope with a url instead. No reusable voice is stored.

Audio samples are passed as URLs. Use CN8's upload-media to upload a local file and get a public URL. If the source is a video, the audio track is extracted automatically (up to ~60 seconds).

Key capabilities

Persistent voice clone (async)

Submit a clone job to core-voice-clone and get a 202 with a job_id. When the job completes, the result includes a reusable voice_id (plus a message and the provider). Reuse the voice_id with core-tts at standard pricing.

Instant clone + TTS (sync, binary)

core-instant-clone-tts clones the voice and synthesizes in one request. The response is binary audio/wav by default, with metadata in custom headers (X-Used-Voice-Id, X-Provider, X-Text-Length, X-Audio-Duration); send stream: false to get a JSON envelope with a hosted url instead.

Audio or video source

audioUrl can point to either an audio file (mp3/wav/ogg) or a video file — for video, up to 60s of audio is extracted before cloning.

Provider choice

Defaults to elevenlabs; minimax also supports cloning. The cloned voice_id is tied to the provider that created it — pass that same provider when you use it later in core-tts.

When to use it

Brand voice

Record a spokesperson once, clone, then generate all future ads / promos / announcements via core-tts in that voice.

Character voices

Clone game / audiobook character voices and generate dialogue at scale.

Quick one-off clip

Use instant clone when you need a single audio output without storing a voice profile.

Localization with same speaker

Clone the original speaker once, then synthesise dubbed lines in multiple languages keeping voice character (combine with TTS or Dubbing).

Input & output

input

audioUrl (audio or video) + provider; for instant clone also text, optional voice_settings, and optional stream (true = audio bytes, false = hosted url)

JSON body

output

Persistent clone: a 202 with a job_id (poll /v2/jobs/{job_id} for result_data.voice_id). Instant clone: a binary audio/wav stream plus metadata headers by default, or a JSON envelope with a hosted url when stream is false.

JSON (persistent)audio/wav binary or JSON (instant)

Guides & tips

Audio quality for cloning

  • Length: 1-2 minutes of clear speech. Past roughly 3 minutes adds nothing and can make the clone less stable, so a longer recording is not a better one. Shorter samples often work — 30 seconds is sometimes enough — but how well varies with the voice, so treat anything under a minute as worth listening back before you rely on it.
  • Environment: quiet recording, minimal background noise, consistent volume.
  • Format: WAV or high-bitrate MP3 preferred. mp3/wav/ogg supported.
  • Content: single speaker, natural speech, no music or overlapping voices.

Persistent vs instant clone

  • Persistent (1500 credits once) + standard TTS per second: best when generating many clips with the same voice (brand voice, character).
  • Instant (200 credits/request): best for one-off clips, demos, or when you don't want to manage stored voices.
  • Returns BINARY audio (instant) vs URL (persistent + tts) — choose based on how you want to handle the output.

Persistent clone polling

core-voice-clone is asynchronous: you get a 202 with a job_id right away. Poll GET /v2/jobs/{job_id} until status = completed (typically 1-3 min). result_data carries voice_id, message, and provider. Save the voice_id and pass it as voice_id to core-tts in your later calls.

Video as voice source

audioUrl can point to a video file. The audio track is extracted automatically (about 60s) and used as the clone source. Use upload-media with media_type=video to upload a video and get a URL.

Field naming notes

  • audioUrl is camelCase (not audio_url). Both core-voice-clone and core-instant-clone-tts use this spelling. Sending audio_url returns a 422.
  • voice_settings is snake_case (matching core-tts).
  • core-instant-clone-tts returns binary audio/wav by default — the Content-Type and X-* headers carry all the metadata. Send stream: false if you would rather receive a JSON envelope with a hosted url, the same shape core-tts returns.

Specs

Latency
Persistent clone: ~1-3 min (async). Instant clone: ~5-15s (sync).
Async
true
Rate Limit
60 req/min per API key
Max Input
1-2 minutes of audio recommended for cloning (both kinds); 5000 chars for instant clone text

Schema

Request body

audioUrlrequiredstring

URL to a short voice sample (camelCase).

textrequiredstring

Text to synthesise with the cloned voice (max ~5000 characters).

providerstring · default: elevenlabs

Synthesis provider

enum: elevenlabs, minimax

voice_settingsobject

Provider-specific voice settings — same shape as core-tts.voice_settings (stability, similarity_boost, etc.).

streamboolean · default: true

How you want the audio back. true (default) streams raw audio/wav bytes with metadata in headers — best for a browser that plays the result immediately. false uploads the audio to storage and returns the same JSON envelope as core-tts, with a url you can store or hand to another service — best for server-side integrations, which would otherwise have to buffer and re-host the blob themselves.

Response

(body)binary

stream=true only — raw .wav audio bytes (Content-Type: audio/wav).

urlstring

stream=false only — the hosted audio. A presigned link when the bucket is private, otherwise a direct URL.

keystring

stream=false only — the storage key of the uploaded audio.

duration_secondsnumber

stream=false only — length of the generated audio. This is the billed quantity.

voice_idstring

stream=false only — the voice that was cloned for this call (same value as the X-Used-Voice-Id header).

X-Used-Voice-Id (header)string

The voice ID that was generated for this call.

X-Audio-Duration (header)string

stream=true only — length of the generated audio in seconds. This is the billed quantity; a binary body has no field to carry it.

X-Provider (header)string

The provider that produced the audio.

X-Text-Length (header)string

Length of the input text (in characters).

X-Gateway-Token-Cost (header)string

Amount deducted from your balance for this call.

X-Gateway-Credit-Balance (header)string

Your remaining balance after this call.

Pricing

Persistent clone is a one-time per-clone fee; instant clone and all TTS synthesis are billed per second of generated audio at the standard rate.

ServiceUnitPrice
Persistent Cloneitem1500 credits/clone (one-time)
Instant Clone + TTSsecond4 credits/second
TTS with cloned voicesecond4 credits/second (standard core-tts rate)
List VoicesitemFree

Synthesis costs the same either way (4 credits/s); the difference is the one-time 1500 credits persistent-clone fee. Instant clone is cheaper until cumulative usage justifies storing the voice; persistent pays off when you'll reuse the same voice many times (reusable voice_id, no clone step per request).

Instant clone returns BINARY audio/wav — there is no audio_url to download separately; the response body itself is the audio.

Voice cloning is supported on ElevenLabs and MiniMax. OpenAI does not support cloning (supports_voice_cloning=false in the catalog).

FAQ

Related models