Upscale before or after an image edit? Order and cost on Sume
Edit at working size, then upscale once. Sume's image upscale reserves 20 cents per image, so upscaling between every pass multiplies the bill.

Resolution is part of this season's image pitch. FLUX 3 Image is described as rendering at native 2K and 4K (Black Forest Labs, read 2026-10-04), and Ideogram 4.0 supports 256 to 2048 pixels per side (Ideogram, read 2026-10-04). On Sume you can also upscale a finished image with a separate call. The question is where it goes in an edit pipeline.
The rule: upscale last
Each edit pass may re-render the picture, so any detail added by an upscale can be changed or lost on the next pass. Edit at the size where the model works well, approve the result, then upscale once. The Sume image upscale takes a public HTTPS image_url and an upscale_factor from 1 to 4, at POST /v1/image-upscale-1.0/upscale.
| Plan | Edits at Nano Banana 2 1K (about $0.10 each) | Upscales at $0.20 reserved each | Total |
|---|---|---|---|
| Edit three times, upscale once | $0.30 | $0.20 | about $0.50 |
| Upscale after every edit | $0.30 | $0.60 | about $0.90 |
| Upscale first, then edit three times | $0.30 | $0.20 | about $0.50, and edits re-render the detail |
Where this does not apply
The $0.20 figure is the reserved amount in the Sume catalog (about 16 output megapixels), not a promise of the final charge.
- If the model can render the final size directly, as Nano Banana 2 can at 2K and 4K tiers in the Sume catalog, compare the tier price with edit plus upscale.
- If the image is destined for print, check the pixel count you need before you choose.
- Upscale reservations are held at the full figure and captured on completion, so read the final charge.
Upscale the approved image
Use the job's status and result URLs if the response is a job envelope instead of a finished image.
import os
import requests
r = requests.post(
"https://api.sume.com/v1/image-upscale-1.0/upscale",
headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
json={"image_url": "https://example.com/approved-edit.png", "upscale_factor": 2, "output_format": "png"},
timeout=60,
)
print(r.status_code, r.text[:300])
Sources
Related posts
More in Media tools
- Video analyses: include_transcript false leaves scene audio null
On the legacy Sume video-analyses resource, scene audio is null unless include_transcript was true. Handle both shapes, and know what replaces it for new work.
- Video analyses keyframes: one still per second per scene
A legacy Sume video analysis gives a still for each whole second of a scene plus a keyframe_url near 40%. How stills fail and how to pick your own cover.
- Video filter /check: submit or fix and recheck
POST /v1/video-filter/check is unbilled and returns valid, diagnostics and a next_action of submit_video_filter or fix_program_and_recheck. Branch on it.
- Video inspect fast seek: requested_times vs sample_times
A fast-seek inspect grid returns requested_times and sample_times. Use sample_times for what the tiles show, then trim from them, never from the request.
Written by Sume