60-second Kling motion control video: two 30 s jobs, $9.45, one join
A 60-second performance on Sume is two 30-second motion control jobs, 60 x $0.1575 = $9.45, then a Timeline join. Split the reference at a still pose.

A 60-second Kling motion control video on Sume is two 30-second jobs, since duration_seconds stops at 30. The cost is 60 x $0.1575 = $9.45, plus $0.04 for two trim jobs, and then you join the two clips on Timeline. The one decision that matters is where to cut the reference: pick a moment where the performer is nearly still.
Cut the reference, not the output
Trim the 60-second reference into two parts with POST /v1/video-trim. The source must be on media.sume.com (import it first with POST /v1/media-imports) and each trim needs its own Idempotency-Key. Use start and end for each half, and keep the default exact precision, so that the cut lands on the frame that you chose.
Do not overlap the halves. An overlap pushes each part past 30 seconds, which is over the cap. Cut at exactly 30, and put any crossfade in the join.
The two submits
Submit both with the same still, so that the character looks the same in each half. Use keep_original_sound: true on both if the reference has the sound you want, and the join will carry the audio across the cut.
import os, requests
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
URL = "https://api.sume.com/v1/kling/3.0/motion-control"
def submit(part: int, motion_url: str) -> str:
body = {"image_url": "https://example.com/character.png",
"motion_video_url": motion_url,
"duration_seconds": 30, "mode": "async"}
r = requests.post(URL, json=body, timeout=60,
headers={**H, "Idempotency-Key": f"mc-60s-part-{part}"})
r.raise_for_status()
return r.json()["job"]["id"]The bill for 60 seconds
| Item | Count | Unit | Total |
|---|---|---|---|
| Motion control seconds | 60 | 0.1575 | 9.45 |
| Trim jobs | 2 | 0.02 | 0.04 |
| Generation plus trims | 9.49 |
Join and check
Join the two outputs in order on Timeline. If you want a soft cut, use a short crossfade of a few frames, not a long one, since a motion pass can end with a slightly different pose than the next one begins with. A cut at a still pose hides that difference.
Compare the last frame of part one with the first of part two before you commit the join. POST /v1/video-frames returns stills at the times you list, and a time must be less than the clip duration. If the character drifts between halves, regenerate the second half with the same still and a new idempotency key, which costs $4.725 and does not touch the first.
When one long take is better
Motion control is a copy of a performance, so a seam is only a problem if the pose at the cut is not the pose at the join. For a dance or a talk, pick a beat where the performer returns to rest. For a continuous move, such as a walk across a room, choose another route: seedance-2.5 and wan-3.0 list 30 seconds in the catalog and take text or image prompts, so a 60-second video there is also two jobs, with no performance to copy.
If the performance is the point, keep motion control and accept one cut. The cost for the second half is $4.725 either way.
Sources
Related posts
More in Use cases
- 728x90 leaderboard ad image: GPT Image 2.5 can't, Nano Banana 2 can
A 728x90 ad is 8.09:1. GPT Image 2.5 caps custom sizes at 3:1, but the Sume catalog lists 8:1 for google/nano-banana-2. Check the row, request 8:1, crop 1.1%.
- A 90-second 21:9 trailer: three 30 s Seedance 2.5 jobs, $52.46
Kling 4.0 tops out at 30 s, so a trailer is several clips. On Sume, three 30 s Seedance 2.5 jobs at 720p 21:9 are $52.26, plus $0.20 for the Timeline join.
- 970x250 billboard ad image: render 1920x640, crop 23% of height
A 970x250 ad is 3.88:1, wider than the 3:1 limit on GPT Image 2.5. Render 1920x640 (3:1), scale to 970 wide, and crop the height. Table of checks and prices.
- A/B test two AI music beds on one ad: cost and the Timeline steps
Make two beds for one ad at $0.125 each, render both cuts on Timeline at $0.10 per minute, and compare. A cost table for a 30-second ad.
Written by Sume