200 Nano Banana thumbnails: budget from 9 to 30 dollars
Google lists Gemini 3.1 Flash Image at about $0.045 to $0.151 per image by resolution. What 50, 200 and 1,000 thumbnails cost at each end of that range.
At Google's listed range of about $0.045 to $0.151 per image, 200 thumbnails from Gemini 3.1 Flash Image (Nano Banana 2) cost between $9.00 and $30.20 before retries. The figure moves with the output resolution you choose, so pick the size first and then multiply.
Where the range comes from
Google's pricing page lists Gemini 3.1 Flash Image output at $60 per 1M tokens and translates that into roughly $0.045 to $0.151 per image depending on resolution. The low end corresponds to the smaller sizes and the high end to the larger ones. The page does not give a single flat price, so a budget has to carry both ends.
| Images | At $0.045 each | At $0.151 each |
|---|---|---|
| 50 | $2.25 | $7.55 |
| 200 | $9.00 | $30.20 |
| 1,000 | $45.00 | $151.00 |
Add a retry allowance
Thumbnails are rarely accepted on the first try. If you expect to keep one image in three, multiply the table by three: 200 keepers at the low end becomes 600 generations, or $27.00. Decide your keep rate from a small test of 20 images before you size the full batch.
Drafting at a small size and regenerating only the winners at a larger size usually costs less than generating everything large. The arithmetic is simple: 200 drafts at $0.045 plus 20 finals at $0.151 comes to $12.02.
Reading the cost on Sume
The numbers above are Google's list prices. On Sume, the amount you pay is the pricing line on the model's endpoint record (GET /v1/images/models/{model_id}/endpoints), and cost_usd × n is the cost of a request. Each image response also carries usage.cost, the USD amount billed, so you can add them up as a batch runs. Token counts are always 0 in v1 because image models are metered per image.
Failed or cancelled generations are not billed, so retries on failures do not add to the total.
import os
import requests
URL = "https://api.sume.com/v1/images"
HEADERS = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
def main() -> None:
total = 0.0
for prompt in ["a red kettle on a white desk, thumbnail composition"]:
r = requests.post(
URL,
headers=HEADERS,
json={"model": "nano-banana-2", "prompt": prompt, "aspect_ratio": "16:9", "resolution": "1K"},
timeout=60,
)
if r.status_code == 200:
total += r.json()["usage"]["cost"]
else:
print(r.status_code, "is not a finished image; poll the job")
print(f"billed so far: ${total:.4f}")
if __name__ == "__main__":
main()Takeaway
Budget with both ends of the range, add a keep-rate multiplier, and track usage.cost as you go. A 200-image test at low resolution will tell you more than any estimate.
Sources
Related posts
More in Pricing
- Audio and video API dates to calendar: Oct 12, Nov 11, end of 2026
ElevenLabs v4's 72% discount ends Oct 12, Seedance 1.5 Pro retires Nov 11, Gemini 3.8 Flash TTS pricing runs to year end. A dated table and a countdown script.
- Budget a 100-track music library: $0.08, $0.125 or $0.15 a minute
Lyria 3.5 lists $0.08 per song, Sume charges a fixed $0.125 per accepted music job, ElevenLabs music is $0.15 a minute. Library cost at 100 and 1,000 tracks.
- Convert audio API prices to dollars per finished minute (Python)
Per 1K characters, per million tokens, per song, per minute: a small Python converter that puts TTS and music prices on one scale with explicit assumptions.
- ElevenLabs API cost for a 1-minute video: v4, Turbo, music, SFX
ElevenLabs lists v4 at $0.022 per 1K characters, v4 Turbo at $0.011, music at $0.15 per minute and SFX at $0.12 per minute. A worked one-minute video.
Written by Sume