Is exactly 180 seconds still a Short and a recommended Reel?

YouTube says Shorts can be up to 3 minutes, and Instagram will not recommend Reels over 3 minutes. Render 179 seconds with Sume for a margin at the same price.

1 min readSume
All posts

Both platforms put the line at three minutes, and both wordings favour 180 seconds exactly. YouTube says Shorts can be up to 3 minutes long, and Instagram says Reels over 3 minutes will not be recommended to new audiences. A file that runs 180.04 seconds is over that line, though, so a margin of a second is cheap insurance.

The lengths are from YouTube Shorts and Record a reel on Instagram, both read 2026-10-03. Neither page says how the platform rounds a file that runs a few frames long, so I would not test that edge with a real post.

Why 179 costs nothing extra

Timeline 1.0 bills $0.10 per started output minute, and audio.duration_seconds sets the output length. 179 and 180 seconds both bill three minutes, $0.30, so the margin is free. 181 seconds would bill four minutes, $0.40, and the video would be past the line on both platforms.

Output length against the 3-minute lines on YouTube and Instagram; Timeline billing per the Sume docs (read 2026-10-03)
Output lengthBillable minutesCostSafe on both?
170 s3$0.30Yes, 10 s margin
179 s3$0.30Yes, 1 s margin
180 s3$0.30At the limit, no margin
181 s4$0.40No, over by 1 s

Verify the render, do not assume

Sume's docs say video coverage may trail the audio spine by at most 0.5 seconds, so the file's real length can differ slightly from the number you sent. After rendering, read the length back with video inspect and compare it with 180.

import json, os, time, urllib.request as u

def call(method, path, body=None, key=None):
    h = {"Authorization": "Bearer " + os.environ["SUME_API_KEY"],
         "Content-Type": "application/json"}
    if key:
        h["Idempotency-Key"] = key
    data = json.dumps(body).encode() if body is not None else None
    req = u.Request("https://api.sume.com" + path, data, h, method=method)
    with u.urlopen(req) as r:
        out = json.load(r)
    return out.get("data", out)

def probe(url, key):
    d = call("POST", "/v1/video-inspect", {"video_url": url, "frames": False}, key)
    for _ in range(30):
        if d.get("probe"):
            return d["probe"]
        time.sleep(2)
        d = call("GET", "/v1/video-inspect/" + d["id"])
    raise TimeoutError("probe not ready")

RENDER_URL = "https://media.sume.com/artifacts/artf_demo/final.mp4"
secs = probe(RENDER_URL, "len-check-1")["duration_seconds"]
print(secs, "OK" if secs <= 180 else "over the 3-minute line")

If the probe says over, trim the tail with video trim at duration 179 for $0.02, or re-render a second shorter.

A note on 179

179 seconds is not a magic number. Pick whatever margin you trust after probing a few of your own renders, as long as it keeps the output inside the same billable minute. At 3 minutes the cost is the same $0.30 for 170, 179 or 180 seconds, so a margin is free.

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume