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.

5 min readSume
All posts

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).

Omni 1.1 720p season cost, read 2026-10-06
Season size5 s episodes8 s episodes10 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

All Use cases posts

Written by Sume