Kling 2.6 Motion Control lets a photo of your character perform the moves from someone else's video: a dance, a wave, a walk. Kuaishou released it in December 2025 as the lower-cost motion transfer tier. The audio from your source clip stays in the result, which suits movement timed to music.
You pay per second of the source clip, so short, tight clips keep the cost down.
What you can make
- Trend dance videos in volume, without a big budget
- A quick test of a motion idea before rendering it on v3
- Avatars repeating simple gestures
- Reusable social templates where only the photo changes
Settings that matter
image_url: the character photo. On Kadraris the subject keeps the facing from this image.video_url: the motion source, 3 to 10 seconds, MP4 or MOV up to 100 MB.quality:std(default) for tests,profor the takes you keep.- Cut the source clip to the exact movement you need; billing follows its length.
- Match the pose and framing of the photo to the first frame of the video for a cleaner transfer.
- The 30-second video-facing mode and the audio on/off switch are not on Kadraris yet.
Starter prompt
The woman in the photo performs the dance from the
video, same timing, keep her outfit and hairstyle,
plain studio background, full body in frameKeep "full body in frame" if the source dance uses the whole body; change the outfit details to match your photo.
Questions
What does a 2.6 Motion Control clip cost?
$0.138 per second, counted per second of the source clip. A failed generation costs $0.
How is it different from v3?
Kling 3.0 Motion Control costs more per second and holds the subject's look more consistently. Use 2.6 for volume and tests.
Where can I learn the full workflow?
The motion control dance video guide walks through it step by step.
Kling 2.6 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-2.6-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-2.6-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-2.6-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-2.6-motion-control.























