Kling motion control: output length follows the motion video

In Sume's Kling 3.0 motion control, duration_seconds (1-30) only sets the reservation. The motion video sets the output length. Price: $0.1575 a second.

5 min readSume
All posts

In Sume's Kling 3.0 Motion Control, the length of your motion_video_url sets the length of the output. The required duration_seconds field (1 to 30) only tells Sume how much to reserve at admission, and is never forwarded to the provider.

So declare it honestly: round up to the real length of the motion video, because that is what the reservation is based on.

The request

The route is POST /v1/kling/3.0/motion-control, with the face-control alias POST /v1/avatar-1.0/motion-control and two model-run twins. All of them store the public model id kling/3.0/motion-control. The body needs exactly one visual source (image_url, or avatar_id or avatar_handle), a motion_video_url, and duration_seconds.

Optional fields are prompt (appearance steering only), keep_original_sound (default true, false gives a silent clip), and character_orientation (video by default, or image). Send an Idempotency-Key. The body is strict: Video 1.0 words such as reference_image_urls and model are rejected.

curl -X POST https://api.sume.com/v1/kling/3.0/motion-control \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: kling-mc-001" \
  -d '{"image_url":"https://example.com/character.png",
       "motion_video_url":"https://example.com/dance-8s.mp4",
       "duration_seconds":8,"mode":"async"}'

What the reservation costs

The price is ceil(duration_seconds) times the Kling motion-control list ($0.126 per output second, fal list noted 2026-08) times the 1.25 Sume margin, which is $0.1575 per second. Sume reserves it at admit, captures it on completion and refunds it on failure.

Reserved amount by declared duration (computed from the Sume docs rate, read 2026-10-05)
duration_secondsReserve at $0.1575 a second
1$0.1575
5$0.7875
8$1.26
10$1.575
30$4.725

Why the declaration matters

The provider has no duration setting, so there is nothing to tune on the model side. The length of the reference clip decides how long the character moves. If you under-declare, you ask Sume to reserve less than the real clip will need; if you over-declare, you reserve more than you need. Measure the motion video first with video inspect, which returns a probe, and use the probed length rounded up.

The cap is 30 seconds. For a longer performance, cut the motion reference into pieces of 30 seconds or less with video trim and join the outputs in Timeline 1.0.

Audio and orientation

With keep_original_sound: true the sound of the reference video is kept, which makes this a motion-and-voice transfer rather than a lip-sync tool. Set it to false for a silent clip you can score in Timeline. character_orientation of video follows the reference's orientation and image follows the still.

Kling 3.0 Motion Control is a different product from the Video 1.0 kling-3 text-to-video and start/end-frame id, and the motion route will not accept that id's reference fields.

A two-job example

You have a 42-second dance reference and one character still. The cap is 30 seconds per job, so cut the dance into 21-second halves with video trim (start 0 and duration 21, then start 21 and duration 21), run motion control twice with duration_seconds: 21, and join both outputs in Timeline. Each job reserves 21 x $0.1575 = $3.3075, so $6.615 for both, plus $0.10 for a one-minute render.

Check the arithmetic against the live price in GET /v1/catalog, because the list price quoted in the docs is dated 2026-08.

Admission preview

POST /v1/generation/admission-preview accepts the public id and the legacy face-control id, and normalizes both to kling/3.0/motion-control. Use it to see the reserve before you spend. If the balance is too low, the submit is refused at admission rather than failing partway.

Checklist before you submit

  • Probe the motion video with video inspect and note its duration.
  • Round up and set duration_seconds between 1 and 30.
  • Send exactly one of image_url or an avatar id or handle.
  • Do not send model, reference_image_urls or provider endpoint fields.
  • Add an Idempotency-Key, and poll GET /v1/jobs/:id/status or use a webhook.

Before you build

Before you build, read the linked Sume docs page for the exact request fields, limits and prices, because those pages are the source of truth and can change. Run one short, cheap test with your own material first, check the output in a player and in your editor, and only then scale to the full shot list. Keep every job id and file you approve, so a later change never forces you to regenerate work that was already signed off. Note that this post describes Sume's catalog and tools; Sume does not run Luma Ray 3.2, and nothing here claims HDR or EXR output.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume