GPT-5.6 no longer downscales images before it looks at them. Because the detail parameter still defaults to auto, vision code written for older models now sends full resolution images and pays full resolution token prices, with nobody having changed a line.
Every team running vision workloads on the OpenAI API inherited a comfortable assumption from the previous generation of models: whatever you sent, the model resized it before processing. A 12 megapixel photograph and a modest screenshot cost roughly the same, because both got squeezed into the same budget before the model ever saw them. That assumption is no longer true, and the change is not something you opt into.
OpenAI's documentation states that GPT-5.6 preserves the original dimensions of images sent with original or auto detail instead of resizing them to a patch budget or pixel dimension limit. Read that alongside the second fact and the problem becomes obvious: the documentation also states that the detail parameter defaults to auto in both the Responses API and the Chat Completions API. Most code does not set detail at all. Most code therefore now sends images at full resolution to a model that will faithfully process every pixel of them, and OpenAI's documentation notes plainly that large images consume additional input tokens and may increase latency.
This is a genuinely good change for the workloads it was built for. If you are doing optical character recognition on a dense scanned document, reading a chart with small labels, detecting a defect in a manufacturing image, or driving a computer use agent that needs accurate coordinates on a screen, downscaling was the thing standing between you and a correct answer. Preserving the original dimensions is exactly what those tasks needed, and it is why the behavior changed.
The trouble is that most vision traffic is not that. It is product photographs, user uploaded receipts, marketing images, and screenshots where the useful information survives aggressive downscaling perfectly well. That work now costs more than it did, silently, and the increase does not show up as an error or a warning. It shows up as an input token line on an invoice that nobody expected to move, and it scales with whatever resolution your users happen to upload.
The fix takes one line. The documentation states that the detail parameter supports the values low, high, original and auto, so the correct posture is to stop letting the default decide. Decide per workload, explicitly, and write the decision down next to the code so the next engineer does not undo it. Precision tasks get original. Everything else gets an explicit low or high and stops paying for pixels that were never going to change the answer.
One related default is worth checking in the same sitting, because it also changed and it also costs input tokens. OpenAI's documentation states that GPT-5.6 models default reasoning.context to all_turns while earlier models default to current_turn, which means reasoning from earlier turns is being carried forward by default in multi turn conversations. That is the right behavior when a task's goals and assumptions stay stable across turns, and the wrong one when each turn is genuinely independent. Both defaults reward the same five minutes of attention.
Try it today
- Grep your codebase for every image payload sent to the OpenAI API and list the call sites that never set a detail value. Those are the ones now running on the new default.
- Sort those call sites into two buckets: precision work where the model must read fine detail or return accurate coordinates, and everything else.
- Set detail explicitly on every call site. Precision work gets original. Everything else gets an explicit low or high, chosen and tested rather than inherited.
- Pull your input token usage for image heavy endpoints for the period before and after you moved to GPT-5.6, and check whether the per request average moved.
- While you are in the same code, decide reasoning.context explicitly too. Leave it at all_turns for stable multi turn tasks; set current_turn where each turn stands alone.