Cost per correct poster: Ideogram 4.5, GPT Image 2.5, Nano Banana 2.1

Price per call hides retries. Count images with every word right, divide the Sume usage.cost sum by that count, and compare three new models. Script included.

5 min readSume
All posts

The cheapest model per call is not the cheapest per poster you can publish. Run the same text-heavy prompt several times on each model, count the images where every word is right, and divide the summed usage.cost by that count. This post gives the method and a script for Ideogram 4.5, GPT Image 2.5 and Nano Banana 2.1 on Sume, and reports no results, because I have not run it.

The list prices you start from

These are vendor list prices from the pages I read. They are not Sume's prices, which come from each model's endpoint record. They tell you only the order of magnitude and which pricing axis each vendor uses.

Vendor list price units, three image models (read 2026-10-07)
ModelVendor price unitFigures read
Ideogram 4.5per image by quality$0.03, $0.06, $0.22; size does not change it
GPT Image 2.5per million tokens$8 input and $30 output per million
Nano Banana 2.1per image by size$0.0336 at 1K, $0.0756 at 4K

Define correct before you run

Fix the pass rule up front: every word spelled right, no extra characters, the date in the right place. Write the exact strings into the prompt. A rule you decide after seeing the images drifts toward whatever the favorite model produced.

The script

This Python script runs five samples per model and prints the total billed cost from usage.cost. You then enter how many were correct. It handles only the 200 path, so a 202 stops the run, in which case use the job result flow instead.

import os
import requests

URL = "https://api.sume.com/v1/images"
HEAD = {"Authorization": "Bearer " + os.environ["SUME_API_KEY"]}
PROMPT = "Poster, portrait. Headline OPEN MIC NIGHT, subline Every Friday 8 PM, footer 12 Harbor Street. Flat colours."
MODELS = ["ideogram/ideogram-v4.5", "openai/gpt-image-2.5", "google/nano-banana-2.1"]


def main():
    for model in MODELS:
        total = 0.0
        for i in range(5):
            body = {"model": model, "prompt": PROMPT, "aspect_ratio": "3:4"}
            r = requests.post(URL, headers=HEAD, json=body, timeout=60)
            if r.status_code != 200:
                raise SystemExit("%s status %s" % (model, r.status_code))
            data = r.json()
            total += data["usage"]["cost"]
            print(model, i, data["data"][0]["url"])
        print(model, "total cost", round(total, 4))


main()

Read the result

For each model, cost per correct poster is the total cost divided by the number of passes. If a model gets zero passes, its cost per correct poster is undefined, not zero; say so rather than dividing. Repeat with a second prompt before you decide, since five samples is a small test.

Caveats

Quality settings change both price and pass rate. Set quality explicitly for GPT Image 2.5, because omitting it defaults to high, and for Ideogram the default is medium. Sume has no seed in v1, so runs are not repeatable; the sample count is your only control.

Write the result as one line per model:

  • Samples run, passes, total usage.cost.
  • Cost per pass, or undefined if there were none.
  • The quality setting and aspect ratio used.

Sources

Related posts

More in Comparisons

All Comparisons posts

Written by Sume