Motion transfer technology by Kuaishou. Apply the dance or movement from a reference video to a character image, producing a video of that character performing the motion. It needs both inputs: one character image and one motion video. Up to 30s, $0.06/s at 720p and $0.10/s at 1080p. Async: create a task, then poll the same endpoint for the result.
input_urls — the character photo, full body works best (PNG / JPG). This is who moves.video_urls — the dance / motion source video (MP4). This is how it moves.Both fields are arrays and both are required. Swap them — motion clip in input_urls, portrait in video_urls — and the job will not do what you meant.
| Model | API | Duration | Price |
|---|---|---|---|
| Kling Motion Control | kling-motion-control | up to 30s | $0.06/s+ (720p $0.06/s · 1080p $0.10/s) |
| DreamActor V2 | rh-dreamactor/dreamactor-v2 | up to 30s | $0.06/s |
DreamActor V2 does the same job — image + reference video, character motion transfer; see /models/dreamactor-v2. The parameter contract on this page is the one for kling-motion-control.
POST /api/v1/video/generations — async: create, then poll the same endpoint for the result.
# Step 1: Create motion control task
curl -X POST https://apimodels.app/api/v1/video/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-motion-control",
"input_urls": ["https://example.com/character.png"],
"video_urls": ["https://example.com/dance-motion.mp4"],
"mode": "720p",
"character_orientation": "video"
}'
# Step 2: Poll status
curl "https://apimodels.app/api/v1/video/generations?task_id=TASK_ID" \
-H "Authorization: Bearer YOUR_API_KEY"| Field | Required | Type | Description |
|---|---|---|---|
| model | Yes | string | Must be "kling-motion-control" |
| input_urls | Yes | array | Character reference image URLs (PNG / JPG) |
| video_urls | Yes | array | Motion reference video URLs (MP4) |
| mode | No | string | "720p" (default) or "1080p" |
| character_orientation | No | string | "video" (default) — follow the motion video orientation, or "image" — follow the character image orientation |
| callback_url | No | string | Webhook URL called when the task completes |
| Valor | Orientation follows |
|---|---|
| video (default) | The motion reference video |
| image | The character image itself |
POST to https://apimodels.app/api/v1/video/generations on apimodels.app with model "kling-motion-control", put the character photo in input_urls and the dance/motion clip in video_urls, then poll GET /api/v1/video/generations?task_id= until state is completed and read data.resultUrls[0]. Both fields are arrays and both are required.
It is billed per second of video on apimodels.app: $0.06/s at 720p and $0.10/s at 1080p, for clips up to 30 seconds. A 10-second 720p clip is therefore $0.60.
Set mode to "1080p" in the create request — the default is "720p". Pricing follows the resolution: $0.06/s at 720p, $0.10/s at 1080p.
A full-body photo works best. Pass it as a public PNG or JPG URL in input_urls; the motion source stays in video_urls as an MP4 URL.
It decides whose orientation the generated character follows: "video" (the default) follows the motion reference video, while "image" follows the orientation of the character image you uploaded.
Yes — DreamActor V2 (rh-dreamactor/dreamactor-v2) also does image + reference video character motion transfer, at $0.06/s for clips up to 30 seconds. Both run through the same video endpoint and the same API key.