GPT Image 2.5 seed: can you get the same image twice?
Sume lists seed in the schema but does not serve it: seed returns 400 unsupported_parameter. How to keep a look repeatable with references and masked edits.

You cannot pin a seed for GPT Image 2.5 on Sume. The seed field exists in the request schema, but Sume's docs say it is not served in v1 and that no model advertises it, so a request that sets it comes back as 400 unsupported_parameter. To get something that looks like the image you already have, reuse that image: pass its Sume URL back in input_references and describe what must stay.
This page covers what the 400 looks like, why resending the same prompt does not repeat a picture, and three ways to keep a look steady across a batch. Facts come from the Image API docs and the OpenAPI reference, read 2026-10-03.
What happens if I send seed anyway?
The docs list seed as "Seed for deterministic generation (not served in v1)" and put it with output_compression and explicit pixel size under catalog-gated parameters: in the schema, advertised by no model, rejected at runtime. The rejection is a 400, not a silent drop, so your script fails fast instead of producing an image you wrongly believe is reproducible.
Check the catalog before you rely on any parameter. GET /v1/images/models publishes capability descriptors per model, and the docs say a request that sets a parameter the model does not list is rejected. If seed ever appears in the descriptors for a GPT Image 2.5 row, that is the signal to try it.
curl -sS https://api.sume.com/v1/images/models \
-H "Authorization: Bearer $SUME_API_KEY" \
| python3 -c "import json,sys; d=json.load(sys.stdin)['data']; m=[x for x in d if x['id']=='openai/gpt-image-2.5'][0]; print('seed' in m['supported_parameters'])"Why does the same prompt give a different picture?
A text prompt describes a set of acceptable images, not one image. Without a way to fix the random starting point, each call is a fresh draw from that set. Sume does not publish anything that promises byte-identical output for identical input, so plan as if every call differs.
That is also a billing fact: every completed generation is billed in full, and a failed one is not billed. Rerolling to "get the good one again" costs a new generation each time.
How do I keep a look consistent without a seed?
Use the three controls that are served. They trade exactness for something you can actually get.
- Anchor on an output. Take the URL from
data[].urlof the image you liked and send it as aninput_referencesentry on the next call, with a prompt like "same character, same outfit, same lighting; new pose: sitting at a desk". GPT Image 2.5 takes up to 16 references. - Freeze the parts you like with a mask.
mask_urlworks on GPT Image 2.5 edits, so change one region and leave the rest to the model's edit behavior, then verify the untouched area yourself. - Reuse the exact wording. Keep a fixed "style block" (lens, light, palette, background) at the top of every prompt and vary only the subject line. It will not repeat a picture, but it narrows the set.
A comparison of the options
The table summarises what each approach gives you on Sume today.
| Approach | Served on Sume | What you get |
|---|---|---|
seed parameter | No, returns 400 | Nothing |
| Same prompt, new call | Yes | A new draw each time |
Previous output as input_references | Yes, up to 16 | Close continuation of the look |
mask_url edit | Yes, on GPT Image 2.5 | Change one region, keep the rest |
| Fixed style block in the prompt | Yes | A narrower set, not an exact repeat |
How should a batch handle this?
If you need ten variations that belong together, generate the hero first, review it, and feed its URL to the other nine. That makes the hero a visual contract and keeps your spend tied to images you intend to use. Keep the preserve list identical in every request, because edit drift grows when it changes between steps.
Do the review step with the cheapest honest check: open the hero at full size, look at hands, text and edges, and only then fan out. A defect in the hero is copied into every continuation, so fixing it once with a masked edit is cheaper than fixing nine outputs. If the hero is almost right, run one masked edit on the flawed region instead of rerolling the whole frame.
Store the Sume URL from the response, not any provider URL; the docs say Sume mirrors outputs into its own media URLs and results carry data[].url. If you need the file long-term, download it as soon as it completes and keep your own copy.
What would change this advice?
Watch the catalog, not the schema. The schema already contains seed, but the docs say no model advertises it, so the capability descriptors are the source of truth. If a GPT Image 2.5 row starts listing seed, test it on a small request and compare two outputs yourself before you build on it, because a seed that works on one provider path does not promise identical output across model versions.
Until then, treat each generation as a new draw, store the URL of every image you approve, and make consistency a property of your references and your prompt, not of a number.
Sources
Related posts
More in Developers
- GPT Image 2.5 in TypeScript: fetch that handles 200 and 202
A runnable TypeScript fetch call to Sume's POST /v1/images for GPT Image 2.5, with the 202 job fallback: poll status_url, then read result_url.
- GPT Image 2.5 on Sume: the largest legal size for 21:9, 3:2 and 4:5
Both edges a multiple of 16, max edge 3840, ratio up to 3:1, under 8.29 MP. A short script finds the biggest legal size: 3840x1648 for 21:9, and 4:1 is out.
- GraphQL mutation for a Sume video submit: return the job id
Wrap a Sume video submit in a GraphQL mutation that returns the job id at once, then expose status as a query. No resolver should wait on a clip.
- Recast 402 insufficient_credits: the balance a 30 s swap needs
A 30-second H3 Max Recast reserves $11.25 at 768p or $16.875 at 1080p on Sume; a balance below that returns 402. Reserve table and three ways to fit.
Written by Sume