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.
Related Models
- Kling v2.6 Pro (Text-to-Video) – Use created voice IDs to generate videos with dialogue, ambience, and SFX.
- Kling v2.6 Pro (Image-to-Video) – Animate a still image into a video, optionally with voice-controlled speech.
- Kling Text-to-Audio – Generate sound effects and audio from text prompts.
- Kling Video-to-Audio – Generate or extract matching audio for an input video.
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
doneParameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| audio | string | Yes | - | - | 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
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data.id | string | Unique identifier for the prediction, Task Id |
| data.model | string | Model ID used for the prediction |
| data.outputs | array | Output values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed) |
| data.urls | object | Object containing related API endpoints |
| data.urls.get | string | URL to retrieve the prediction result |
| data.status | string | Status of the task: created, processing, completed, or failed |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |
Result Request Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | Yes | - | Task ID |
Result Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data | object | The prediction data object containing all details |
| data.id | string | Unique identifier for the prediction |
| data.model | string | Model ID used for the prediction |
| data.outputs | array<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.urls | object | Object containing related API endpoints |
| data.urls.get | string | URL to poll for the prediction result |
| data.status | string | Status: created, processing, completed, or failed |
| data.created_at | string | ISO timestamp of when the request was created |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |