A calendar file for AI model shutdown dates: .ics from Python

Generate an .ics file with all-day events and 14-day reminders for the gpt-image-1 and gpt-image-1.5 shutdown dates, then import it into any calendar app.

5 min readSume
All posts

Put the shutdown dates in a calendar your team already opens. A 20-line Python script can write an .ics file with one all-day event per vendor date and a reminder 14 days ahead. As of 2026-10-06, OpenAI lists gpt-image-1 for October 23, 2026, and gpt-image-1-mini, gpt-image-1.5 and chatgpt-image-latest for December 1, 2026. Google's page shows gemini-2.5-flash-image shut down on October 2, 2026, and OpenAI's page shows the Sora Videos API ended September 24, 2026.

Past dates are in the table so the file is a record, not only a reminder.

Dates to put in the file

Vendor shutdown dates, read 2026-10-06
ModelDateSource page
Sora 2 and the Videos API2026-09-24OpenAI deprecations
gemini-2.5-flash-image2026-10-02Gemini API deprecations
gpt-image-12026-10-23OpenAI deprecations
gpt-image-1-mini, gpt-image-1.5, chatgpt-image-latest2026-12-01OpenAI deprecations

The generator

The script writes the three upcoming-or-recent events. All-day events use VALUE=DATE, and the DTEND is the next day. The TRIGGER:-P14D alarm fires two weeks before.

from datetime import date, timedelta

EVENTS = [
    ("gpt-image-1 shuts down", date(2026, 10, 23)),
    ("gpt-image-1-mini, gpt-image-1.5, chatgpt-image-latest shut down", date(2026, 12, 1)),
]

def build(events):
    out = ["BEGIN:VCALENDAR", "VERSION:2.0", "PRODID:-//model-shutdowns//EN"]
    for i, (name, day) in enumerate(events):
        out += ["BEGIN:VEVENT", f"UID:shutdown-{i}@example.invalid",
                "DTSTAMP:20261006T000000Z",
                f"DTSTART;VALUE=DATE:{day:%Y%m%d}",
                f"DTEND;VALUE=DATE:{day + timedelta(days=1):%Y%m%d}",
                f"SUMMARY:{name}", "BEGIN:VALARM", "ACTION:DISPLAY",
                "DESCRIPTION:Point code at a Sume image model id",
                "TRIGGER:-P14D", "END:VALARM", "END:VEVENT"]
    out.append("END:VCALENDAR")
    return "\r\n".join(out) + "\r\n"

if __name__ == "__main__":
    with open("shutdowns.ics", "w", newline="") as f:
        f.write(build(EVENTS))

What the reminder should say

Make the event description a task, not a date: which repo holds the id, and which Sume id replaces it. For the image side that is openai/gpt-image-2.5-sunburst or openai/gpt-image-2.5, per the full cutover calendar. Re-read the vendor pages when you refresh the file, because dates can move.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume