Same video model, different limits: OpenRouter vs Sume rows
Ten video models are on both OpenRouter and Sume; eight differ in duration or resolution. Veo, Kling, Seedance, Hailuo, Grok side by side, read 2026-10-11.

Yes, a model with the same name can accept different durations and resolutions on OpenRouter and on Sume, and for eight of the ten pairs below it does. Kling v3 Pro, Hailuo 3 Max, Grok Imagine Video 1.5, the Seedance 2.x rows and the Veo rows differ, while Wan 3.0 and Seedance 2.0 Mini match.
The OpenRouter figures come from its video models listing, read on 2026-10-11. The Sume figures come from the catalog code on main and the Video Generation docs. Neither side is a promise about your key: Sume's catalog is read per request at GET /v1/videos/models.
Where do the limits differ?
Durations are whole seconds on both sides. Resolutions are the tiers each side names. Where Sume lists a tier OpenRouter's listing does not, that does not prove the upstream model lacks it; it only shows what each catalog accepts.
| Model | OpenRouter | Sume |
|---|---|---|
| Seedance 2.5 | 4-30 s; 480p, 720p | 4-30 s; 480p, 720p, 1080p |
| Seedance 2.0 | 4-15 s; 480p to 4K | 4-15 s; 480p, 720p, 1080p |
| Seedance 2.0 Mini | 4-15 s; 480p, 720p | 4-15 s; 480p, 720p |
| Wan 3.0 | 2-30 s; 480p, 720p, 1080p | 2-30 s; 480p, 720p, 1080p |
| MiniMax H3 | 5-15 s; 2K | 5-15 s; 480p, 768p, 2K, 4K |
| MiniMax H3 Max | 5-15 s; 480p, 768p | 5-15 s; 480p, 768p, 1080p |
| Kling v3 Pro | 3-15 s; 720p | 4-15 s; 1080p only |
| Grok Imagine Video 1.5 | 1-15 s; 480p, 720p, 1080p | 4-15 s; 480p, 720p; first frame required |
| Veo 3.1 Fast | 4, 6, 8 s; 720p, 1080p, 4K | 4, 6, 8 s; 720p; text-to-video only |
| Veo 3.1 Lite | 4, 6, 8 s; 720p, 1080p | 4, 6, 8 s; 720p; text-to-video only |
Which differences break a ported request?
Three kinds matter in practice. First, a floor: Kling asks for at least 3 seconds on OpenRouter and 4 on Sume, and Grok drops from 1 to 4. A 2-second clip that worked before is rejected.
Second, a ceiling on resolution. Sume's Veo rows stop at 720p in the catalog code, which the code comment ties to the one mode that was proven, and they offer no image, reference or last-frame input. A 1080p or 4K Veo request has no equivalent.
Third, a mode. The Grok row on Sume needs image_url or a first frame and offers no text-to-video, no end frame and no aspect_ratio. Kling on Sume renders 1080p only; a 720p request from an older caller is still accepted but renders 1080p, according to the catalog notes.
What about the rows that match?
Wan 3.0 and Seedance 2.0 Mini match on both numbers, which makes them the lowest-risk swaps. Seedance 2.5 is a superset on Sume at the resolution tier. Billing is a separate question: Sume reserves the provider list price times 1.25 at submit, per the docs, so the same clip is priced differently even where limits agree, and usage.cost on the finished job is the figure to log.
Which swap should you test first?
Start with the pair where the numbers match and the model is the same, then move to the ones that differ only by an extra tier on Sume. For a Seedance 2.5 or MiniMax H3 Max workload, the extra Sume tier is optional: a request that stays inside the OpenRouter limits is also inside Sume's. For Kling, Grok and Veo, the Sume limits are narrower in at least one direction, so those need a changed request, not just a changed base URL.
Run one clip per row at the shortest duration and the lowest resolution your product ships. That keeps the test cheap, and it exercises the same field checks as a full batch. Then compare the supported_durations and supported_resolutions arrays on the Sume row with your request, which is what the script in the next section does.
A pre-flight check that reads both sides
Before a port, read each row's supported_durations and supported_resolutions from Sume and compare them with the request you used to send. The check below prints any duration or resolution that a model in your config would no longer accept.
A mismatch is a 400, not a silent clamp, so catching it in CI is cheaper than discovering it in a batch. The first post in this pair, which of OpenRouter's 26 ids have a Sume id, covers the rows that have no Sume twin at all.
import os, requests
WANT = {"kling-3": (3, "720p"), "grok-imagine-video-1.5": (1, "1080p")}
r = requests.get("https://api.sume.com/v1/videos/models",
headers={"Authorization": "Bearer " + os.environ["SUME_API_KEY"]}, timeout=30)
r.raise_for_status()
rows = {m["id"]: m for m in r.json()["data"]}
for mid, (secs, res) in WANT.items():
m = rows.get(mid)
if m is None:
print(mid, "not listed for this key")
continue
if secs not in m["supported_durations"]:
print(mid, secs, "s not accepted")
if res not in m["supported_resolutions"]:
print(mid, res, "not accepted")Sources
Related posts
More in Comparisons
- Prism audio tags vs Sume generate_audio and audio references
Prism's README describes music, sfx and speech tags. Sume gives a generate_audio flag and audio references on some ids. Which ids, and the limits.
- Stability's Stable Image edit tools, matched to Sume image routes
Which of Stability's Stable Image edit, upscale and control tools have a Sume route: mask edits, background removal and upscale yes, outpaint and sketch no.
- Submagic caps video at 2, 5 or 30 min; Sume prices up to 60 seconds
Submagic allows 2, 5 or 30 minute videos by plan. Sume's $0.20 caption job is priced for videos up to 60 seconds. Which one fits which video length.
- Synthesia Syren writes video as code: what Sume has instead
Syren is Synthesia's prompt-to-video agent in early access. Sume has no equivalent; it has a script-to-avatar API and a timeline. The gap, mapped.
Written by Sume