Kling 3 image-to-video on Sume: the first frame sets the shape
With a first frame, Sume's kling-3 builder does not send aspect_ratio. Crop the image to the shape you want before you submit. Here is the request.

When you give kling-3 a first frame on Sume, the request sent to the provider carries the image but no aspect_ratio, so the shape of the clip follows the image. Crop or pad the still to 16:9, 9:16 or 1:1 first, and do not rely on the field to reframe it.
The aspect_ratio field is sent only for text-to-video. This is how the Sume Kling 3 builder works, and it explains clips that come out in the wrong shape after someone adds aspect_ratio: 9:16 to an image request.
What the request looks like
Use frame_images with frame_type: first_frame on /v1/videos. An optional last_frame image pins the end. The API infers image-to-video from the presence of frame_images. Do not add input_references, because Kling takes none.
import json, os, urllib.request
body = {
"model": "kling-3",
"prompt": "The camera pushes in slowly while steam rises from the cup",
"duration": 5,
"resolution": "1080p",
"frame_images": [{
"type": "image_url",
"image_url": {"url": "https://example.com/cup-9x16.png"},
"frame_type": "first_frame",
}],
}
req = urllib.request.Request(
"https://api.sume.com/v1/videos",
data=json.dumps(body).encode(),
headers={
"Authorization": "Bearer " + os.environ["SUME_API_KEY"],
"Content-Type": "application/json",
"Idempotency-Key": "kling3-i2v-001",
},
)
print(urllib.request.urlopen(req).read().decode())Prepare the still
Export the image at the ratio you want in the clip, for example 1080 x 1920 for 9:16, and host it at a public https URL. The API fetches it, and an unreachable URL fails the job with a message that asks you to check the URL is publicly reachable.
Keep the subject inside the middle of the frame. Motion models often drift the edges, and a tight crop leaves nowhere for the drift to go.
Text-to-video differs
For a text-only request, aspect_ratio is honored: the builder maps the value to 16:9, 9:16 or 1:1. Send one of those three values explicitly, and check the catalog row for the list the API accepts.
| Mode | aspect_ratio sent to provider | Shape of output |
|---|---|---|
| Text-to-video | yes, 16:9, 9:16 or 1:1 | what you asked for |
| First frame | no | follows the image |
| First and last frame | no | follows the first image |
Related checks
See the Kling 3 first and last frame request for the end-frame rules, and the square clips post for which ids take 1:1.
A pre-flight list for image-to-video
Most wrong-shape clips come from the input, not the model.
- Export the still at the final ratio, not just any size.
- Use a public https URL. Private links fail with a download error.
- Do not send
aspect_ratioand expect it to crop an image request. - Do not send
input_referenceswithkling-3. It accepts none. - Pick a prompt that describes motion, not the contents of the picture, since the picture already supplies the contents.
Related posts
More in Developers
- Kling 3 negative prompt and cfg_scale on Sume: fixed, no field
Sume's kling-3 sends its own negative prompt and a cfg_scale of 0.5 to the provider. There is no public field to change either, so steer with the prompt itself.
- Kling motion control returns 400 on reference_image_urls or model
The Sume motion-control body is strict. It rejects Video 1.0 words such as reference_image_urls, reference_video_urls, model and provider endpoint fields.
- Kling motion control 402: a 30 s reference needs $4.725 in credits
402 insufficient_credits on Kling motion control means your balance is below the reserve for the declared length. 30 s is $4.725. Trim, then retry.
- 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.
Written by Sume