Short teaching post from opening up our own image pipeline this week. The question is simple: how big is the image the model just returned? We found the same dimensions field being produced three different ways, depending on which provider served the request. 1. The primary path resizes the bytes to the requested size before returning. The number is true because the file was made to match it. This is the only one of the three that is evidence. 2. The OpenAI fallback reads back the size string it put in the request. That model accepts a fixed set of sizes, so a request gets snapped to the nearest one, and nothing is resized afterwards. Usually right. Never verified. 3. The Gemini fallback never sends a size at all. It returns the dimensions that were requested, unchanged. That is not a measurement, it is an echo of your own input. All three return the same object shape, through the same function, into the same preview panel. From the outside they are indistinguishable. Why this bites a seller rather than just an engineer: Amazon enables zoom on a product image at 1,600 pixels on the longest side. Ask for a 3,000px master, have the request quietly fall back to a model that returns 1,024px, and your tool reports 3,000px. It uploads without complaint. The listing simply has no zoom, and there is no error message anywhere in the chain to go looking for. The blueprint, which costs nothing and takes an afternoon: 1. After every generation, read the width and height out of the returned bytes. Any image library does this from the file header in one line. Do not read them out of the response body. 2. Return the provider that actually served the image alongside the result, and show it in your UI. A silent fallback is the whole failure mode; make it loud. 3. Where the model was never told a size, treat the returned dimensions as missing rather than as confirmed. A default is a guess wearing a number. 4. Assert the minimum your channel needs before upload, not after. For Amazon that is 1,600px on the longest side for zoom.