
A customer says the picture is not the one they asked for, or says the model invented a different scene. Do not treat the file as the image that prompt returned, and do not ask the model which picture it made, until you can name the model, the size, and the created time, show a different request whose model or size is not this one, and show that another customer's log does not hold the file. If the response stored no image, write that. If any of the three needs the person who wired the call, you have not named the image. You have a file and a guess.
This is the image on one generation. It is not the prompt text alone. Which prompt did that request send? is the text that went out. A prompt can be stored while the response holds no image, and an image can be stored while the prompt on the screen is a later edit. It is not the container. Which container did that code use? is a container id and a memory limit. A sandbox is not a picture. It is not the file a message attached. Which file did that message attach? is a file id on a message. An attachment can be a picture the customer uploaded, which is not the picture the model returned. It is not the meter an event named, and it is not the key a repository trusted. Those are different objects, and they are not this created time.
None of what follows is a judgment of whether the picture is good, and none of it is legal advice. The fields below are one vendor's current description of an image generation, and two examples on that page do not print the same object. The scores below that are a 2022 paper about other models on other captions. A size on an example is not a census of your customers. A paper that scored FID cannot name the image on the request you opened tonight. They do tell you which numbers people mix up when they try to sound precise about a picture they have not opened.
OpenAI's create-image page prints two generation examples that do not match each other. The request that fills every field sends model gpt-image-2.5-flare. 19 characters. prompt is A cute baby sea otter. 21 characters. The prompt maximum on the same page is 32000 characters. 21 is not 32000. background is transparent. moderation is low. n is 1. The minimum is 1 and the maximum is 10. 1 is not 10. output_compression is 100. The range is 0 to 100, and the default is 100, so the example sits on both the default and the maximum. output_format is png. 3 characters. partial_images is 1. The range is 0 to 3. 1 is not 3, and 1 is not 0. quality is medium. safety_identifier is user-1234. 9 characters. The maximum is 128. 9 is not 128. size is 1024x1024. 9 characters. style is vivid. user is user-1234, the same 9 characters as the safety identifier. The page says style is a legacy parameter, unsupported for GPT image models, and that you should describe style in the prompt instead. The example sends style vivid on gpt-image-2.5-flare anyway. vivid is 5 characters. natural is 7. 5 is not 7, and a field the same page calls unsupported is still in the request. The schema's 200 example then prints quality low, not medium. low is not medium. It prints created 0, b64_json as the literal b64_json, 8 characters, revised_prompt as the literal revised_prompt, 14 characters, and url https://example.com. 19 characters. The page says revised_prompt is not returned by GPT image models, and that url is unsupported for them. The schema example includes both (OpenAI, Create image).
The second generation example on the same page is a smaller request and a different response. model is again gpt-image-2.5-flare. prompt is again A cute baby sea otter. 21 characters. n is 1. size is 1024x1024. It does not send style, background, or quality. created in the response is 1713833628. 1713833628 is not 0. 1713833628 divided by 86400 is 19836 days and a remainder of 3228 seconds. 3228 divided by 60 is 53 minutes and 48 seconds. 19,836 days, 0 hours, 53 minutes, and 48 seconds separate the two created values printed on this page. The response data holds one object whose b64_json is an ellipsis. 3 characters. 3 is not 8, and three dots are not an image. usage total_tokens is 100. input_tokens is 50. output_tokens is 50. 50 plus 50 is 100. That addition matches. text_tokens is 10. image_tokens is 40. 10 plus 40 is 50. That addition matches the input, and there is no output_tokens_details block in this example. The schema example's usage is all zeros. 0 plus 0 is 0. 100 is not 0. The streaming example repeats the same 100, 50, 50, 10, and 40, and its partial event uses partial_image_index 0. 0 is the index of the first partial, not a count of zero images. The request's partial_images of 1 is not the index 0, and neither is the maximum 3.
The model list on the page is longer than the request, and one name is both shut down and still enumerated. The parameter text says supported models include gpt-image-1-mini, gpt-image-1.5, gpt-image-2, gpt-image-2-2026-04-21, gpt-image-2.5-sunburst, gpt-image-2.5-sunburst-2026-09-08, gpt-image-2.5-flare, gpt-image-2.5-flare-2026-09-08, and chatgpt-image-latest. That is nine names. The enum then adds gpt-image-1, dall-e-2, and dall-e-3. 9 plus 3 is 12. The line that says or 9 more, after three names, is also 12. Those two counts match. gpt-image-1 is 11 characters. The page says it was shut down on 23 October 2026, and the enum still lists it. dall-e-2 is 8 characters. dall-e-3 is 8. 8 is not 19, and neither dall-e name is the model in the example. gpt-image-2.5-sunburst is 22 characters. The edits section says that name is the default model. The generations parameter says to specify a model explicitly and does not print that default. A default on the edit endpoint is not a default on the create endpoint. gpt-image-2.5-sunburst-2026-09-08 is 33 characters. gpt-image-2.5-flare-2026-09-08 is 30. 33 is not 30, and 30 is not 19.
The size rules are a second set of numbers, and they are not the FID in a paper. 1024 times 1024 is 1048576 pixels. The page's example of an arbitrary size is 1536x864. 8 characters. 1536 times 864 is 1327104. 1327104 is not 1048576. 1536 divided by 16 is 96. 864 divided by 16 is 54. Both divide. 1536 divided by 864 is 1.777, which is 16 to 9, inside the stated aspect range of 1 to 3 through 3 to 1. The maximum supported resolution is 3840x2160. 3840 times 2160 is 8294400. Resolutions above 2560x1440 are called experimental. 2560 times 1440 is 3686400. 8294400 divided by 3686400 is 2.25. The page does not print 2.25. 8294400 divided by 1048576 is 7.910, which is not an integer. The size enum also names 256x256, 512x512, 1792x1024, and 1024x1792, beside auto, 1024x1024, 1536x1024, and 1024x1536. That is eight strings. The line that says or 5 more, after three names, is also eight. Those two counts match. 1792 divided by 16 is 112. 256 times 256 is 65536. 1048576 divided by 65536 is 16. The page does not print 16. Quality names in the generations parameter are low, medium, high, xhigh, max, auto, standard, and hd. Eight names. The example sends medium and the schema example returns low. Output formats are png, jpeg, and webp. Three names. The example uses png. Background names are transparent, opaque, and auto. The example sends transparent, not the default auto. auto is 4 characters. transparent is 11. 4 is not 11.
The edit section on the same page is a different contract with numbers the generation example does not use. The edit prompt maximum is also 32000, and the minimum is 1. The watercolor prompt is Add a watercolor effect to this image. 37 characters. 37 is not 21, and 37 is not 32000. Input images are 1 to 16. The gift-basket curl sends four files. 4 is not 16, and 4 is not 1. image_url maxLength is 20971520. 20 times 1048576 is 20971520. The variations section, which the page says is retired, says the image must be a PNG under 4 MB. 4 is not 20. A retired endpoint's 4 is not the edit parameter's 20971520, and neither of them is the 100 tokens on the generation example. The edit response schema again prints created 0 and quality low, while the edit request example sends quality high and model gpt-image-1.5. 13 characters. high is not low, and gpt-image-1.5 is not gpt-image-2.5-flare.
The study people reach for when they want a quality number is a different test, on a different size. Aditya Ramesh, Prafulla Dhariwal, Alex Nichol, Casey Chu, and Mark Chen compare a text-embedding decoder, a full unCLIP stack, and a zero-shot decoder. They print FIDs of 9.16, 7.99, and 16.55. 16.55 minus 9.16 is 7.39. 9.16 minus 7.99 is 1.17. The page does not print 7.39 or 1.17. Humans preferred the full stack 57.0% of the time for photorealism and 53.1% for caption similarity, each with a band of 3.1 percentage points. 57.0 minus 53.1 is 3.9. 3.9 is not 3.1. Table 2 is FID on MS-COCO at 256 by 256. The diffusion prior row prints 10.39 and 10.87. The sentence calls 10.39 the best zero-shot FID. 10.87 minus 10.39 is 0.48. The page does not print 0.48. 10.39 is not 7.99, and neither of them is on the API page. GLIDE's row prints 12.24 and 12.89. 12.89 minus 12.24 is 0.65. The autoregressive prior prints 10.63 and 11.08. 11.08 minus 10.63 is 0.45. 0.65 is not 0.48, and 0.45 is not 0.48. DALL-E's cell is about 28. 28 minus 10.39 is 17.61. The page does not print 17.61. The decoder in the paper is the 3.5 billion parameter model, sampled with 250 steps, at guidance 1.25. 256 is not 1024. 65536 pixels is not 1048576 pixels. The factor of 16 is the pixel ratio, and the paper does not print it. One product on the paper does match: 512 captions times 4 images is 2048, which is the batch they print (Ramesh, Dhariwal, Nichol, Chu, and Chen, Hierarchical Text-Conditional Image Generation with CLIP Latents).
Do the three proofs on one real response, in the log that actually holds it. First, the binding. Copy the model, the size, and created. If the body is base64, write that the log holds bytes, and write the model next to them. Do not infer gpt-image-2.5-flare because a sample prints it, and do not infer a url because the schema example contains one. If the only artifact you have is a file in a chat window, write the file and write that created was not stored. A 0 on a schema example is not your customer's image. Second, the other request. A different request, with a different model or a different size, is not this one. A table of FID scores is not that second request. If you cannot show a request that is not this one, you have a gallery, not a record. Third, the other customer. A log that belongs to someone else does not contain this created time. If the only store mixes every customer's pictures, write that. A tenant you cannot name is the finding. It is not a reason to tell the customer the model drew 1024 by 1024.
Three moves feel like the proof and are a second problem. Asking the model which image it returned, because the picture looks specific. The model will describe a scene. It will not read the created time you failed to store. Quoting 10.39 or 57.0% because one of them looks precise, while the request you were asked about is one call, and the captions that produced those figures had not opened your log. Regenerating because the first picture was embarrassing, before you have copied the model and the size. A new call is a new created time. It does not tell you what the previous response held. A prompt you have not kept, while the customer is arguing about the words, is which prompt did that request send?. Opening that screen does not name the image.
The path is ordinary when one customer's generation is stored without opening the next customer's generation as the method. FeedDrop generates a video or a meme from a prompt, on a feed where the next post is a different prompt. The shape that matters here is one prompt and one returned asset, distinct from the next. That case is not an image-generation ledger. Nothing in that sentence is a headcount, a duration, or a result figure. If the only control on the screen shows the picture and will not name the model, you do not have this proof. You have a gallery.
There is a version of this afternoon where a rescue is the wrong purchase. Nothing is in production. No model is being called. The request was not logged. A customer has already seen another customer's image. The wrong value was already a write. Or no metric was ever named. 10.39 is not your call, and created 0 is not your call. A score does not close a leak, and a lawyer is the right hire when the question is whether a picture was allowed.
When the picture is already in front of a customer and the log cannot name the image, the missing object is specific. The model, the size, and the created time on that request, a different request that is not that one, and a stored response rather than a recollection. An AI pilot failed to reach production engagement is for the system that is already in front of customers and cannot yet show those three: audit in the first one to two weeks, finished in 8 to 12 weeks, scoped after the audit, unpaid if the agreed metric does not move, rollout behind a human-review gate. The image you failed to store tonight is the kind of case the harness has to include, or the next release will return a picture and still be unable to say which model drew it. The harness is AI evaluation and observability. The call itself is a generative AI development services surface only after the response has a model and a time. An AI integration sprint is the shape where the acceptance sentence can require the model, the size, and created on every stored call. If you do not yet know whether the pilot can be saved, a two-week AI readiness assessment hands you the findings either way. The free production-readiness diagnostic is the short way to see whether you are looking at a missing created time, a file with no model, or a system that has not reached a customer. Those are the terms. They are not 10.39, and they are not 100 tokens of someone else's example.
The meter an event named, and the key a repository trusted, are different objects: which meter did that event name? and which key did that repository trust?. Do not record either on this page. An event name is not a model. A key id is not a size.
Before you tell them which image the prompt returned, do the three proofs and write the model. Name the model, the size, and the created time, or write that the response did not store them. Show a different request that is not that image. Show that the response is in a log you hold. Do not ask the model which picture it was, and do not treat a fluent description as a reason to skip storing created. A paper can tell you how other models scored on other captions, including the 10.39 that is not the 7.99 earlier on the same paper. The binding is the image you can defend.
Questions
You stop treating the file as the image the prompt returned, and you stop asking the model which picture it made, until you can name the model, the size, and the created time, show a different request whose model or size is not this one, and show that another customer's log does not hold it. If the response stored no image, write that.
No. A score on other captions is not the model on this request. An image you can defend is the model, the size, and the created time, or a written line that the response stored no image. 10.39 on one table is not 1024x1024, and 0 on a schema example is not a created time you stored.
When nothing is in production, when no model is being called, when the request was not logged, when a customer has already seen another customer's image, when the wrong value was already a write, or when no metric was ever named.
Related: AI pilot failed to reach production
Find this useful? Tell Google to show you more of it.
