YouTube Studio takes 15 Shorts per upload: batch-render vertical clips
YouTube lets you pick up to 15 Short files at once, each up to 3 minutes, square or vertical. Submit the jobs in a Python loop with idempotency keys on Sume.

YouTube's Shorts upload page says you can choose up to 15 short videos at a time from YouTube Studio, each up to 3 minutes and square or vertical. A Python loop that submits one Sume job per script, with a distinct idempotency key each, produces a batch that fits.
What YouTube's page says
From a computer: sign in to YouTube Studio, click Create, and pick short-video files that are up to 3 minutes with a square or vertical aspect ratio. You can choose up to 15 at a time, but you must click Edit draft to complete each video's details before publishing. The default privacy for creators aged 13 to 17 is private, and public for 18 and older.
The batch loop
Each job is an independent POST /v1/videos with its own prompt, aspect_ratio 9:16 and Idempotency-Key. A retry of the same key and body returns the same job, and a changed body under a reused key is a 409 conflict. The loop below submits three; extend the list to fifteen.
import json, os, urllib.request
PROMPTS = [
"A ceramic mug steams on a windowsill, rain outside",
"A cyclist crosses a bridge at sunrise",
"A chef plates ramen under warm light",
]
def submit(i, prompt):
body = json.dumps({"model": "seedance-2", "prompt": prompt,
"duration": 6, "resolution": "720p",
"aspect_ratio": "9:16"}).encode()
req = urllib.request.Request(
"https://api.sume.com/v1/videos", data=body,
headers={"Authorization": "Bearer " + os.environ["SUME_API_KEY"],
"Content-Type": "application/json",
"Idempotency-Key": f"shorts-batch-{i:02d}"})
with urllib.request.urlopen(req) as r:
return json.load(r)
for i, p in enumerate(PROMPTS):
job = submit(i, p)
print(i, job["id"], job["status"])Cost and limits
Each job reserves its own price at list times 1.25, so 15 jobs reserve 15 prices at once. Make sure the workspace balance covers the batch, or later submits return 402 insufficient_credits. The rate limit returns 429, so back off if you hit it.
| Item | YouTube page | Sume setting |
|---|---|---|
| Files per upload | Up to 15 | 15 jobs, one key each |
| Length per file | Up to 3 minutes | 6 s in the example; seedance-2.5 accepts 4 to 30 s |
| Aspect ratio | Square or vertical | 9:16 (or 1:1 on models that list it) |
| Per-video details | Edit draft required | Titles and descriptions are yours |
After the render
Poll each job until completed, download the unsigned_urls, and drop the files into YouTube Studio. YouTube's separate disclosure rules for realistic altered or synthetic content still apply per video, so complete that setting when you edit each draft.
Sources
Related posts
More in Developers
- A zsh function: submit a video prompt, keep your terminal free
A 19-line .zshrc function sends a prompt to Sume Wan 3.0 (2 s, 480p, $0.125), returns at once and saves the MP4 later. Do not name a variable status.
- Which MCP server lets Claude Code or Cursor generate video and images?
MCP servers that let Claude Code and Cursor make video and images: Sume, fal, Replicate, Runway, Higgsfield. Endpoints, sign-in, billing, setup.
- Idempotency keys for AI video APIs: retry without paying twice
An idempotency key makes a retried create return the original run or job instead of a second paid one. How Sume's Idempotency-Key works on each API.
- Signed webhooks for Sume video runs: events, retries, verification
Sume sends one HMAC-SHA256 signed POST when a Format, Action, or Agent Completion run completes or fails. Verify the raw body and dedupe on request_id.
Written by Sume