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
- Tokens in a 1280x720 GPT Image 2.5 image: 106 to 3,787
A 1280x720 GPT Image 2.5 output is 106 tokens at low and 3,787 at max. Token count, dollars at $30 per 1M, and images per million tokens.
- 1792x1008 on GPT Image 2.5: the exact 16:9 size between 720p and 1440p
1792x1008 is a legal exact 16:9 size for GPT Image 2.5. About $0.0052 at low to $0.1850 at max on Sume, with the full quality table.
- GPT Image 2.5: image_size wins over aspect_ratio, plus the pixel rules
Send aspect_ratio 1:1 and image_size 1280x720 to GPT Image 2.5 on Sume and the pixels win. The multiples-of-16, 3:1 and pixel-count rules, with a validator.
- 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.
Written by Sume