YouTube Shorts series after Sora: render 9:16 episodes by API
YouTube Shorts series rolled out from 2026-09-23. Render a season of vertical episodes on Sume, one job and one idempotency key per episode, with the cost.

To render a Shorts series by API, make one video job per episode, give each its own Idempotency-Key built from season and episode numbers, and request aspect_ratio: "9:16". YouTube's Shorts series feature, with seasons, episodes, custom thumbnails and sequential playback, began rolling out from 2026-09-23 on web, mobile and TV (Orthotropy platform updates, read 2026-10-06). On Sume, an 8-episode season of 5-second Omni 720p clips costs $5.04.
A pipeline that called the OpenAI Sora API, which ended on 2026-09-24 (Magic Hour tracker, read 2026-10-06), needs this replacement before the next episode is due.
What a season costs
Omni 1.1 at 720p lists at $0.10 per second; Sume bills list times 1.25 rounded up to the cent per job, so a 5-second episode is $0.63 and a 10-second one is $1.25 (Video Router doc, read 2026-10-06).
| Season size | 5 s episodes | 8 s episodes | 10 s episodes |
|---|---|---|---|
| 4 episodes | $2.52 | $4.00 | $5.00 |
| 8 episodes | $5.04 | $8.00 | $10.00 |
| 12 episodes | $7.56 | $12.00 | $15.00 |
The submit loop
The key is built from the season and episode, so rerunning the script after a crash returns the original jobs rather than new paid ones. Change the key only when you change the prompt on purpose.
import os
import requests
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
SEASON = 1
EPISODES = {
1: "A courier cycles through rain, neon reflections, handheld",
2: "The courier shelters under an awning and checks a parcel",
3: "The parcel hums; the courier opens it, warm light spills out",
}
for ep, prompt in EPISODES.items():
r = requests.post(
"https://api.sume.com/v1/videos",
headers={**H, "Idempotency-Key": f"series-s{SEASON}-e{ep:02d}"},
json={"model": "gemini-omni-flash-1.1", "prompt": prompt,
"aspect_ratio": "9:16", "resolution": "720p", "duration": 5},
timeout=30,
)
r.raise_for_status()
print(ep, r.json()["id"])Continuity between episodes
A series needs the same look across episodes. Seed is not accepted on any v1 model, so you cannot lock a look that way. Two things the docs do support: pass a still from the end of the previous episode as first_frame in frame_images, and reuse the same reference image in input_references on a model that accepts it. Both are inputs you control, unlike a seed.
Plan episode length around the model's range: Omni takes 3-10 seconds, so a 15-second episode needs a different model such as Seedance 2.0 (4-15 s) or a pair of clips on a timeline.
Checks before you publish
- Read the first frame of each finished clip. A series that opens on a different frame than the thumbnail promises loses viewers early.
- Keep your episode number outside the model; burn it in with captions, not with a prompt.
- Re-read YouTube's series rules before launch, since a rollout can change them.
The idempotency-per-episode post covers the key scheme in detail, and the model choice guide covers what to pin.
Scheduling a season
A series gets its value from a steady release, so decouple rendering from publishing. Render the whole season ahead into your own storage, check each file, and let the publishing step pick up an episode on its day. A render that fails on release day is a much worse problem than one that fails a week early.
Because each episode has its own key, you can render in waves and resume after any failure. If an episode needs a new take, give the key a version suffix, such as a trailing -v2, so the new prompt is a new job and the old one stays in your records.
Keep the prompt for each episode in version control next to its key. When a viewer says episode four looks different from the rest, you can see exactly what was sent, which model produced it and what it cost, and re-render only that episode with a new version suffix instead of the season.
- Render a season in waves of a few episodes, and inspect each wave before the next.
- Store episode number, key, job id, file path and approval status in one table.
- Copy finished files to your own storage right away, and do not rely on result URLs for later.
- Check YouTube's current series requirements before you upload, since the feature is rolling out.
Sources
Related posts
More in Use cases
- Swap a character into an existing image with an Ideogram 4.5 edit
Put your mascot or character into a finished layout with Ideogram 4.5 on Sume: the layout image goes first, the character image second, one change per call.
- Narrate 10 slides: one Sume TTS job or ten, and what rounding costs
Ten 80-character slide lines cost 10 cents as ten Sume jobs and 4 cents as one 800-character job. When splitting is worth the extra cents, and when it is not.
- Make a Top 5 vertical video from five stills with Sume Timeline
Five images, a 30-second silent Timeline at 1080x1920, then burned captions: the slot math, the still-motion limit and the cost in Sume.
- Tote bag mockup with an AI image API: your logo on a canvas bag
Send your logo as a reference to GPT Image 2.5 on Sume and ask for a canvas tote on a plain studio set. Check the logo against the original before you list it.
Written by Sume