gpt-image-1 retires December 1: scan your repo, move to gpt-image-2.5
OpenAI's deprecations page lists gpt-image-1, 1.5 and 1-mini for December 1, 2026. A Python scan finds the ids, and Sume serves openai/gpt-image-2.5.

OpenAI's deprecations page lists gpt-image-1, gpt-image-1.5 and gpt-image-1-mini with a shutdown date of December 1, 2026, and points to gpt-image-2.5-sunburst or gpt-image-2.5-flare as replacements. Some roundups give an earlier date for gpt-image-1; this page uses OpenAI's own table.
Hard-coded model ids hide in config files, notebooks, CI and docs. A scan is faster than remembering.
Dates and replacements
| Retiring id | Shutdown | OpenAI replacement |
|---|---|---|
| gpt-image-1 | 2026-12-01 | gpt-image-2.5-sunburst or gpt-image-2.5-flare |
| gpt-image-1.5 | 2026-12-01 | gpt-image-2.5-sunburst or gpt-image-2.5-flare |
| gpt-image-1-mini | 2026-12-01 | gpt-image-2.5-sunburst or gpt-image-2.5-flare |
Find every use
The regex stops at a trailing word character, dot or hyphen, so gpt-image-1 does not also match gpt-image-1.5. It exits 1 when it finds anything, so you can run it in CI.
import pathlib, re, sys
SHUTDOWN = {"gpt-image-1": "2026-12-01", "gpt-image-1.5": "2026-12-01",
"gpt-image-1-mini": "2026-12-01"}
PATTERN = re.compile(r"gpt-image-1(?:\.5|-mini)?(?![\w.-])")
SKIP = {".git", "node_modules", ".venv", "dist", ".next"}
def scan(root):
for path in pathlib.Path(root).rglob("*"):
if path.is_dir() or SKIP & set(path.parts) or path.suffix in {".png", ".jpg", ".lock"}:
continue
try:
lines = path.read_text(encoding="utf-8").splitlines()
except (UnicodeDecodeError, OSError):
continue
for number, line in enumerate(lines, 1):
for hit in PATTERN.finditer(line):
yield f"{path}:{number}: {hit.group()} (shut down {SHUTDOWN[hit.group()]})"
if __name__ == "__main__":
found = list(scan(sys.argv[1] if len(sys.argv) > 1 else "."))
print("\n".join(found) or "no retiring gpt-image ids found")
sys.exit(1 if found else 0)On Sume
The Sume image docs list openai/gpt-image-2.5 (Flare) and openai/gpt-image-2.5-sunburst. They take up to 16 references, mask_url for edits, background and quality up to max. Confirm what your key can see with GET /v1/images/models, and read prices from the per-model endpoints record rather than a blog table.
Swap the id, run a one-image smoke test, then compare output before you move production traffic. The default quality on these models is high, so set it explicitly and check the price on the endpoint record before you scale up.
Sources
Related posts
More in Models
- gpt-image-2 or gpt-image-2.5 to replace gpt-image-1 on Sume?
OpenAI names gpt-image-2.5 as the gpt-image-1 replacement. On Sume, gpt-image-2 and 2.5 differ on references, mask_url, background and quality tiers.
- Ideogram 4.5 low, medium or high: a text grid to pick the tier
Run one headline through Ideogram 4.5 at low, medium and high on Sume, read the billed cost of each, and keep the cheapest tier whose text you can read.
- Ideogram 4.5 vs Nano Banana 2 for multi-turn edits: cost per turn
Ideogram 4.5 claims clean multi-turn edits. Compare it with Nano Banana 2 on Sume: price per turn, six-turn totals and a drift test you can run.
- Kling 3.0 15-second clip: $2.10 silent or $3.15 with sound on Sume
Kling 3 on Sume makes 4 to 15 second clips at 720p or 1080p, with audio priced at $0.21 a second and silence at $0.14. Limits, ratios and how to try it.
Written by Sume