or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

audio

audio-processing.mdrealtime-transcription.mdspeech-to-speech.mdspeech-to-text.mdtext-to-speech.md
index.md
tile.json

professional-cloning.mddocs/voices/

Professional Voice Cloning (PVC)

High-quality voice cloning with more samples and advanced management capabilities.

Quick Reference

import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";

const client = new ElevenLabsClient({ apiKey: "your-api-key" });
// Access this API via: client.voices.pvc

Capabilities

Create PVC Voice

Creates a new PVC voice with metadata only. Audio samples must be added separately via client.voices.pvc.samples.create().

/**
 * Create voice with professional voice cloning (metadata only, no samples)
 * @returns Voice ID of the created voice
 */
client.voices.pvc.create(
  request: CreatePvcVoiceRequest,
  requestOptions?: RequestOptions
): HttpResponsePromise<AddVoiceResponseModel>;

interface CreatePvcVoiceRequest {
  /** Name for the voice */
  name: string;
  /** Language of the voice (required) */
  language: string;
  /** Voice description */
  description?: string;
  /** Labels/tags as key-value pairs */
  labels?: Record<string, string | undefined>;
}

interface AddVoiceResponseModel {
  /** ID of the created voice */
  voice_id: string;
}

Workflow: After creating a PVC voice, add audio samples using client.voices.pvc.samples.create(voice_id, ...). Typically 25+ samples are needed for best quality.

Update PVC Voice

Edit PVC voice metadata.

/**
 * @param voice_id - Voice ID to update
 * @param request - Updated voice metadata
 * @param requestOptions - Optional request configuration
 * @returns Voice ID
 * @throws UnprocessableEntityError if request fails
 */
client.voices.pvc.update(
  voice_id: string,
  request?: BodyEditPvcVoiceV1VoicesPvcVoiceIdPost,
  requestOptions?: RequestOptions
): HttpResponsePromise<AddVoiceResponseModel>;

interface BodyEditPvcVoiceV1VoicesPvcVoiceIdPost {
  /** The name that identifies this voice */
  name?: string;
  /** Language used in the samples */
  language?: string;
  /** Description to use for the created voice */
  description?: string;
  /** Serialized labels dictionary for the voice */
  labels?: Record<string, string>;
}

Train PVC Voice

Start PVC training process for a voice.

/**
 * @param voice_id - Voice ID to train
 * @param request - Training configuration
 * @param requestOptions - Optional request configuration
 * @returns Training status
 * @throws UnprocessableEntityError if request fails
 */
client.voices.pvc.train(
  voice_id: string,
  request?: BodyRunPvcTrainingV1VoicesPvcVoiceIdTrainPost,
  requestOptions?: RequestOptions
): HttpResponsePromise<StartPvcVoiceTrainingResponseModel>;

interface BodyRunPvcTrainingV1VoicesPvcVoiceIdTrainPost {
  /** The model ID to use for the conversion */
  model_id?: string;
}

interface StartPvcVoiceTrainingResponseModel {
  /** Status of the training request ('ok' if successful) */
  status: string;
}

Related Documentation

For complete PVC workflow, see:

  • PVC Samples - Add, update, and manage audio samples for PVC voices
  • PVC Speakers - Speaker separation and selection for multi-speaker samples
  • PVC Verification - Voice verification and security checks