Kling 3.0 Motion Control is Kuaishou's motion transfer model, released in March 2026. You give it a reference image and a reference video, and it moves the subject from the image the way the person in the video moves. On Jantaris the subject's facing follows the image, so the source clip can be 3-10 seconds. Quality is std or pro, and the source audio is kept. Kuaishou also offers a video-facing mode for clips up to 30 seconds and a switch to drop the audio, but Jantaris does not expose those options yet. v3 is the higher-fidelity tier, with better subject consistency than v2.6.
Best for
- Dance trends performed by your own character or mascot
- Turning recorded acting into animated character performances
- Brand characters that copy real movements consistently
- Previsualization of choreography
Prompting tips
- Use a clean reference clip: one person, a steady camera and the full body in frame.
- Keep the source clip between 3 and 10 seconds; longer clips are rejected.
- Show the subject clearly in the reference image, in a pose close to the video's first frame.
- Reference clips must be MP4 or MOV, up to 100 MB.
FAQ
How much does Kling 3.0 Motion Control cost?
The rate is $0.249 per second, billed per second of the source clip. Failed generations are not charged.
How long can the motion reference video be?
3-10 seconds on Jantaris, because the subject's facing follows the image. The 30-second video-facing mode is not available yet.
What is the difference from Kling 2.6 Motion Control?
v3 gives higher fidelity and better subject consistency. Kling 2.6 Motion Control is the budget tier with a lower per-second rate.
How to call Kling 3.0 Motion Control via API
curl https://jantaris.com/v1/generate?wait=60 \
-H "Authorization: Bearer $JANTARIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-3.0-motion-control",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"video_url": "https://example.com/input.mp4"
}
}'import os, time, requests
API = "https://jantaris.com/v1"
H = {"Authorization": f"Bearer {os.environ['JANTARIS_API_KEY']}"}
task = requests.post(f"{API}/generate", headers=H, json={
"model": "kling-3.0-motion-control",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"video_url": "https://example.com/input.mp4"
}
}).json()
while task["status"] in ("queued", "running"):
time.sleep(3)
task = requests.get(f"{API}/tasks/{task['id']}", headers=H).json()
print(task["status"], task["cost"], [o["url"] for o in task["output"]])const API = "https://jantaris.com/v1";
const headers = { Authorization: `Bearer ${process.env.JANTARIS_API_KEY}`, "Content-Type": "application/json" };
let task = await (await fetch(`${API}/generate`, {
method: "POST",
headers,
body: JSON.stringify({
"model": "kling-3.0-motion-control",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"video_url": "https://example.com/input.mp4"
}
}),
})).json();
while (task.status === "queued" || task.status === "running") {
await new Promise((r) => setTimeout(r, 3000));
task = await (await fetch(`${API}/tasks/${task.id}`, { headers })).json();
}
console.log(task.status, task.cost, task.output.map((o) => o.url));
Parameters
| Parameter | Type | Allowed | Default |
|---|---|---|---|
prompt * | string | ||
quality | string | std pro | std |
image_url | string | ||
video_url * | string |
The same schema is available from GET /v1/models/kling-3.0-motion-control.









