Crop a 16:9 AI clip to 21:9 with video filter: height 0.762, y 0.119
Cut a 16:9 Wan 3.0 or Kling 3 clip to a 21:9 frame for $0.02: crop width 1, height 0.762, y 0.119. Compared with generating 21:9 natively on Sume.

To get a 21:9 frame from a 16:9 AI clip on Sume, send one crop op to the video filter with x 0, y 0.119, width 1 and height 0.762. It costs $0.02 per encode, the check is free, and the clip keeps its source audio and frame rate. Use it when the model that suits your shot, such as Wan 3.0 or Kling 3, has no 21:9 option.
Kling 4.0 adds 21:9, per the fal explainer (read 2026-10-05), but its full launch is due in October. Until then, a crop is the quick way to a wide look from a model that only lists 16:9, 9:16 and 1:1.
The fractions
The video filter docs describe crop as a rectangle in fractions of the source frame: x and y are in 0 to 1, width and height are in 0.05 to 1, the rectangle must stay inside the frame, and the compiler rounds to even values for yuv420p. The source must be a clip in your workspace's media.sume.com storage and no longer than 300 seconds.
A 21:9 frame from a 16:9 source keeps the full width and a fraction of the height. The fraction is (16 / 9) / (21 / 9), which is 0.762. Centre it with y = (1 - 0.762) / 2 = 0.119. A lower y (for example 0.05) keeps more of the sky and a higher y keeps more of the floor, so pick it by where the subject sits.
What the crop leaves, per source size
| Source clip | Source size | After crop | Share of frame kept |
|---|---|---|---|
| Wan 3.0 480p | 864x496 | about 864x378 | 76% |
| Wan 3.0 720p | 1280x720 | about 1280x548 | 76% |
| Kling 3 / Wan 1080p | 1920x1080 | about 1920x822 | 76% |
| Seedance 2.5 21:9 native 720p | 1470x630 | no crop needed | 100% |
Crop or generate 21:9 natively
Compare the two routes on price. A native Seedance 2.5 clip at 720p 21:9 and 10 seconds costs $5.81 and arrives at 1470 x 630. A 10 second Wan 3.0 clip at 720p is $1.25, and with the $0.02 crop it is $1.27 and arrives at about 1280 x 548. Cropping is about a fifth of the cost, with fewer pixels, and the subject must be framed with the crop in mind.
The native route is better when the model composes for the wide frame, for example a wide establishing shot with action at the edges. The crop route is better for a drafted shot or a lower-priced background plate. Kling 3 at 10 seconds is $1.40 with audio off or $2.10 with audio on, and it also takes the crop.
Build the crop
This builds the body for the free /check call from a source size and prints it. It does not call the API.
import json
def crop_to_ratio(src_w, src_h, ratio_w, ratio_h, y_center=0.5):
target_h = (src_w * ratio_h / ratio_w) / src_h
if target_h >= 1:
raise ValueError("source is already at or wider than the target ratio")
height = round(target_h, 3)
y = round((1 - height) * y_center, 3)
return {"op": "crop", "x": 0, "y": y, "width": 1, "height": height}
op = crop_to_ratio(1920, 1080, 21, 9)
body = {
"video_url": "https://media.sume.com/artifacts/artf_demo/shot.mp4",
"ops": [op],
}
print(json.dumps(body, indent=2))
print("expected height px:", round(1080 * op["height"]))Check, then encode
Check the framing before you commit a batch. Pull a still from the source with the video frames endpoint, apply the same fractions to it in your head or in an image editor, and look at where the head, horizon and any on-screen text fall. A 21:9 crop removes 24 percent of the height, which is about 170 pixels of a 720p frame, roughly 85 from the top and 85 from the bottom, so prompts for the source clip should keep the subject in the middle band.
Prompt for it from the start. Ask the model for a wide establishing shot with the subject centred and empty space above and below, and avoid captions or logos in the top or bottom fifth. If a clip fails the check, a different y fraction often rescues it, and a new encode is only $0.02.
Send the body to POST /v1/video-filter/check first. It runs the same checks as the encode and returns valid, diagnostics and an estimate, without creating a job. Then send it to POST /v1/video-filter with an Idempotency-Key, poll GET /v1/jobs/{id}/status, and read video_url from the result. The jobs docs cover the polling.
The output is a new file and the source does not change. Put it into a Timeline slot as usual, and set the Timeline canvas to a 21:9 size so that cover does not crop it again.
Sources
Related posts
More in Media tools
- Cut a 90 s music window: timeline-audio split and range end errors
Use timeline-audio split with ranges [{start, end}] to cut a window. end must exceed start or you get audio_range_end_before_start; omit end for the rest.
- Day of the Dead video music: a 60-second tribute brief
Brief an instrumental bed for a 60-second Day of the Dead tribute video with guitarron, trumpet and harp: one generation, one render, $0.225 on Sume.
- Dental clinic explainer: a calm AI music bed and its cost
Brief a calm, non-medical-sounding instrumental for a 90-second clinic explainer, duck it under the voiceover and see the audio cost: $0.325 on Sume.
- Did my Wan 3.0 clip actually cut between shots? Check with stills
Wan 3.0 advertises auto scene splitting, so verify it: pull stills at named seconds with Sume video inspect, or read shot cuts with reference ingest.
Written by Sume