Kwaivgi Kling V2.6 Create Voice

Kwaivgi Kling V2.6 Create Voice

Playground

Try it on WaveSpeedAI!

Kling 2.6 Create Voice is a model can generate custom voice. Upload an audio file to create a custom voice that can be used with the voice control feature in V2.6 video generation. The audio should be clean, noise-free, with a single voice, and duration between 5-30 seconds. Built for stable production use with a ready-to-use REST API, no cold starts, and predictable pricing.

Features

Kling v2.6 Create Voice is a lightweight helper endpoint for creating a reusable voice profile from an audio sample. The output is typically a voice identifier you can plug into Kling v2.6 “voice control” workflows (for example, generating dialogue in a video using your custom voice).

Use this when you want consistent narration or character speech across multiple Kling v2.6 generations, without re-uploading the same reference audio every time.

Key capabilities

  • Create a reusable voice profile from audio Upload or link to a voice sample and get back a voice reference you can re-use across runs.

  • Designed for Kling v2.6 voice control workflows The resulting voice can be used to drive speech generation in Kling v2.6 video endpoints that support custom voice IDs.

  • Simple, single-input interface Minimal setup: provide a clean reference clip and you’re ready to create a voice.

  • Supports common audio upload patterns Typically works with either a public URL or an uploaded audio file, depending on your integration.

  • Better consistency across scenes Re-using the same created voice helps keep a stable vocal identity across multiple generations.

Parameters and how to use

  • voice_url: (required) A URL (or uploaded file reference) pointing to the audio sample used to create the voice.

Media (Audio)

Provide a single voice sample that’s easy to learn from:

  • Use a clean, single-speaker clip (no background music, no overlapping voices).
  • Aim for consistent volume and minimal reverb/echo.
  • If you want a specific style (e.g., calm narrator, energetic host), choose a sample that clearly matches that delivery.

After you finish configuring the parameters, click Run, preview the result, and iterate if needed.

Pricing

  • $0.035 per run

Notes

How to write prompts that use a Voice ID

When you use Kling v2.6 video endpoints that support voice-controlled generation, you can reference created voices directly inside the text prompt.

  • Prompt length limit: your positive prompt cannot exceed 2500 characters.
  • Voice tag syntax: use <<<voice_1>>> (or <<<voice_2>>>) to specify which voice should speak.
  • Voice order must match voice_list: <<<voice_1>>> refers to the first voice in the voice_list parameter; <<<voice_2>>> refers to the second voice.
  • Up to 2 tones per task: a video generation task can reference at most 2 tones.
  • Tone requires sound=on: when specifying a tone, the sound parameter must be on.
  • Keep grammar simple: simpler sentence structure improves reliability. Example: The man <<<voice_1>>> said, “Hello.”
  • Billing behavior: if voice_list is not empty and the prompt references a voice tag (e.g., <<<voice_1>>>), the task is billed using the “with voice generation” metric.
  • Capability varies by mode/version: voice support differs across Kling model versions and video modes; check the current Capability Map for the endpoint you’re using.

Safety and permission

  • Consent matters: only create voices from audio you own or have explicit permission to use.
  • If the created voice sounds “off,” the fastest fix is usually a cleaner reference clip (single speaker, less noise, fewer artifacts).
  • Keep voice creation and voice usage consistent: once you have a voice ID, re-use it rather than re-creating new voices for the same speaker.

Authentication

For authentication details, please refer to the Authentication Guide.

API Endpoints

Submit Task & Query Result

set -euo pipefail

export WAVESPEED_API_KEY="your-api-key"

REQUEST_BODY=$(cat <<'JSON'
{
  "audio": "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3"
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/kwaivgi/kling-v2.6/create-voice" \
  -H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
  -H "Content-Type: application/json" \
  -d "${REQUEST_BODY}")

TASK=$(printf '%s' "${SUBMIT_RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "${TASK}" | jq -r '.id // empty')
if [ -z "${PREDICTION_ID}" ]; then
  printf 'Submission response did not contain a prediction id
' >&2
  exit 1
fi
RESULT_URL=$(printf '%s' "${TASK}" | jq -r '.urls.get // empty')
if [ -z "${RESULT_URL}" ]; then RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"; fi

# 2. Poll until the prediction finishes.
while true; do
  RESPONSE=$(curl --silent --show-error --fail-with-body \
    "${RESULT_URL}" \
    -H "Authorization: Bearer ${WAVESPEED_API_KEY}")
  RESULT=$(printf '%s' "${RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
  STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')

  case "${STATUS}" in
    completed) printf '%s\n' "${RESULT}" | jq '.outputs'; break ;;
    failed|cancelled|timeout) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
    created|processing) sleep 2 ;;
    *) printf 'Unexpected status: %s
' "${STATUS}" >&2; exit 1 ;;
  esac
done

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
audiostringYes--The voice needs to be clean and free of noise, with only one type of human voice present, with a duration of no less than 5 seconds and no longer than 30 seconds.

Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
data.idstringUnique identifier for the prediction, Task Id
data.modelstringModel ID used for the prediction
data.outputsarrayOutput values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed)
data.urlsobjectObject containing related API endpoints
data.urls.getstringURL to retrieve the prediction result
data.statusstringStatus of the task: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”)
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds

Result Request Parameters

ParameterTypeRequiredDefaultDescription
idstringYes-Task ID

Result Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
dataobjectThe prediction data object containing all details
data.idstringUnique identifier for the prediction
data.modelstringModel ID used for the prediction
data.outputsarray<string | object>Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model.
data.urlsobjectObject containing related API endpoints
data.urls.getstringURL to poll for the prediction result
data.statusstringStatus: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds
© 2026 WaveSpeedAI. All rights reserved.