Find video models with 1:1, 9:16 and 16:9: filter the Sume catalog
One Python call to GET /v1/videos/models lists which Sume video models cover square, vertical and widescreen, so one prompt can feed Feed, Reels and in-stream.

Call GET /v1/videos/models and keep the models whose supported_aspect_ratios contains 1:1, 9:16 and 16:9. The docs describe seedance-2.5, seedance-2, seedance-2-mini, seedance-2-fast, kling-3, wan-3.0, minimax-h3 and minimax-h3-max as catalog models, and the filter tells you which of them cover all three today.
Why filter the live catalog
Meta's aspect-ratio page recommends 1:1 and 4:5 for Feed, 9:16 for Stories, Status and Reels, and 16:9 for in-stream video. One campaign can therefore want three shapes of the same clip. Sume's docs say each model shows the subset of ratios it accepts in supported_aspect_ratios, and that the catalog controls validation: a value a model does not advertise returns a 400 instead of being dropped.
The catalog changes as models are added, so a hard-coded table in a blog post goes stale. A short script that reads the endpoint stays correct.
The script
It uses only the standard library, reads SUME_API_KEY, and prints each match with its resolutions and its shortest and longest duration. The response is an object with a data array of VideoModel entries.
import json, os, urllib.request
NEED = {"1:1", "9:16", "16:9"}
req = urllib.request.Request(
"https://api.sume.com/v1/videos/models",
headers={
"Authorization": "Bearer " + os.environ["SUME_API_KEY"],
"User-Agent": "catalog-filter/1.0",
},
)
with urllib.request.urlopen(req) as resp:
models = json.load(resp)["data"]
for m in models:
if NEED <= set(m.get("supported_aspect_ratios") or []):
d = m.get("supported_durations") or [0]
print(m["id"], m["supported_resolutions"], min(d), "-", max(d), "s")What the docs say you should expect
The docs do not give a per-model ratio table, so treat the script output as the source of truth. They do give the duration envelope, which the script prints for each model.
Gemini Omni Flash 1.1 and the sume/auto default behind it accept 16:9 or 9:16 only, so they will not appear in the output. For a square from those, crop or blur-fit afterward.
| Meta placement | Meta recommends | Filter needs it? |
|---|---|---|
| Stories, Status, Reels | 9:16 | Yes |
| Feed (images and videos) | 1:1 and 4:5 | 1:1 yes, 4:5 not in the docs list |
| In-stream video | 16:9 | Yes |
| Audience Network | 9:16 | Yes |
Reading the result
A model that passes the filter can render all three shapes natively, which avoids a crop and the loss of pixels that comes with it. Then submit three jobs with the same prompt and a different aspect_ratio each. Each job reserves its own price, so three shapes is three bills.
4:5 is not in the docs list of ratios, so no filter will find it; render 3:4 or 1:1 and crop to 4:5 yourself.
Sources
Related posts
More in Developers
- Firebase allows 1-hour HTTP functions; don't hold a Sume job open
Firebase HTTP functions can run up to an hour and Cloud Tasks covers longer work. Even so, submit Sume jobs async and take the result by webhook or status poll.
- 'first_frame_url must match image_url': two names, one value
image_url and first_frame_url are aliases on Video Router. Send both only if the strings are identical, same for end_image_url and last_frame_url, or get a 400.
- Fix a first frame with Ideogram 4.5, then send it to Omni image_url
Correct text or a prop in a still with Ideogram 4.5 on Sume, then use the edited image as the Gemini Omni 1.1 Flash first frame. Two jobs, one shot.
- Flare vs Sunburst A/B test: 100 prompts cost $3.30 at medium
A 100-prompt A/B test of GPT Image 2.5 Flare and Sunburst costs $3.30 at medium on Sume, $13.18 at high. Budget by tier, plus a cost-logging script.
Written by Sume