A skills repo still recommends Sora 2 and gpt-image-1: swap guide
marketingskills issue 594 lists skill files that name Sora 2 and gpt-image-1. Which lines to edit and which Sume models fit video and image briefs now.

Yes: according to an issue filed on September 22, 2026, several skill files in the marketingskills repository still recommend Sora 2 for video and gpt-image-1 for images. OpenAI shut Sora 2 down on September 24, 2026 and retires gpt-image-1 on October 23, 2026. If you copied those skills into an agent, edit the model names, because a recommendation to use a removed model fails at the first call.
Where the references are
The issue lists file paths and line numbers. For Sora 2: skills/video/SKILL.md (lines 44, 134 and 143), skills/ad-creative/SKILL.md (line 167), and skills/ad-creative/references/generative-tools.md (lines 13-14, 201-212, 230, 277, 289, 478 and 583). For gpt-image-1: skills/image/SKILL.md and skills/image/references/ai-image-prompting.md.
For video, the reporter proposes routing users to Veo 3.1, Kling, Seedance and other tools that remain, especially for audio and dialogue scenes. For images, the proposal is gpt-image-2. OpenAI's own deprecations page, read on 2026-10-07, names gpt-image-2.5-sunburst and gpt-image-2.5-flare as the replacements for gpt-image-1.
The issue also reports an unrelated broken relative link in skills/ad-creative/SKILL.md at line 154, which is a small reminder that skills are documents and need the same maintenance as code. Review them on a schedule, not when something fails.
| Model named in the skill files | Status on OpenAI's page | Where it appears |
|---|---|---|
| Sora 2 | Shut down September 24, 2026 | skills/video, skills/ad-creative and its generative-tools reference |
| gpt-image-1 | Removed October 23, 2026 | skills/image and its ai-image-prompting reference |
What a marketing brief needs from video
A skill that recommends a tool is really recommending a set of capabilities: audio and dialogue, vertical output, a start frame, a short duration. The Sume catalog answers those directly. Kling 3, Wan 3.0, MiniMax H3 Max, Seedance 2.5 and Gemini Omni Flash 1.1 each list audio support, and Omni and Kling accept 9:16.
Rewrite the skill's guidance as a short table of needs and models, then add the instruction to read GET /v1/videos/models, so that the skill does not go stale again when a model changes.
| Model id | Seconds | Resolutions | Audio |
|---|---|---|---|
| gemini-omni-flash-1.1 | 3 to 10 | 360p, 720p, 1080p, 4K | yes |
| kling-3 | 4 to 15 | 720p, 1080p | yes |
| wan-3.0 | 2 to 30 | 480p, 720p, 1080p | yes |
| minimax-h3-max | 5 to 15 | 480p, 768p, 1080p | yes |
| seedance-2.5 | 4 to 30 | 480p, 720p, 1080p | yes |
What a marketing brief needs from images
For still images, replace gpt-image-1 with openai/gpt-image-2.5, which takes up to 16 reference images, a mask_url, and quality up to max. Name the quality in the skill: the default is high when omitted, and high costs about four times medium, by the estimate of about $0.0659 against $0.0165 for a 1024x1024 text-only image before cent rounding.
If a skill describes a campaign with many variants, note the quantity next to the model: the 4-image ceiling per call on GPT Image 2.5 means a set of eight takes two requests, and a call with n set to 5 returns a 400 error.
A safe way to edit the skills
Replace names in one commit, then run one example from each skill. For the video skill, the script below checks the full submit-and-poll path with a short clip.
Treat model names as data: keep them in one reference file that the skills read, so the next retirement is a one-file change.
Then add a test: ask the agent to produce one image and one clip from the skill, and fail the check if either call returns a model error.
import json, os, time, urllib.request
key = os.environ.get("SUME_API_KEY")
if not key:
raise SystemExit("SUME_API_KEY is not set")
H = {"Authorization": f"Bearer {key}", "Content-Type": "application/json"}
def call(url, body=None):
data = json.dumps(body).encode() if body else None
with urllib.request.urlopen(urllib.request.Request(url, data=data, headers=H)) as r:
return json.load(r)
job = call("https://api.sume.com/v1/videos", {
"model": "gemini-omni-flash-1.1",
"prompt": "A slow dolly shot along a rainy neon street at night",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
})
for _ in range(60):
st = call(job["polling_url"])
if st["status"] in ("completed", "failed", "cancelled"):
break
time.sleep(15)
print(st["status"])
if st["status"] == "completed":
req = urllib.request.Request(st["unsigned_urls"][0], headers=H)
with urllib.request.urlopen(req) as r, open("clip.mp4", "wb") as f:
f.write(r.read())Sources
Related posts
More in Use cases
- Meta Conversion Lift needs 2-3 weeks: freeze holiday hooks by Nov 6
Meta says holiday Conversion Lift studies reach significance in 2-3 weeks. Count back from Nov 27 and lock your hook variants by Nov 6 on Sume.
- Meta Feed video ad spec checklist before uploading an AI clip
Meta's Facebook Feed video spec: 4:5, 1440 x 1800, up to 4 GB, MP4 or MOV, H.264 with AAC audio. A checklist, and the Sume Timeline output size that meets it.
- Meta feed video ads start at 1 second; so does Sume Timeline
Both Meta feed video pages list a 1-second minimum. Sume Timeline accepts 1 second of output and bills one rounded-up minute, $0.10, though models start at 4 s.
- Meta Feed allows 1-second video ads: shortest Sume clip is 2 s
Meta's Feed spec allows video from 1 second. The shortest clip any Sume video model generates is 2 seconds (Wan 3.0). What to do for a 1-second cut test.
Written by Sume