If you call a text model, you know roughly what a request costs. Everyone prices per million tokens, so you can put two vendors in one column and subtract.
Images and video have no such habit. Four vendors, four units, and nothing on the pricing pages lines up. So most teams pick a video model the way they pick a font, then find the number at the end of the month.
The units don't line up
Here is what you actually get quoted, all of it real:
- Per second of output. Seedance, Hailuo, Wan, PixVerse, Kling. You pay for duration.
- Per clip, flat. Veo 3.1 charges one price whether you asked for 4, 6 or 8 seconds. Duration is free.
- Per image. Most image models: one price per generation, resolution included.
- Per image, with a resolution tier. GPT Image 2 and Nano Banana Pro charge separately for a 4K render.
Four units means four different mistakes. A per-second model looks cheap in the docs and isn't, because your clips are 10 seconds. A flat-rate model looks expensive and isn't, because you were going to generate the maximum length anyway. And a "per image" price tells you nothing until you know whether your resolution is included in it.
None of this is hidden. It's just spread across four vendor sites in four shapes, and nobody does the arithmetic before shipping.
One six-second clip, five prices
So do the arithmetic. Same job — one 6-second, text-to-video clip, no retries — at vendor list prices as recorded on 2026-08-27. Every model here supports a 6-second output, so nothing is being compared across durations:
| Model | Metered as | List price | One 6s clip |
|---|---|---|---|
| Veo 3.1 | per clip | $3.20 / clip | $3.20 |
| Seedance 2.5 | per second | $0.473 / s | $2.84 |
| Wan 2.7 Video | per second | $0.10 / s | $0.60 |
| Hailuo 2.3 | per second | $0.0467 / s | $0.28 |
| PixVerse V6 | per second | $0.045 / s | $0.27 |
Twelve times, top to bottom, for the same six seconds. For comparison, the gap people actually argue about in text — Claude Opus 4.5 at $25 per 1M output tokens against Claude Sonnet 5 at $10 — is 2.5x. Video is where the money is, and it's the surface nobody benchmarks in dollars.
"They're not the same quality" is the fair objection, and it's true — Veo lands shots that Hailuo doesn't. The point isn't that they're interchangeable. It's that a 12x spread deserves a deliberate decision, and right now it usually gets a default.
The two traps inside the units
Flat-rate clips punish short videos. Veo 3.1 costs $3.20 whether you generate 4 seconds or 8. That's $0.80 per second at 4 seconds and $0.40 at 8. If your product shows 4-second loops, you are paying double per second of what you ship. Generate at the maximum length and trim in ffmpeg — same bill, more material.
The 4K surcharge exists on some models and not others. Taking two models off one price list, so the comparison is apples to apples: GPT Image 2 charges 2.2x its standard-resolution price for a 4K render, while Seedream V4 charges exactly the same for both. So "just render everything at 4K" is free on one model and more than doubles the bill on the next, with the same line of code.
Normalize before you compare
One function, and every price page becomes one column. Feed it the numbers off the vendor docs:
def clip_cost(price, unit, seconds=6, n=1):
"""Cost of n outputs, normalized. unit: per_second | per_clip | per_image"""
if unit == "per_second":
return price * seconds * n
return price * n # per_clip and per_image ignore duration
catalog = [
("veo-3.1", 3.20, "per_clip"),
("seedance-2.5", 0.473, "per_second"),
("wan-2.7-video", 0.10, "per_second"),
("hailuo-2.3", 0.0467, "per_second"),
("pixverse-v6", 0.045, "per_second"),
]
for name, price, unit in sorted(catalog, key=lambda r: clip_cost(r[1], r[2])):
print(f"{name:15} ${clip_cost(price, unit, n=1000):>8,.0f} per 1000 clips")
Run it with your own clip length and your own monthly volume before you compare anything. At 1000 clips a month the table above spans $270 to $3,200 — that's a hiring decision, decided by a string in a config file.
What this doesn't fix
Normalizing tells you the cheapest way to buy a given model. It doesn't change the price of the model itself. That's the second lever: altrouter.ai resells the same media models below the vendors' own list prices — Hailuo 2.3 at $0.0375 per second against MiniMax's $0.0467, Veo 3.1 at $2.55 a clip against Google's $3.20 — through one API with the same parameters.
The honest gap, on this exact topic: for most video models our catalog flags its own per-second price as approximate, because the upstream meters in credits rather than seconds. Trust the charge that lands in your usage log over any table, including ours and including this one. Video generation is also asynchronous everywhere — you POST a job and poll for it — so there's no partial billing to inspect mid-render if a clip comes back unusable.
The one number to take away
Pick a unit, convert everything into it, then choose. One clip length, one resolution, one column of dollars. It's twenty minutes of arithmetic against a 12x spread, and it's the only comparison the vendor pages will never do for you.
Top comments (0)