Same prompt on five Sume image models in one script: about 18 cents

One loop sends a text-in-image prompt to Flux 2 Pro, Seedream 5.0 Lite, Qwen Image, Imagen 4 Fast and Recraft V4. Expected total $0.18125. Code you can run.

5 min readSume
All posts

To compare image models on one prompt, loop over their ids with the same body and add up usage.cost. On Sume, Flux 2 Pro, Seedream 5.0 Lite, Qwen Image, Imagen 4 Fast and Recraft V4 bill $0.0375, $0.04375, $0.025, $0.025 and $0.05, so one image from each costs $0.18125. All five list the 16:9 ratio, so one request body works for every row.

The prices are the billed endpoint figures on origin/main, read 2026-10-08. The sample prints each hosted URL so you can open the five pictures side by side.

What the five share

The request has model, prompt and aspect_ratio, which every row lists. It omits n, which defaults to one image, and it omits quality, resolution and output_format, because several of these rows do not list them and Sume returns 400 unsupported_parameter for a parameter the model does not list.

Five-row comparison run on Sume (read 2026-10-08)
Model idBilled per imageNotes
black-forest-labs/flux.2-pro$0.0375png, jpeg, webp; edits with references
bytedance-seed/seedream-5-lite$0.04375png, jpeg, webp; edits with references
qwen/qwen-image$0.025png, jpeg, webp; edits with references
google/imagen-4-fast$0.025Text only
recraft/recraft-v4$0.05Text only; webp output

The script

It needs SUME_API_KEY and requests. The timeout is longer than Sume's 30-second sync wait, so a slow row comes back as 202, which the script reports and skips; fetch it later with the job's result_url, as the jobs page describes.

import os, requests

models = [
    "black-forest-labs/flux.2-pro",
    "bytedance-seed/seedream-5-lite",
    "qwen/qwen-image",
    "google/imagen-4-fast",
    "recraft/recraft-v4",
]
prompt = "A matte black coffee tin on a pale oak table, the label reads FIRST LIGHT"
headers = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
total = 0.0
for model in models:
    body = {"model": model, "prompt": prompt, "aspect_ratio": "16:9"}
    r = requests.post("https://api.sume.com/v1/images", json=body,
                      headers=headers, timeout=60)
    if r.status_code == 202:
        print(model, "still running as a job")
        continue
    r.raise_for_status()
    out = r.json()
    total += out["usage"]["cost"]
    print(model, out["data"][0]["url"])
print(f"total ${total:.5f}")

Judging the output

Choose the prompt for your real use. The sample uses short label text because that is the part models most often get wrong. Score each of the five on the same checklist before you look at price: text spelled right, product shape right, no extra objects. Run each prompt a few times, since a single sample can mislead, and the cost of ten rounds across all five is $1.8125.

Store each run as a row with the model id, prompt, URL and cost, so a later run on a new catalog entry can be compared against the old ones. Hosted URLs are what the API returns, so save the files you want to keep to your own storage rather than relying on a link staying around.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume