Three 'auto' settings on GPT Image 2.5: aspect ratio, size and quality
auto means three different things on ChatGPT Image 2.5 through Sume: it matches an edit's shape, reserves an upper-bound size price, and reserves max quality.

On ChatGPT Image 2.5 through Sume, auto appears in three fields and does something different in each: aspect_ratio: "auto" matches the reference on edits, image_size: "auto" reserves the upper bound of output tokens, and quality: "auto" reserves max. Only the first is usually safe to leave on.
The docs also say that omitting aspect_ratio on an edit is not the same as sending auto, so send it explicitly.
What each one does
Everything in this table is stated in the Image API docs.
| Field | Value | Effect | Cost impact |
|---|---|---|---|
| aspect_ratio | auto | Edit and image-to-image output matches the reference shape | None |
| image_size | auto | Size left to the model; named presets without a verified pixel mapping behave the same way for pricing | Reserves the upper bound of output tokens |
| quality | auto | Quality left to the model | Reserves max quality |
| quality | omitted | Defaults to high | The high price |
What reserving costs you
A reserve is the amount held against your wallet while the job runs. The docs say the auto choices reserve the upper bound, and Fal's own documented automatic quality option is auto. In the repository estimator a 1024x1024 max image is $0.2635 against $0.0659 at high and $0.0165 at medium.
Completed generations are billed from the endpoint pricing, and failed or cancelled ones are not charged. Whether the final charge equals the reserve for an auto call is something to check on a small job in your own workspace and read from usage.cost; this post does not assume it.
- Set
qualitytolow,mediumorhighfor predictable spend. - Set
image_sizeto a preset or custom pixels you have priced. - Keep
aspect_ratio: "auto"on edits so the output keeps the source shape.
Auditing a batch script
Search your code for three strings: "auto" near quality, "auto" near image_size, and any request that omits quality entirely. The first reserves the maximum, the second reserves an upper bound, and the third silently takes the high default. Each can raise a batch bill without any visible change in the pictures.
The check is cheap to run once per release. Add a unit test that rejects a request body where quality is missing or equals auto, and keep aspect_ratio: "auto" on edits as the one intentional exception.
- Make quality an explicit parameter in your wrapper.
- Fail tests on
quality: autounless a comment explains why. - Read
usage.costfrom the first response of each batch.
A safe default request
For edits, pin the quality and size and let only the ratio float:
quality: "medium", image_size: "1536x864", aspect_ratio: "auto", with one input_references entry. If the result shape is wrong, set the ratio explicitly instead of widening the other two.
One practical rule covers most teams: write the quality and size into your own configuration file, with a comment that says who approved the value and when. A reviewer reading a pull request can then see a change from medium to high as a price decision, not a formatting tweak. The same file can hold the per-image estimate you computed, which turns a surprise on the invoice into a diff in version control that someone had to approve.
None of this makes auto wrong. It is a fair choice for exploration where the cost does not matter. It is a poor default for a batch you will bill to someone else.
Sources
Related posts
More in Developers
- Platform presets in Python: build a Sume video request, refuse bad
A 28-line Python preset table for TikTok 9:16, TikTok 1:1 and Shorts ads that picks the lowest Seedance tier clearing the pixel floor and refuses bad lengths.
- Timeline output.fps: why a 24 fps clip judders when you force 30
Leave output.fps unset and Timeline renders at the source rate. Force 30 on a 24 fps clip and frames repeat; the job reports output_fps_resamples_sources.
- Tornado: verify a Sume webhook in a RequestHandler
A Tornado 6.5 RequestHandler that checks the Sume webhook HMAC on self.request.body, raises HTTPError 401 on failure and handles the webhook.test event.
- Transcribe a 25-minute interview on Sume: three STT jobs, $0.26
Sume STT takes up to 10 minutes per job at $0.01 a minute. A 25-minute interview is one $0.01 timeline split plus three STT jobs, $0.26 at list.
Written by Sume