Luma Ray3.2 image-to-video ad: first-frame models on Sume at 5 seconds
Luma Ray3.2 is not on Sume. For a still-to-video ad, a 5-second 720p clip is $0.63 on Omni or Wan, $0.70 on Kling 3 and $0.38 on H3 at 768p.

Luma Ray3.2 is not a Sume catalog id, so for an image-to-video ad pick a listed model that takes a first frame: a 5-second clip costs $0.38 on minimax-h3 at 768p, $0.63 on gemini-omni-flash-1.1 or wan-3.0 at 720p, and $0.70 on kling-3. Every one of them takes the still through frame_images with frame_type first_frame.
This post makes no claims about Luma's own specs. Sume figures are from the Video Router guide and Video Generation, read 2026-10-05.
Five-second still-to-video prices
Sume bills the provider list price times 1.25 and rounds the job up to the cent, so a one-second figure here is a rate, not a charge.
| Model | Resolution | Rate per second | 5 s job | Last frame |
|---|---|---|---|---|
| minimax-h3 | 768p | $0.075 | $0.38 | Yes |
| gemini-omni-flash-1.1 | 720p | $0.125 | $0.63 | Yes |
| wan-3.0 | 720p | $0.125 | $0.63 | Yes |
| kling-3 | 720p | $0.14 | $0.70 | Yes |
Using the first frame
Put the still in frame_images as first_frame and describe only the motion in the prompt, since the picture is already fixed. If you also send input_references, frame_images takes precedence on the models that accept both.
Ratios differ: Omni takes 16:9 and 9:16, Kling adds 1:1, Wan adds 4:3 and 3:4. Crop the still to the target ratio before sending.
- Product on a clean background: Kling 3 for a silent clip, Omni if you want sound.
- Longer than 10 s: Wan 3.0.
- Cheapest still-to-video: H3 at 768p.
Request
Submit the still as a first frame.
import os, time, requests
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
payload = {
"model": "wan-3.0",
"prompt": "Camera pushes in slowly, steam rises from the cup",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"frame_images": [
{"type": "image_url", "image_url": {"url": "https://example.com/cup.png"}, "frame_type": "first_frame"}
],
}
job = requests.post("https://api.sume.com/v1/videos", headers=H, json=payload).json()
while True:
time.sleep(30)
s = requests.get(job["polling_url"], headers=H).json()
if s["status"] in ("completed", "failed", "cancelled"):
break
print(s["status"], s.get("unsigned_urls"), s.get("usage"))Sources
Related posts
More in Comparisons
- Lyria 3.5 music: $0.125 a track on Sume vs $0.08 a song at Google
Google lists Lyria 3.5 at $0.08 a song; Sume's Music Router bills a fixed $0.125 a generation. For 200 holiday ad beds the gap is $10.00. What it covers.
- Lyria 3.5 vs Suno v6 for ad background music
Lyria 3.5 is an API at $0.08 a song with SynthID. Suno v6 is a subscription with commercial rights only on paid plans. Pick by workflow, then check terms.
- MAI-Transcribe-2 vs Sume STT 1.0: keywords, diarization, price
MAI-Transcribe-2: keyword biasing, diarization, $0.10/hr limited-time. Sume STT 1.0: $0.01 per minute ($0.60/hr), word timings always on, no keyword field.
- MAI streaming regions vs Sume: no region field in the STT request
MAI-Transcribe-2-Streaming lists swedencentral, centralus, southindia (eastus2 soon). Sume's STT request has no region field, so ask support about residency.
Written by Sume