Image Generation API Pricing: FLUX vs Seedream vs Nano Banana Compared
Image generation pricing gets less attention than video pricing, mostly because per-image costs are small enough in absolute terms that a 2x difference feels less urgent than the same ratio on a per-second video rate. At real volume, though, the math works out the same way. Here's real, current per-provider pricing across four widely used image models.
Full pricing table
| Model | Cheapest host | Price | Priciest host | Price | Spread |
|---|---|---|---|---|---|
| FLUX.2 Dev | MachGen | $0.0031/image | Fal | $0.0120/image | 3.9x |
| Nano Banana 2 | MachGen | $0.0335/image | Fal | $0.0800/image | 2.4x |
| Nano Banana Pro | MachGen | $0.0670/image | Fal | $0.1500/image | 2.2x |
| Seedream 5.0 Pro | Atlas Cloud | $0.0360/image | OpenRouter | $0.0450/image | 1.25x |

FLUX.2 Dev shows the widest spread in this table by far — almost 4x between MachGen and Fal for the identical model. That's a bigger relative gap than any of the video model comparisons in this series, on a per-unit basis, though the absolute dollar amounts per image are small enough that it takes meaningful volume before the gap becomes a real budget line item.
MachGen wins here too
Every one of the three models where MachGen and Fal both compete, MachGen is the cheaper option — consistent with the pattern across the video comparisons in this series (see Atlas Cloud vs MachGen: Which Video API Reseller Is Cheaper?). This is now a pattern across seven separate models spanning both video and image generation, which is strong enough evidence to treat MachGen's general pricing strategy — thin margins across its catalog — as a real, repeatable signal rather than a one-off.
Where the math starts to matter
FLUX.2 Dev's per-image gap looks trivial at low volume — $0.0031 vs $0.0120 is less than a cent either way. But image generation products routinely run at volumes video products don't: a feature generating one image per user action, across a large active user base, can produce hundreds of thousands of images a month.
At 500,000 images a month:
- MachGen: 500,000 × $0.0031 = $1,550/month
- Fal: 500,000 × $0.0120 = $6,000/month
That's a $4,450/month difference — nearly 4x, exactly matching the per-unit ratio, because at this scale rounding differences wash out and the ratio is the whole story.
Nano Banana 2 vs Nano Banana Pro: is the upgrade worth it?
Both tiers show a similar 2.2-2.4x spread between MachGen and Fal, so the choice between the two isn't really about which host to use — it's about which tier fits your use case. Nano Banana Pro costs roughly 2x Nano Banana 2's rate at either host ($0.067 vs $0.0335 at MachGen; $0.15 vs $0.08 at Fal), consistent enough across both hosts that it's clearly a model-level price difference, not a host-specific one. If Pro's quality improvement isn't visibly worth double the base tier's cost for your specific use case, that's a bigger lever than shopping hosts for either tier individually.
Seedream 5.0 Pro: the tightest market in this table
Seedream 5.0 Pro's spread — 1.25x between Atlas Cloud and OpenRouter — is far narrower than the FLUX or Nano Banana comparisons, and notably, OpenRouter (a resale channel in every other comparison in this series) isn't the priciest option by much here. A market this tight means host selection for Seedream specifically is close to a wash on price, similar to the Novita-vs-WaveSpeedAI tie for Kling (see Novita vs WaveSpeedAI for Kling API Access) — other factors should decide it.
A second worked example: a mixed image pipeline
A product generating a mix of image types monthly — 200,000 FLUX.2 Dev images for quick previews, 50,000 Nano Banana Pro images for final, higher-quality output:
- All at MachGen: (200,000 × $0.0031) + (50,000 × $0.067) = $620 + $3,350 = $3,970/month
- All at Fal: (200,000 × $0.012) + (50,000 × $0.15) = $2,400 + $7,500 = $9,900/month
Routing this mix through MachGen instead of Fal saves $5,930/month — a 60% reduction — without changing which model handles which part of the pipeline, only which host serves each request.
Frequently asked questions
Does MachGen's price advantage hold for every image model, or just these three? These three (plus the video models covered elsewhere in this series) are where a direct MachGen-vs-Fal comparison was available in VideoRouter's registry — check the specific model you need, since this isn't an exhaustive claim about MachGen's entire catalog.
Is FLUX.2 Dev's quality noticeably different from FLUX.2 Pro or other FLUX tiers? Different FLUX tiers trade quality for cost the same way video model families do — Dev is positioned as a faster, cheaper tier within the FLUX lineup. Check VideoRouter's models page for the full FLUX lineup and its per-tier pricing if Dev's quality doesn't clear your bar.
Why is Seedream's provider spread so much narrower than FLUX or Nano Banana's? Possibly a function of how many hosts currently carry Seedream 5.0 Pro versus how many carry FLUX.2 Dev or Nano Banana — a narrower host list generally means less price competition, which is consistent with the tighter 1.25x spread shown above versus FLUX's nearly 4x spread.
Do these prices include any volume discounts? No — every rate in this article is the standard per-image list price at each host. Volume-based negotiated pricing, if a host offers it at your scale, would need to be checked directly with that host and isn't reflected in VideoRouter's public registry.
Is image generation billed synchronously the same way across every model? Most image models return synchronously, but always check the specific model's documented behavior at /docs/image-generation rather than assuming — a small number of higher-latency image models may follow the same async job pattern video generation uses.
How to call any of these
Image generation shares the same unified request pattern as video, through /v1/images rather than /v1/videos:
import requests
resp = requests.post(
"https://videorouter.sh/api/v1/images",
headers={"Authorization": "Bearer llmr_sk_live_...", "Content-Type": "application/json"},
json={
"model": "black-forest-labs/flux.2-dev",
"prompt": "a ceramic mug on a wooden table, morning light",
"n": 1,
},
)
image_url = resp.json()["data"][0]["url"]
Unlike video, image generation is typically synchronous — no polling loop required for most models. See /docs/image-generation for the complete reference, including provider pinning to a specific host (MachGen, for the lowest verified rate across this whole comparison) via the same trailing-provider-suffix pattern used for video models.