Picking an image-to-video model looks like a pricing table problem until you ship something. Then the questions get concrete: does the clip have to end on a specific product shot? How long is the shot? Does it need sound? OpenRouter’s comparison, published September 29, 2026, organizes four model lines — Veo 3.1, Seedance, Kling v3.0, and Grok Imagine Video — around exactly those constraints, and it’s worth reading that way rather than as a leaderboard.
One API, very different constraints
All the models in the comparison run through the same submit-poll-download lifecycle on POST /api/v1/videos. What differs is what each model accepts: durations from 1 to 30 seconds, resolutions from 480p to 4K, frame roles, and audio. OpenRouter notes the settings and pricing were checked on September 11, 2026, and cautions that video pricing shifts with resolution, audio, and input type — so treat the numbers as a snapshot, not a quote.
The distinction I find most useful in their framing is how an image participates in the request. frame_images pins an image as the exact first frame, last frame, or both. input_references gives the model material to follow without locking it to a frame position — useful when you want a character’s appearance preserved across a new shot. If you send both fields, frame_images wins and the job counts as image-to-video. That’s a small API detail, but it’s the difference between “this product video must open on this exact shot” and “roughly this look.”
Duration is the cost lever
Most of these models bill per second, so clip length is a budget decision before resolution even enters the picture. At Seedance 2.5’s starting rate of about $0.1028 per second at 480p, a 4-second clip starts near $0.41 and a 30-second clip near $3.08 — and that’s the floor, before you go to 720p or change input configuration.
A few rows worth flagging from the comparison:
- Veo 3.1 Lite starts at $0.03/s at 720p without audio, versus $0.20/s for full Veo 3.1 — OpenRouter itself uses Lite for iteration while the motion is still changing.
- Seedance 2.5 is the only model in the set that produces a 20- or 30-second shot in one generation, and it accepts up to 50 reference assets. If you don’t need that range, the Seedance 2.0 line does the same first/last-frame workflow at lower starting rates.
- Kling v3.0 Standard runs $0.084/s without audio, $0.126 with. Pro is $0.112 and $0.168.
- Grok Imagine Video 1.5 fixes the first frame only — if the clip must end on a second exact image, it’s out.
One subtlety worth knowing: Seedance prices are per video token (height × width × duration × 24, divided by 1,024), not per second, so the per-second figures shown are derived starting rates at 480p.
Three traps before you spend credits
First, frame roles aren’t uniform. Not every model supports both first_frame and last_frame — check supported_frame_images in the models catalog rather than assuming. Grok Imagine Video lines are first-frame-only; everything else in the comparison handles both.
Second, “not listed” means the model description doesn’t mention reference inputs — it doesn’t mean references are rejected. OpenRouter is explicit about this, and points to their reference-to-video cookbook for confirming support before you build on it.
Third, and this is the trap that caught my eye: the TypeScript SDK retries 5XX responses with exponential backoff for up to an hour by default. A video submission starts billable work. If the server accepts the job and then the response fails transiently, an automatic retry submits a second paid job. OpenRouter’s example passes retries: { strategy: "none" } on the submission call so a failure surfaces as an error you handle yourself. That default-retry-means-double-charge behavior is easy to miss and expensive to discover in production.
Also mundane but real: verify your source image URL returns a 200 with an image content type (image/jpeg, image/png, image/webp) using a direct request. A URL that works in your browser can still fail the provider’s fetch if it sits behind a cookie, an HTML redirect, or a bot check.
How I’d use this
Filter on the constraints that can’t be negotiated — required duration, required frame control — then compare what’s left on resolution, audio, and price. That’s the same per-second framing I argued for in my earlier piece on picking an image-to-video model: model hype rarely survives contact with a price-per-second table.
Two caveats to keep in mind. The pricing was checked on a single date, and OpenRouter serves models beyond these four lines — their video models collection is the current catalog, and GET /api/v1/videos/models returns live supported settings and SKUs. And notably, every Seedance model runs through hosted APIs only; OpenRouter found no published weights or license, so nothing in that line can run locally or air-gapped. If deployment constraints matter to you, that’s a selection criterion, not a footnote.
The practical next step: write down the two or three constraints your feature actually requires, query the models endpoint for the current settings, and prototype with the cheapest tier that meets them before anyone falls in love with a 4K draft.
Sources
AI-assisted summary compiled from the sources above, reviewed by a human before publishing.
