Motion ControlKling

Kling 2.6 Motion Control

kwaivgi/kling-v2.6/motion-control

Kling 2.6 Motion Control turns reference motion clips (dance, action, gesture) into smooth, realistic animations. Upload a character image (or source video) and a motion video; the model transfers the movement while preserving identity and temporal consistency.

Examples

Kling 2.6 Motion Control example 1

Parameters

NameTypeDefaultConstraintsDescription
image *Character Imageimage_uploadimage/jpeg,image/jpg,image/png · 0–1 itemsUpload a character image. Supported formats: .jpg/.jpeg/.png. Max file size: 10MB. Min dimensions: 300x300px. Aspect ratio: 1:2.5 to 2.5:1.
character_orientationCharacter Orientationselectimageimage | videoChoose whether to use an image or video as the character source.
promptPrompttext≤ 500 charsOptional positive prompt for the generation.
negative_promptNegative Prompttext≤ 500 charsOptional negative prompt for the generation.
resolutionGeneration Modeselect1080P720P | 1080P
keep_original_soundKeep Original SoundbooleantrueWhether to retain the original video sound in the output.

API

Call this model through one unified REST API. Get a key on the API Keys page.

cURL
# 1) Submit — returns { "task_uuid": "..." }
curl -X POST "https://www.namifusion.com/api/v1/marketplace/run/kwaivgi/kling-v2.6/motion-control" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "input": {
    "image": [
      "https://assets.namifusion.com/uploads/image/e6d71928-36de-4d71-a26c-9b1b427a6dfd/2026-03-27/0847e5142a20.jpg?imageMogr2/thumbnail/600x/format/webp/quality/85"
    ],
    "character_orientation": "image",
    "resolution": "1080P",
    "keep_original_sound": true
  }
}'

# 2) Poll until status is "completed", then read the output URLs
curl "https://www.namifusion.com/api/v1/marketplace/run/tasks/TASK_UUID" \
  -H "Authorization: Bearer YOUR_API_KEY"
Python
import time, requests

API_KEY = "YOUR_API_KEY"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}

# 1) Submit
resp = requests.post(
    "https://www.namifusion.com/api/v1/marketplace/run/kwaivgi/kling-v2.6/motion-control",
    headers=HEADERS,
    json={
        "input": {
            "image": [
                "https://assets.namifusion.com/uploads/image/e6d71928-36de-4d71-a26c-9b1b427a6dfd/2026-03-27/0847e5142a20.jpg?imageMogr2/thumbnail/600x/format/webp/quality/85"
            ],
            "character_orientation": "image",
            "resolution": "1080P",
            "keep_original_sound": True
        }
    },
)
resp.raise_for_status()  # 401/402/429/5xx stop here instead of polling a bad task
task = resp.json()

# 2) Poll until a terminal state (completed / failed / cancelled).
#    This model is allowed up to 600s server-side.
deadline = time.time() + 660
while task.get("status") not in ("completed", "failed", "cancelled"):
    if time.time() > deadline:
        raise TimeoutError(f"still {task.get('status')} — keep the task_uuid and poll later")
    time.sleep(3)
    poll = requests.get(f"https://www.namifusion.com/api/v1/marketplace/run/tasks/{task['task_uuid']}", headers=HEADERS)
    poll.raise_for_status()
    task = poll.json()

print(task["status"], task.get("output"))
JavaScript
const API_KEY = "YOUR_API_KEY";
const HEADERS = { Authorization: `Bearer ${API_KEY}` };

// 1) Submit
const resp = await fetch("https://www.namifusion.com/api/v1/marketplace/run/kwaivgi/kling-v2.6/motion-control", {
  method: "POST",
  headers: { ...HEADERS, "Content-Type": "application/json" },
  body: JSON.stringify({
    "input": {
      "image": [
        "https://assets.namifusion.com/uploads/image/e6d71928-36de-4d71-a26c-9b1b427a6dfd/2026-03-27/0847e5142a20.jpg?imageMogr2/thumbnail/600x/format/webp/quality/85"
      ],
      "character_orientation": "image",
      "resolution": "1080P",
      "keep_original_sound": true
    }
  }),
});
if (!resp.ok) throw new Error(`submit failed: ${resp.status} ${await resp.text()}`);
let task = await resp.json();

// 2) Poll until a terminal state (completed / failed / cancelled).
//    This model is allowed up to 600s server-side.
const deadline = Date.now() + 660 * 1000;
while (!["completed", "failed", "cancelled"].includes(task.status)) {
  if (Date.now() > deadline) throw new Error(`still ${task.status} — keep the task_uuid and poll later`);
  await new Promise((r) => setTimeout(r, 3000));
  const poll = await fetch(`https://www.namifusion.com/api/v1/marketplace/run/tasks/${task.task_uuid}`, { headers: HEADERS });
  if (!poll.ok) throw new Error(`poll failed: ${poll.status}`);
  task = await poll.json();
}

console.log(task.status, task.output);

Documentation

NamiFusion Kling 2.6 Motion Control

AI motion-controlled video generation: upload a character image and a motion reference video to create an animated video that preserves the character's identity.

NamiFusion Kling 2.6 Motion Control is a video generation service designed for motion transfer scenarios. It takes a character image and a motion reference video, transfers the dance, action, or gesture from the reference video onto the target character, and outputs a result video with better identity consistency and temporal coherence.


Key Features

  • Motion Transfer: Transfer body movements from a reference video to a target character, suitable for dance, performance, and action demonstration scenarios.
  • Character Consistency: Uses the character image as the visual subject of the generated video and preserves the person's appearance and identity features as much as possible.
  • Optional Prompt Control: Supports prompt and negative_prompt to provide additional guidance for style and undesired content.
  • Async Tasks: Returns a task_uuid after submission, and you can retrieve processing status and final results through polling.

Technical Specifications

ParameterDetails
Model IDkwaivgi/kling-v2.6-pro/motion-control
Request MethodAsync POST (submit task + poll for results)
InputCharacter image URL + motion reference video URL
OutputGenerated video URL
Processing TimeTypically tens of seconds to several minutes, with a maximum polling wait time of 10 minutes
Pricing$0.07 / second for 720P, $0.112 / second for 1080P, minimum charge of 3 seconds

Quick Start

API Endpoints

EndpointMethodDescription
/api/v1/marketplace/run/kwaivgi/kling-v2.6/motion-controlPOSTSubmit a motion control task
/api/v1/marketplace/run/tasks/{task_uuid}GETQuery task status and results

Authentication

Include your API Key in the request header:

X-API-Key: sk-your-api-key

Usage Example

Step 1: Submit a Task

curl -X POST "https://www.namifusion.com/api/v1/marketplace/run/kwaivgi/kling-v2.6/motion-control" \
  -H "X-API-Key: sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "input": {
      "image": "https://static.example.com/character.png",
      "video": "https://static.example.com/motion.mp4",
      "character_orientation": "image",
      "prompt": "full body, natural motion, cinematic lighting",
      "negative_prompt": "blur, distortion, extra limbs, low quality",
      "keep_original_sound": true
    }
  }'

Response Example:

{
  "task_uuid": "443ea3cd-4025-40d2-901f-ef18970dbc43",
  "status": "pending",
  "cost_credits": 0
}

Step 2: Poll Task Status

curl -X GET "https://www.namifusion.com/api/v1/marketplace/run/tasks/443ea3cd-4025-40d2-901f-ef18970dbc43" \
  -H "X-API-Key: sk-your-api-key"

Processing:

{
  "task_uuid": "443ea3cd-4025-40d2-901f-ef18970dbc43",
  "status": "processing"
}

Completed:

{
  "task_uuid": "443ea3cd-4025-40d2-901f-ef18970dbc43",
  "model_id": "kwaivgi/kling-v2.6-pro/motion-control",
  "status": "completed",
  "output": {
    "video_url": "https://cdn.example.com/results/kling_motion_control_output.mp4"
  },
  "cost_credits": 0,
  "created_at": "2026-03-27T11:40:00Z",
  "completed_at": "2026-03-27T11:41:20Z"
}

Python Example

import requests
import time

API_KEY = "sk-your-api-key"
BASE_URL = "https://www.namifusion.com/api/v1/marketplace/run"
HEADERS = {
    "X-API-Key": API_KEY,
    "Content-Type": "application/json",
}

payload = {
    "input": {
        "image": "https://static.example.com/character.png",
        "video": "https://static.example.com/motion.mp4",
        "character_orientation": "image",
        "prompt": "full body, natural motion, cinematic lighting",
        "negative_prompt": "blur, distortion, extra limbs, low quality",
        "keep_original_sound": True,
    }
}

submit_resp = requests.post(
    f"{BASE_URL}/kwaivgi/kling-v2.6-pro/motion-control",
    headers=HEADERS,
    json=payload,
)
submit_resp.raise_for_status()
task = submit_resp.json()

task_uuid = task["task_uuid"]
print(f"Task submitted: {task_uuid}")

while True:
    status_resp = requests.get(
        f"{BASE_URL}/tasks/{task_uuid}",
        headers=HEADERS,
    )
    status_resp.raise_for_status()
    result = status_resp.json()

    status = result["status"]
    print(f"Status: {status}")

    if status == "completed":
        print("Result:", result["output"]["video_url"])
        break

    if status == "failed":
        print("Failed:", result.get("error_message", "Unknown error"))
        break

    time.sleep(5)

Detailed Parameters and Return Values

Request Parameters

The request body is JSON, and all parameters are placed inside the input object:

{
  "input": {
    "image": "https://...",
    "video": "https://...",
    "character_orientation": "image",
    "prompt": "full body, natural motion",
    "negative_prompt": "blur, low quality",
    "keep_original_sound": true
  }
}
ParameterTypeRequiredDefaultDescription
imagestringYes-Character image URL. Supports .jpg, .jpeg, and .png, with a maximum file size of 10MB, minimum dimensions of 300x300, and an aspect ratio range from 1:2.5 to 2.5:1.
videostringYes-Motion reference video URL. Supports .mp4 and .mov, with a maximum file size of 10MB, minimum dimensions of 300x300, and an aspect ratio range from 1:2.5 to 2.5:1.
character_orientationstringNo"image"Character source type. The current model configuration uses image as the default. Supported values: image, video.
promptstringNonullOptional positive prompt for describing motion style, camera mood, character expression, and similar guidance. Maximum length is 500 characters.
negative_promptstringNonullOptional negative prompt for constraining unwanted content. Maximum length is 500 characters.
keep_original_soundbooleanNotrueWhether to preserve the original audio from the motion reference video.

Task Status

After submitting the task, query its status by polling. A 5-second polling interval is recommended:

StatusDescription
pendingThe task has been created and is waiting to be processed.
processingThe task is being processed.
completedThe task is completed, and the result video URL is available in output.video_url.
failedThe task failed. Check error_message for the reason.

Return Value Structure

Task Submission Response

FieldTypeDescription
task_uuidstringUnique task identifier used for later status queries.
statusstringInitial task status, usually pending.
cost_creditsnumberCredits consumed by this task.

Task Completion Response

FieldTypeDescription
task_uuidstringUnique task identifier.
model_idstringModel ID (kwaivgi/kling-v2.6-pro/motion-control).
statusstringTask status.
output.video_urlstringGenerated result video URL.
cost_creditsnumberCredits consumed.
created_atstringTask creation time (ISO 8601).
completed_atstringTask completion time (ISO 8601).
error_messagestringError message, returned only when failed.

How Parameters Affect the Output

ParameterEffect on Output
imageDetermines the appearance of the main character in the final video. A clear character image with no occlusion and complete framing is recommended.
videoProvides the motion trajectory and rhythm reference. Clearer movement and a more prominent subject usually lead to more stable transfer results.
promptAdds guidance for camera style, motion atmosphere, clothing details, or scene tendencies, but does not replace the reference motion itself.
negative_promptHelps reduce issues such as blur, distortion, extra limbs, and low-quality details.
keep_original_sound: trueThe output video preserves the original sound from the reference video as much as possible, making it more suitable for dance and performance scenarios.
keep_original_sound: falseThe output video does not preserve the original sound from the reference video, making it more suitable for later audio replacement or editing.

Notes

  1. Input URLs must be publicly accessible: Both image and video should be public URLs that the server can download directly.
  2. Using an image as the character input is recommended: The current model configuration defaults to character_orientation: "image", which is also the most stable and clearly defined integration method.
  3. Keep prompts concise and specific: prompt and negative_prompt work best as supplemental guidance. Avoid stacking too many conflicting descriptions.
  4. A 5-second polling interval is recommended: This model uses async task processing. Query the task status every 5 seconds, with a maximum wait time of 600 seconds.
  5. The result field is a single video URL: After task completion, read the result from output.video_url rather than from an array field like videos.