Retired AI model id to Sume id: GPT Image, Gemini and Sora lookup
One lookup table that maps retired gpt-image-1, gemini-2.5-flash-image and sora-2 ids to Sume ids, with dates, so a failing call tells you what to switch to.

Keep a single lookup from retired vendor ids to Sume ids, with the shutdown date next to each. As of 2026-10-06: OpenAI ends gpt-image-1 on 2026-10-23 and gpt-image-1-mini, gpt-image-1.5 and chatgpt-image-latest on 2026-12-01. Google ended gemini-2.5-flash-image on 2026-10-02. OpenAI ended Sora 2 and the Videos API on 2026-09-24.
Only the OpenAI image rows have a vendor-named replacement that exists on Sume. The Gemini and Sora rows are choices, so they are marked as such.
The lookup table
| Retired id | Date | Vendor-named replacement | Sume id to try |
|---|---|---|---|
| gpt-image-1 | 2026-10-23 | gpt-image-2.5-sunburst or -flare | openai/gpt-image-2.5-sunburst |
| gpt-image-1-mini | 2026-12-01 | gpt-image-2.5-sunburst or -flare | openai/gpt-image-2.5-sunburst |
| gpt-image-1.5 | 2026-12-01 | gpt-image-2.5-sunburst or -flare | openai/gpt-image-2.5-sunburst |
| gemini-2.5-flash-image | 2026-10-02 | gemini-3.1-flash-image-preview | google/nano-banana-2 (a choice, test it) |
| sora-2, sora-2-pro | 2026-09-24 | none listed | seedance-2.5 or kling-3 (a choice, test it) |
The lookup in code
explain returns a message, so it can sit in an exception handler or a startup check.
RETIRED = {
"gpt-image-1": ("2026-10-23", "openai/gpt-image-2.5-sunburst"),
"gpt-image-1-mini": ("2026-12-01", "openai/gpt-image-2.5-sunburst"),
"gpt-image-1.5": ("2026-12-01", "openai/gpt-image-2.5-sunburst"),
"chatgpt-image-latest": ("2026-12-01", "openai/gpt-image-2.5-sunburst"),
"gemini-2.5-flash-image": ("2026-10-02", "google/nano-banana-2"),
"sora-2": ("2026-09-24", "seedance-2.5"),
"sora-2-pro": ("2026-09-24", "seedance-2.5"),
}
def explain(model_id):
hit = RETIRED.get(model_id)
if not hit:
return f"{model_id}: not in the retired list"
date, sume_id = hit
return f"{model_id} retired {date}; try {sume_id} on Sume"
if __name__ == "__main__":
for m in ("gpt-image-1", "sora-2", "nano-banana-2"):
print(explain(m))Pin, then re-read the vendor pages
The video row names seedance-2.5 and kling-3 only as starting points; the video ids and limits are in the Sora port guide. For image ids the longer notes are in the gpt-image-1 shutdown post and the Gemini post. Dates can move, so refresh the table when you re-read the vendor pages.
Sources
Related posts
More in Models
- seedream-v4 or bytedance-seed/seedream-4: which Sume id to store
Sume accepts legacy bare ids like seedream-v4 and seedream-4-5-edit, but the catalog lists org/slug ids. Store the canonical id; Python normalizer inside.
- Sora API ended Sept 24: replacements for 15-second clips on Sume
If your Sora code made 15-second clips, Sume has Kling 3, MiniMax H3 and Seedance 2.5 or Wan 3.0 at that length, with prices per clip and one request shape.
- New AI video models in 2026: which ones have a Sume model id
Seedance 2.5, MiniMax H3, Kling 3.0, Wan 3.0, LTX-2.5, Veo 3.1: a table of what a video tracker lists against the ids in Sume's Video Router catalog.
- Kling 3 as your Sora replacement on Sume: four limits to check
Kling VIDEO 3.0 is 15 s with native audio per a video tracker. On Sume kling-3 takes 4-15 s at 720p or 1080p and no reference URLs. Four checks before a port.
Written by Sume