GPT Image 2.5 21:9 first frame, then Seedance 2.5: a still for $0.01
A 2560x1088 GPT Image 2.5 still costs $0.0109 at medium quality and $0.0431 at high. Use it as the first frame of a 21:9 Seedance 2.5 clip on Sume.

To start a 21:9 AI video from a designed frame on Sume, make the still with openai/gpt-image-2.5 at image_size 2560x1088 and send it as the first_frame of a seedance-2.5 request with aspect_ratio 21:9. The still is $0.0109 at medium quality, and a 6 second 720p clip is $3.48, so the pair is about $3.49.
Mind the default: the image docs say that if you omit quality, GPT Image 2.5 uses high, which is $0.0431 for the same size. Set quality yourself. Kling 4.0 accepts up to 10 keyframes (the fal explainer, read 2026-10-05); this recipe uses one still as the opening frame.
Why 2560x1088
The image docs give the custom-size rule for GPT Image 2.5: both edges multiples of 16, a maximum edge of 3840, an aspect ratio of at most 3:1, and 655,360 to 8,294,400 pixels. 2560 x 1088 meets all of those. 2560 is 160 times 16, 1088 is 68 times 16, the ratio is 2.35, and the pixel count is 2,785,280.
The Seedance 2.5 21:9 frame is 1470 x 630 at 720p, a ratio of 2.33. The still is slightly wider than the video frame, so the model fits it; keep the subject away from the left and right edges. A mismatch of two percent in ratio is small, but a 16:9 still sent to a 21:9 job would be cropped or padded, which is why the still should be made in the wide shape from the start.
Still cost by quality, and the pair
| Quality | Still | Clip | Pair |
|---|---|---|---|
| low | $0.0051 | $3.48 | $3.49 |
| medium | $0.0109 | $3.48 | $3.49 |
| high (default) | $0.0431 | $3.48 | $3.52 |
What is worth paying for
The still is a rounding error next to the clip, so spend on quality for the frame that carries the shot. The stronger saving is a draft clip at 480p, which is $1.61 for 6 seconds at 21:9 before you pay $3.48 at 720p. Reuse the same still for both.
Design the still for the wide frame. Leave empty space above and below the subject, keep faces and text away from the left and right edges, and ask for the light and the camera angle that you want to start from. A 21:9 image has a lot of horizontal room, so a composed establishing shot works better than a close portrait. If the first attempt is wrong, a second still at medium quality is a cent, so regenerate the still before you spend on the clip.
For a sequence, make the stills consistent. GPT Image 2.5 takes up to 16 image references, so you can pass the first still as a reference when you make the next one, which keeps the setting and the character close from shot to shot. Ten stills at medium quality cost about $0.11 in total, and at high about $0.43. Seedance 2.5 also accepts an end frame, so two stills can open and close one clip.
Remember that frame_images sets image-to-video mode. If you send input_references too, the video docs say that frame_images wins, so use one field for a given job.
The two requests
This prints the image request and the video request. It sends nothing unless SUME_API_KEY is set, and it stops after the still, because the still URL is needed for the second call.
import json, os
image = {
"model": "openai/gpt-image-2.5",
"prompt": "Wide shot of a lighthouse on a cliff at blue hour, empty sky above",
"image_size": "2560x1088",
"quality": "medium",
}
print(json.dumps(image, indent=2))
still_url = "https://media.sume.com/artifacts/artf_demo/still.png"
video = {
"model": "seedance-2.5",
"prompt": "Slow push in, waves moving, clouds drifting",
"duration": 6,
"resolution": "720p",
"aspect_ratio": "21:9",
"frame_images": [{
"type": "image_url",
"image_url": {"url": still_url},
"frame_type": "first_frame",
}],
}
print(json.dumps(video, indent=2))
print("SUME_API_KEY set:", bool(os.environ.get("SUME_API_KEY")))Run it
Send the image request to POST /v1/images, read data[0].url from the response, and use it as still_url. Then submit the video job to POST /v1/videos, poll it, and download, as the video generation docs describe. Give each job its own Idempotency-Key, and read the final prices from usage.cost. If the still comes back with the wrong proportions, check that the request used image_size and not size: the image docs say not to put custom pixels on size. Keep the still and its URL with the job record, so that you can rerun the clip from the same frame without paying for a new image.
Sources
Related posts
More in Use cases
- 48% thought Griffin was real: add a disclosure line to your clip
Tavus reports 48% of people took Griffin for a person after a one-minute call. If viewers cannot tell, label the clip: burn a disclosure line with caption cues.
- Guard a Sume run's text output with a yes/no model before you post it
Read output from a completed Sume run, ask a small decision model whether it is safe to publish, and treat a degraded outcome or null output as a hard stop.
- 300x600 half-page ad image: render 720x1440, keep a 600x1200 copy
A 300x600 half-page ad is 1:2. GPT Image 2.5 can render 720x1440 in one call; scale by 2.4 for 1x or by 1.2 for a 600x1200 retina file. Checks and prices.
- Handheld selfie UGC prompt for Seedance 2.5: a template and cost
A five-line prompt template for handheld, selfie-style UGC clips on Seedance 2.5, with 9:16 settings and the Sume price at 480p, 720p and 1080p.
Written by Sume