Kling O3 Omni 4K Video Edit edits input videos in 4K with natural-language instructions and optional image references, supporting prompt-guided video modification, visual style updates, scene refinements, motion control, and high-quality cinematic editing. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Idle
$2.31per run
Transform the video into a dark Western fantasy scene while preserving the woman’s identity, facial features, body movement, walking pace, and original camera motion. Turn the vintage hotel corridor into the interior of an ancient gothic castle, with tall stone arches, candlelit walls, dark wooden doors, drifting mist near the floor, and moonlight entering through narrow windows. Replace her modern black coat with an elegant dark green medieval traveling cloak with subtle silver embroidery, leather boots, and a fitted fantasy-style outfit underneath. Transform the red envelope into an old sealed parchment letter with a glowing crimson wax seal. Keep her original walking and turning actions unchanged. Maintain the same composition and camera tracking, but give the entire scene a mysterious high-end Western fantasy movie aesthetic, realistic materials, cinematic candlelight, deep shadows, subtle atmospheric fog.
Kling O3 Omni 4K Video Edit edits an existing video in 4K using natural-language instructions. Provide an input video and describe the changes you want to apply, then optionally add image references or Kling element IDs to guide subject, object, scene, or style edits.
Prompt-guided video editing
Describe the desired changes in natural language instead of building a manual editing pipeline.
Context-aware video edits
Use the input video as the base context while applying subject, object, scene, or style changes.
4K video output
Generate high-resolution edited videos for polished delivery workflows.
Image reference support
Add optional image references to guide replacement objects, scene details, or visual style.
Element reference support
Use element_list to reference reusable Kling elements by element_id.
Original sound preservation
Keep the original input audio with keep_original_sound.
| Parameter | Required | Description |
|---|---|---|
| prompt | Yes | Describe the changes to apply to the input video. |
| video | Yes | Input video to edit. |
| images | No | Optional images that guide an element, scene, or style edit. Supports up to 4 image URLs. |
| keep_original_sound | No | Keep the original audio from the input video. Default: true. |
| element_list | No | Element reference list. Supports up to 3 items. Each item uses an element_id returned by kwaivgi/kling-elements or kwaivgi/kling-elements-advanced. |
images when replacement objects, scene details, or style references are needed.element_list when you want to guide the edit with existing Kling element IDs.keep_original_sound enabled when the original video audio should be preserved.Pricing is based on input video duration.
Input duration is rounded up to the next whole second, with a minimum billed duration of 3 seconds and a maximum billed duration of 16 seconds.
| Billing Unit | Price |
|---|---|
| Per second | $0.462 |
| Per 5 seconds | $2.31 |
| Billed Duration | Cost |
|---|---|
| 3 seconds | $1.386 |
| 5 seconds | $2.31 |
| 10 seconds | $4.62 |
| 16 seconds | $7.392 |
images, element_list, prompt, and keep_original_sound do not add separate charges in the current pricing formula.
element_list when you already have reusable Kling element IDs.element_list focused; too many unrelated elements can reduce edit control.keep_original_sound when the input video's audio should be retained.prompt and video are required.images supports up to 4 reference images.element_list supports up to 3 element references.element_list item must include an element_id.element_id should come from kwaivgi/kling-elements or kwaivgi/kling-elements-advanced.3 to 16 seconds.element_id references.Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/kwaivgi/kling-video-o3-4k/video-edit with your input as JSON. The endpoint returns a prediction id. Start polling the result endpoint around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. On completed, read output values from data.outputs. Examples for Kling Video O3 4k Video Edit below.
set -euo pipefail
: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"
REQUEST_BODY=$(cat <<'JSON'
{
"prompt": "A cinematic shot of a city at sunset, soft golden light",
"video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
"keep_original_sound": true
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/kwaivgi/kling-video-o3-4k/video-edit" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $WAVESPEED_API_KEY" \
-d "$REQUEST_BODY")
TASK=$(printf '%s' "$SUBMIT_RESPONSE" | jq 'if has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "$TASK" | jq -r '.id')
if [ -z "$PREDICTION_ID" ] || [ "$PREDICTION_ID" = "null" ]; then
printf 'Submission response did not contain a prediction id
' >&2
exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/$PREDICTION_ID/result"
# 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 has("data") then .data else . end')
STATUS=$(printf '%s' "$RESULT" | jq -r '.status')
case "$STATUS" in
completed) printf '%s\n' "$RESULT" | jq '.outputs'; break ;;
failed|cancelled|timeout|deleted) printf '%s\n' "$RESULT" | jq . >&2; exit 1 ;;
*) sleep 2 ;;
esac
doneconst submitUrl = "https://api.wavespeed.ai/api/v3/kwaivgi/kling-video-o3-4k/video-edit";
const apiKey = process.env.WAVESPEED_API_KEY;
if (!apiKey) throw new Error('Set WAVESPEED_API_KEY');
async function requestJson(url, options = {}) {
const response = await fetch(url, options);
if (!response.ok) throw new Error(await response.text());
return response.json();
}
// 1. Submit the prediction.
const body = await requestJson(submitUrl, {
method: "POST",
headers: {
"Authorization": `Bearer ${apiKey}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"prompt": "A cinematic shot of a city at sunset, soft golden light",
"video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
"keep_original_sound": true
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = `https://api.wavespeed.ai/api/v3/predictions/${task.id}/result`;
// 2. Poll until the prediction finishes.
while (true) {
const resultBody = await requestJson(resultUrl, {
headers: { "Authorization": `Bearer ${apiKey}` },
});
const result = resultBody.data ?? resultBody;
if (result.status === "completed") {
console.log(result.outputs);
break;
}
if (["failed", "cancelled", "timeout", "deleted"].includes(result.status)) throw new Error(JSON.stringify(result));
await new Promise(resolve => setTimeout(resolve, 2000));
}import json
import os
import time
from urllib.request import Request, urlopen
api_key = os.environ["WAVESPEED_API_KEY"]
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
payload = {
"prompt": "A cinematic shot of a city at sunset, soft golden light",
"video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
"keep_original_sound": True
}
def request_json(url, data=None):
request = Request(url, data=data, headers=headers, method="POST" if data else "GET")
with urlopen(request) as response:
return json.load(response)
# 1. Submit the prediction.
body = request_json("https://api.wavespeed.ai/api/v3/kwaivgi/kling-video-o3-4k/video-edit", json.dumps(payload).encode())
task = body.get("data", body)
if not task.get("id"):
raise RuntimeError("Submission response did not contain a prediction id")
result_url = f"https://api.wavespeed.ai/api/v3/predictions/{task['id']}/result"
# 2. Poll until the prediction finishes.
while True:
result_body = request_json(result_url)
result = result_body.get("data", result_body)
status = result.get("status")
if status == "completed":
print(result.get("outputs", []))
break
if status in {"failed", "cancelled", "timeout", "deleted"}:
raise RuntimeError(result)
time.sleep(2)Kling Video O3 4k Video Edit is a Kuaishou model for video editing, exposed as a REST API on WaveSpeedAI. Kling O3 Omni 4K Video Edit edits input videos in 4K with natural-language instructions and optional image references, supporting prompt-guided video modification, visual style updates, scene refinements, motion control, and high-quality cinematic editing. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing. You can call it programmatically or try it from the playground above.
POST your input parameters to the model's REST endpoint (shown in the API tab of this playground) with your WaveSpeedAI API key in the Authorization header. Submission returns a prediction ID. Poll the result endpoint starting around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. The playground generates production-oriented Python, JavaScript, and cURL examples with timeouts, transient-error handling, and safe GET retries. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/kwaivgi/kwaivgi-kling-video-o3-4k-video-edit.
Kling Video O3 4k Video Edit starts at $2.31 per run. That figure is the base price — the final charge scales with the parameters you set in the form (output size, length, count, references, or whatever knobs this model exposes), so a higher-quality or larger output costs more than a minimal one. The exact cost for your current input is shown live next to the Generate button before you submit, and the actual per-call charge is recorded on the prediction afterwards.
Key inputs: `prompt`, `images`, `video`, `element_list`, `keep_original_sound`. The full JSON schema (types, defaults, allowed values) is rendered above the Generate button and mirrored in the API reference at https://wavespeed.ai/docs/docs-api/kwaivgi/kwaivgi-kling-video-o3-4k-video-edit.
Sign up for a free WaveSpeedAI account to claim starter credits, copy your API key from /accesskey, then call the endpoint shown in the API tab of the playground. The playground also auto-generates a code sample in Python, JavaScript, or cURL for the parameters you've set.
Commercial usage rights depend on the model's license, set by its provider (Kuaishou). The license summary appears on the model card above; see WaveSpeedAI's Terms of Service for platform-level conditions.