Kling 4.0 is LIVE — Unbelievably Real Video | Try Now →

kwaivgi/kling-v4.0/image-to-video

Kling V4.0 Image-to-Video animates a first frame into a clip of 3 to 30 seconds, with an optional last frame and up to 8 in-between keyframes to direct the story, 720p and 1080p output and synchronized stereo audio. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Image to Video
Input

Drag & drop or click to upload

preview

Drag & drop or click to upload

Idle

$0.785per run·~12 / $10

Next:

ExamplesView all

The photographer raises the camera and tries to get the dog to smile by shaking a toy. The dog remains completely serious. She tries a treat. The dog slowly adjusts its tie with one paw and continues staring directly into the camera. She lowers the camera in disbelief. The camera begins from her shooting position, then gently pushes toward the dog’s deadpan expression. Sophisticated visual comedy, realistic animal movement, polished studio lighting.

She lifts her coffee cup, smiles softly at the camera and tucks a curl behind her ear, gentle cafe ambience, slow push-in

She laughs, rests her chin on her hand, then picks up her bag and heads for the door, warm cafe ambience

Related Models

README

Kling V4.0 Image-to-Video

Kling V4.0 Image-to-Video turns a still image into a clip of 3 to 30 seconds. The image is the first frame; add a last frame and in-between keyframes to direct how the story unfolds. Output is 720p or 1080p with synchronized stereo audio.

Why Choose This?

  • First, last and keyframe control Pin the opening, the ending and moments in between; the model generates the motion between them.
  • Up to 30 seconds Enough room for a full beat of story.
  • Native audio Stereo sound generated with the picture.
  • Follows your frame The aspect ratio follows your first frame, or choose one.

Pricing

ResolutionPrice per second
720p$0.157
1080p$0.235

The price is per second of the generated video.

Parameters

ParameterDescription
imageFirst frame image (required, .jpg/.jpeg/.png).
promptOptional text describing the motion.
last_imageOptional last frame. Requires image.
keyframesOptional in-between frames in order. image, last_image and keyframes together are at most 10. Requires image.
aspect_ratioOptional: 16:9, 9:16, 1:1 or 21:9. Leave it out to follow the first frame.
resolution720p (default) or 1080p.
duration3 to 30 seconds, default 5.

Prompting Guide

  • Describe the motion, not the picture: what moves, how the camera moves and how the scene ends.
  • With a last frame, describe the change that connects the two frames.
  • Keyframes are used in the order you list them; the first frame, keyframes and last frame add up to at most 10 images. A last frame is optional.
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 v4.0 Image To Video API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/kwaivgi/kling-v4.0/image-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 v4.0 Image To Video below.

HTTP example
set -euo pipefail

: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"

REQUEST_BODY=$(cat <<'JSON'
{
    "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
    "resolution": "720p",
    "duration": 5,
    "aspect_ratio": "16:9"
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/kwaivgi/kling-v4.0/image-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-v4.0/image-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({
        "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
        "resolution": "720p",
        "duration": 5,
        "aspect_ratio": "16:9"
}),
});
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 = {
    "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
    "resolution": "720p",
    "duration": 5,
    "aspect_ratio": "16:9"
}

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-v4.0/image-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 v4.0 Image To Video API — Frequently asked questions

What is the Kling v4.0 Image To Video API?

Kling v4.0 Image To Video is a Kuaishou model for video generation from images, exposed as a REST API on WaveSpeedAI. Kling V4.0 Image-to-Video animates a first frame into a clip of 3 to 30 seconds, with an optional last frame and up to 8 in-between keyframes to direct the story, 720p and 1080p output and synchronized stereo audio. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing. You can call it programmatically or try it from the playground above.

How do I call the Kling v4.0 Image 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-v4.0-image-to-video.

How much does Kling v4.0 Image To Video cost per run?

Kling v4.0 Image To Video starts at $0.785 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 v4.0 Image To Video accept?

Key inputs: `prompt`, `image`, `aspect_ratio`, `resolution`, `duration`, `keyframes`. 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-v4.0-image-to-video.

How do I get started with the Kling v4.0 Image To Video API?

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.

Can I use Kling v4.0 Image 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.

llms.txt — kwaivgi/kling-v4.0/image-to-video for AI agents and LLMs