Kling 3.0 Motion Control takes a real performance, a dance, a bit of acting, a product demo, and puts it onto a character from a single image. Kuaishou released it in March 2026 as the higher-fidelity tier of its motion transfer models, with steadier subject consistency than v2.6. The original sound from the reference clip carries over.
It suits brands whose mascot needs to move like a real person without falling apart mid-clip.
What you can make
- Trend dances performed by your own character or mascot
- Recorded acting turned into an animated character performance
- A brand figure copying real movement shot after shot
- Choreography previews before a real shoot
Settings that matter
image_url: the subject, clearly visible, in a pose close to the video's first frame.video_url: 3 to 10 seconds, MP4 or MOV up to 100 MB. Longer clips are rejected.quality:std(default) orpro.- Best source: one person, a steady camera and the whole body in frame.
- On Kadraris the subject's facing follows the image. Kuaishou's 30-second video-facing mode and the option to drop the audio are not exposed yet.
Starter prompt
The cartoon fox mascot from the image copies the moves
of the dancer, same rhythm and arm positions, keeps its
orange scarf, bright gym background, camera stays stillReplace the mascot details and background; keep "camera stays still" if your reference was filmed on a tripod.
Questions
What does a v3 Motion Control clip cost?
$0.249 per second, billed per second of the source clip. Failed generations cost $0.
Why was my 15-second clip rejected?
The limit on Kadraris is 10 seconds, because the subject's facing comes from the image. Trim the clip and try again.
Is there a cheaper option?
Kling 2.6 Motion Control has a lower per-second rate, with less consistent subjects. For the full process, see the motion control dance video guide.
Kling 3.0 Motion Control in your code
curl https://kadraris.com/v1/generate?wait=60 \
-H "Authorization: Bearer $KADRARIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-3.0-motion-control",
"input": {
"prompt": "Tracking shot of a cyclist riding through an empty city street at dawn, long shadows, light fog, film look",
"image_url": "https://example.com/input.png",
"video_url": "https://example.com/input.mp4"
}
}'import os, time, requests
API = "https://kadraris.com/v1"
H = {"Authorization": f"Bearer {os.environ['KADRARIS_API_KEY']}"}
task = requests.post(f"{API}/generate", headers=H, json={
"model": "kling-3.0-motion-control",
"input": {
"prompt": "Tracking shot of a cyclist riding through an empty city street at dawn, long shadows, light fog, film look",
"image_url": "https://example.com/input.png",
"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://kadraris.com/v1";
const headers = { Authorization: `Bearer ${process.env.KADRARIS_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": "Tracking shot of a cyclist riding through an empty city street at dawn, long shadows, light fog, film look",
"image_url": "https://example.com/input.png",
"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));
Input fields
| Parameter | Type | Allowed | Default |
|---|---|---|---|
prompt * | string | ||
quality | string | std pro | std |
image_url * | string | ||
video_url * | string |
Fetch this list as JSON with GET /v1/models/kling-3.0-motion-control.























