Shorts thumbnail 2160x3840 hits GPT Image 2.5's 8,294,400 px cap
YouTube's Shorts thumbnail size, 2160x3840, is exactly 8,294,400 pixels, the top of Sume's GPT Image 2.5 custom range. 1080x1920 is not legal; 1088x1920 is.
YouTube's Shorts thumbnail size is 2160 x 3840, and 2160 x 3840 is 8,294,400 pixels, which is exactly the top of the custom size range in Sume's GPT Image 2.5 docs (655,360 to 8,294,400). It is also legal on every other rule: both edges are multiples of 16 (135 x 16 and 240 x 16), the longest edge is 3840, and the ratio is 1.78:1, well under 3:1.
The common Shorts size people type, 1080 x 1920, is not legal, because 1080 is not a multiple of 16. The nearest legal sizes are 720 x 1280, 1088 x 1920, 1440 x 2560 and the full 2160 x 3840.
What the YouTube page says
YouTube's thumbnail help page gives Shorts thumbnails a 9:16 ratio at 2160 x 3840, with a minimum height of 640 pixels. It lists the file-size limits for all thumbnail types as 2 MB for video thumbnails on mobile and 50 MB for video, Shorts and podcast thumbnails on desktop, and names JPG or PNG as example formats.
So the floor is low: a 640-pixel-tall vertical image meets the stated minimum, and 720 x 1280 is a legal size that is already double it. The full-size image is for when you want the one winning cover to be as sharp as YouTube suggests.
| Size | Pixels | Both edges multiples of 16 | Legal |
|---|---|---|---|
| 720 x 1280 | 921,600 | yes (45 x 80) | yes |
| 1080 x 1920 | 2,073,600 | no (1080 / 16 = 67.5) | no |
| 1088 x 1920 | 2,088,960 | yes (68 x 120) | yes, 0.5667 vs 0.5625 ratio |
| 1440 x 2560 | 3,686,400 | yes (90 x 160) | yes |
| 2160 x 3840 | 8,294,400 | yes (135 x 240) | yes, exactly the cap |
Why this size goes async
Sume's Image API blocks for up to 30 seconds and then returns a 202 job envelope if the image is not ready. The docs name the slow configurations most likely to hit that: 4K, high quality and a large n. A 2160 x 3840 request at high quality is two of the three, so submit it with mode: "async" from the start and poll the job instead of holding a request open.
The script below does that: it submits, polls status_url until terminal is true, and then reads result_url. The docs tell you to poll rather than resubmit, because a repeated paid request is a second generation. If you do retry a submit after a client timeout, reuse the same Idempotency-Key, as described in Jobs and results.
import os
import time
import requests
H = {"Authorization": "Bearer " + os.environ["SUME_API_KEY"]}
body = {
"model": "openai/gpt-image-2.5",
"prompt": "Vertical Shorts thumbnail, host pointing up at a bold shape",
"image_size": {"width": 2160, "height": 3840},
"quality": "high",
"mode": "async",
}
job = requests.post("https://api.sume.com/v1/images", headers=H, json=body, timeout=60).json()["data"]
while True:
s = requests.get(job["status_url"], headers=H, timeout=30).json()
s = s.get("data", s)
if s.get("terminal"):
break
time.sleep(s.get("next_poll_after_seconds") or 5)
print(s.get("sume_status"))
if s.get("sume_status") == "completed":
print(requests.get(job["result_url"], headers=H, timeout=30).json())Price it before you commit
The fal page for this model lists $0.40026 for 3840 x 2160 at max quality, and $0.00402 for 1024 x 768 at low, which is its own list range and not a Sume price. Sume's docs add that auto quality reserves max, so an unpinned request can hold more than you expect. Set quality yourself, draft at 720 x 1280, and only render 2160 x 3840 for the cover you will publish.
The pixel count of 8,294,400 is the same as a 3840 x 2160 landscape frame, so the 3840 x 2160 figure on the fal page is the nearest list reference. It is a different canvas shape, so treat it as a ballpark and read the endpoint pricing line for your own number.
Sources
Related posts
More in Media tools
- Sneaker on a foot photo, then a 9:16 clip: image edit plus Videos API
Put a sneaker product shot on a foot photo with gpt-image-2.5, then animate that still with a first_frame on POST /v1/videos. Two calls, one Sume key.
- Split one voiceover into scene clips with timeline audio ranges
Sume timeline audio split slices one hosted file into up to 20 ranges for $0.01 per job, and ranges may overlap. For a video source, detach its audio first.
- Split one voiceover into six beat files with Timeline audio split
Slice a 180-second voice file into up to 20 ranges for $0.01 flat, then use each file as a beat of a Reel. Ranges can overlap and the last can be open-ended.
- Spotify podcast transcript upload: VTT, 5MB and Sume STT parts
Spotify takes VTT or SRT up to 5MB, with timestamps. Build one from Sume STT in 10-minute parts, stitch the cues, and upload from Spotify for Creators.
Written by Sume