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.

4 min readSume
All posts

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 ratios against the filter, ratios per Meta's page (read 2026-10-05)
Meta placementMeta recommendsFilter needs it?
Stories, Status, Reels9:16Yes
Feed (images and videos)1:1 and 4:51:1 yes, 4:5 not in the docs list
In-stream video16:9Yes
Audience Network9:16Yes

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

All Developers posts

Written by Sume