GPT Image 2.5 is LIVE — Flare & Sunburst | Try in Image Generator →

kwaivgi/

Kling Omni Video O3 Reference-to-Video generates creative videos using character, prop, or scene references from multiple viewpoints. Extracts subject features and creates new video content while maintaining identity consistency across frames. Supports audio generation. Ready-to-use REST API, best performance, no cold starts, affordable pricing.

image-to-video
Input
Enable Safety Checker

Idle

$0.56per run·~17 / $10

Next:

ExamplesView all

The couple holds the coffee and chats.

Related Models

README

Kling Video O3 Pro Reference-to-Video

Kling Video O3 Pro Reference-to-Video generates premium video from reference images with optional video guidance. Upload reference images to establish character identity and appearance, optionally provide a reference video for motion guidance, and describe the scene — the model produces top-tier cinematic video with identity consistency.

Why Choose This?

  • O3 Pro quality The highest visual fidelity and motion realism in the Kling family.

  • Multi-reference images Upload up to 7 reference images (or up to 4 with a reference video).

  • Video-guided generation Optional reference video for motion and scene guidance.

  • Keep original sound Preserve the audio from the reference video in the output.

  • Sound generation Optional AI-generated sound effects when no reference video is provided.

  • Multi-prompt and element list support Chain prompt segments for scene transitions and lock in specific visual elements for consistency throughout the clip.

Parameters

ParameterRequiredDescription
promptNoText description of the video scene, characters, and motion.
videoNoReference video for motion guidance.
imagesNoReference images: up to 4 with video, up to 7 without.
keep_original_soundNoKeep audio from the reference video. Default: enabled.
soundNoGenerate AI audio (only when no reference video). Default: disabled.
aspect_ratioNoOutput ratio: 16:9 (default), 9:16, 1:1.
durationNoVideo length in seconds. Range: 3–15. Default: 5.
shot_typeNoEditing mode: intelligence or customize.
multi_promptNoAdditional prompt segments to guide scene transitions and progressions.
element_listNoList of visual elements to maintain consistency throughout the clip.

How to Use

  1. Write your prompt — describe the scene, characters, and action. Use the Prompt Enhancer for better results.
  2. Upload reference video (optional) — provide a video for motion guidance.
  3. Upload reference images — add character or scene references.
  4. Configure audio — keep original sound from the reference video, or enable AI sound generation.
  5. Select aspect ratio — match your target platform.
  6. Set duration — choose any length from 3 to 15 seconds.
  7. Select shot_type (optional) — use intelligence for automatic scope, or customize for manual control.
  8. Add multi-prompt segments (optional) — click Add Item to guide scene transitions.
  9. Add element list items (optional) — see Notes below for how to use elements effectively.
  10. Run — submit and download your video.

Pricing

Pricing is based on the requested duration, whether a reference video is provided, and the sound setting.

DurationNo Video, No SoundNo Video, With SoundWith Reference Video
3s$0.336$0.420$0.504
5s$0.560$0.700$0.840
10s$1.120$1.400$1.680
15s$1.680$2.100$2.520

Billing Rules

  • No reference video, sound disabled: $0.112 per second.
  • No reference video, sound enabled: $0.140 per second (1.25× base).
  • With a reference video: $0.168 per second (1.5× base). New audio generation must be disabled; retaining the original audio does not add a separate charge.
  • Duration: 3–15 seconds, in 1-second increments. Default: 5 seconds.
  • Selecting shot_type=intelligence does not add a separate charge.

Best Use Cases

  • Character Consistency — Generate videos with identity-consistent characters from reference images.
  • Video Remixing — Use a reference video for motion guidance with new characters or elements.
  • Marketing & Ads — Create promotional videos featuring specific people or products.
  • Storytelling — Produce narrative scenes with consistent character appearance across clips.
  • Long-Form Scenes — Up to 15 seconds for extended scene development.

Pro Tips

  • Use multiple reference images from different angles for better identity preservation.
  • When using a reference video, the image limit is 4; without a video, you can use up to 7.
  • Enable keep_original_sound to preserve audio from your reference video.
  • Sound generation is only available when no reference video is provided.
  • Use shorter durations (3–5s) for testing, longer (10–15s) for final production.
  • Match aspect ratio to your platform: 16:9 for YouTube, 9:16 for TikTok and Reels, 1:1 for Instagram.
  • Use multi_prompt to build smooth narrative progressions across the clip.

Notes

  • All parameters are optional.
  • Duration range: minimum 3 seconds, maximum 15 seconds.
  • Reference images limit: up to 4 with video, up to 7 without.
  • When a reference video is provided, sound generation is replaced by keep_original_sound.
  • Using element_list: First use Kling Elements to generate your element and note its name and ID. Then simply write the element name naturally in your prompt, and enter the corresponding element ID in the element_list field. No special characters or syntax required.
  • Ensure uploaded image and video URLs are publicly accessible.
  • customize is the default shot_type.
  • In customize mode, use multi_prompt to define each shot manually.
  • When customize is used with multi_prompt, the top-level prompt is not used for storyboard generation.
  • intelligence automatically creates the storyboard from the top-level prompt, so prompt must not be empty.
  • multi_prompt is ignored when shot_type is set to intelligence.

Related Models

Note:This website uses AI models provided by third parties. Documentation prices are for reference and may be outdated. The Generate button shows an estimate; the final task charge prevails.

Kling Video O3 Pro Reference To Video API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/kwaivgi/kling-video-o3-pro/reference-to-video 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 Pro Reference To Video below.

HTTP example
set -euo pipefail

: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"

REQUEST_BODY=$(cat <<'JSON'
{
    "keep_original_sound": true,
    "sound": false,
    "aspect_ratio": "16:9",
    "duration": 5,
    "shot_type": "customize"
}
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-pro/reference-to-video" \
  -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
done
Node.js example
const submitUrl = "https://api.wavespeed.ai/api/v3/kwaivgi/kling-video-o3-pro/reference-to-video";
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({
        "keep_original_sound": true,
        "sound": false,
        "aspect_ratio": "16:9",
        "duration": 5,
        "shot_type": "customize"
}),
});
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));
}
Python example
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 = {
    "keep_original_sound": True,
    "sound": False,
    "aspect_ratio": "16:9",
    "duration": 5,
    "shot_type": "customize"
}

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-pro/reference-to-video", 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 Pro Reference To Video API — Frequently asked questions

What is the Kling Video O3 Pro Reference To Video API?

Kling Video O3 Pro Reference To Video is a Kuaishou model for video generation from images, exposed as a REST API on WaveSpeedAI. Kling Omni Video O3 Reference-to-Video generates creative videos using character, prop, or scene references from multiple viewpoints. Extracts subject features and creates new video content while maintaining identity consistency across frames. Supports audio generation. Ready-to-use REST API, best performance, no cold starts, affordable pricing. You can call it programmatically or try it from the playground above.

How do I call the Kling Video O3 Pro Reference To Video API?

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 Python, JavaScript, and cURL examples for submitting requests and polling results. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/kwaivgi/kwaivgi-kling-video-o3-pro-reference-to-video.

How much does Kling Video O3 Pro Reference To Video cost per run?

Kling Video O3 Pro Reference To Video starts at $0.56 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.

What inputs does Kling Video O3 Pro Reference To Video accept?

Key inputs: `prompt`, `images`, `video`, `aspect_ratio`, `duration`, `element_list`. 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-pro-reference-to-video.

How long does Kling Video O3 Pro Reference To Video take to generate?

Reported generation time on WaveSpeedAI is around 293 seconds per request. This is an estimate, not a latency guarantee; queue time and input settings can change the total wait. live status is visible in the prediction record.

Can I use Kling Video O3 Pro Reference To Video outputs commercially?

Commercial usage rights depend on the model's license, set by its provider (Kuaishou). Check the provider's applicable terms and WaveSpeedAI's Terms of Service before commercial use.