Upload 15 Shorts at once in Studio: probe every file first

Studio takes up to 15 Shorts per upload, each up to 3 minutes and square or vertical. Check duration and frame shape with video-inspect before you queue.

5 min readSume
All posts

What does YouTube Studio accept in one Shorts upload?

On a computer, YouTube's help page for uploading Shorts says each file can be up to 3 minutes long with a square or vertical aspect ratio, and you can upload up to 15 short videos at once. A batch of AI clips is exactly that case, and one wrong file in fifteen is easy to miss until it publishes as a regular video.

You can check all fifteen before you open Studio. Sume's video inspect route probes a clip and returns its duration, width, height, rotation and whether it has an audio track, without cutting or changing it.

Turn the help page into a pass or fail rule

Two of the statements on the page are checkable from a probe. The rest (titles, privacy, the draft screen) happen inside Studio.

YouTube Shorts upload rules and what to check (read 2026-10-03)
YouTube statementProbe field to readFail when
Up to 3 minutesduration_secondsGreater than 180
Square or vertical aspect ratiowidth and heightwidth greater than height
Up to 15 files at onceYour own list lengthMore than 15 files

Probe a folder of clips

The clips must already live on media.sume.com; there is no open-internet fetch, so import first with the media import route described under media inputs. Send frames: false so the call is a probe only. The default mode waits up to 30 seconds for a finished answer and returns 202 if the job is still running, in which case you poll GET /v1/video-inspect/:id.

The probe also carries rotation. A phone file with a rotation flag can report a stored shape that differs from what plays, so look at any file whose rotation is not 0 by eye. The sample below prints one verdict per file.

import asyncio, os
import httpx

H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
URLS = ["https://media.sume.com/artifacts/artf_demo/short-01.mp4"]  # up to 15

async def probe(client, i, url):
    r = await client.post(
        "https://api.sume.com/v1/video-inspect",
        headers={**H, "Idempotency-Key": f"studio-batch-{i}"},
        json={"video_url": url, "frames": False},
    )
    r.raise_for_status()
    body = r.json()
    p = body["video_inspect"]["probe"]
    if p is None:
        return url, "still running: GET /v1/video-inspect/" + body["request_id"]
    long = (p["duration_seconds"] or 0) > 180
    wide = (p["width"] or 0) > (p["height"] or 0)
    return url, "FAIL" if long or wide else f"ok rotation={p['rotation']} audio={p['has_audio']}"

async def main():
    async with httpx.AsyncClient(timeout=60) as c:
        for url, verdict in await asyncio.gather(*(probe(c, i, u) for i, u in enumerate(URLS))):
            print(verdict, url)

asyncio.run(main())

What to do with a file that fails

Each failure has a different fix, and the cheap ones are worth trying before you regenerate anything. A file over 180 seconds can be cut down: video trim takes a start and exactly one of end or duration, caps the output at 900 seconds, and is $0.02 per job in the docs. A file that is wider than tall needs a crop to a vertical frame, which the video filter handles with fractions of the source frame.

A file with no audio track will not break the upload, but it will break speech-to-text captions, which fail on a silent clip. Read has_audio in the same probe and route silent files to authored caption cues instead. Doing this check once per file, before the batch, keeps the 15-file upload from stalling on the one clip that needed a different path.

Probe result and the next step (Sume docs, read 2026-10-03)
Probe saysNext stepSurface
duration_seconds over 180Cut to a shorter rangeVideo trim
width greater than heightCrop to a vertical frameVideo filter crop
has_audio falseBurn authored cues, not speech captionsVideo captions with cues
rotation not 0Look at the clip before trusting width and heightYour eyes

What the probe cannot tell you

A probe reports file facts. It does not know whether a clip is the right length for the story, whether the text is inside the safe area, or whether a rights holder will claim the music. The upload page itself warns that using copyrighted material can lead to Content ID claims or strikes if the owner files a takedown.

If a file fails on length, cut it with video trim rather than re-generating; if it fails on shape, see the guide to Shorts specs. The API's own probe-only note is also worth reading in the QA gate post, since the docs and the catalog text describe billing slightly differently and you should confirm the live rate in GET /v1/catalog.

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume