Which Sume video model makes a 15-second 9:16 ad? A catalog filter

List the models in GET /v1/videos/models that accept 15 seconds at 9:16 with a short Python filter, instead of trusting a stale table.

5 min readSume
All posts

To find which Sume models make a 15-second, 9:16 ad in one clip, filter the catalog rather than a table: GET /v1/videos/models returns each model's supported_durations, supported_aspect_ratios and supported_resolutions. The Sume docs say each other catalog model has a maximum of 15 seconds, while Seedance 2.5 accepts 4 to 30, Wan 3.0 accepts 2 to 30 and Gemini Omni Flash 1.1 accepts 3 to 10, so the answer depends on the model and changes with the catalog.

Source: Video generation: the /v1/videos API. Reddit's 15-second Engaged Video Views option is listed as a public beta from 2026-09-01 (read 2026-10-06 on the Social media platform updates, October 2026 (read 2026-10-06)), which is why 15 seconds is the length people are asking about.

Why filter instead of using a list

Model limits move. A blog table goes stale the day a new model ships or a limit changes. The catalog is the contract, and it says what the API accepts. A request outside a model's limits is refused, so reading the catalog before a batch avoids paying for failures. sume/auto is not in the catalog list, because it is a selector rather than a model, and the docs say Sume does not disclose which family it ran, so pin a model id when the length matters.

The filter

The script lists models whose supported_durations include 15 and whose supported_aspect_ratios include 9:16, and prints their resolutions and whether they can generate audio. It uses only the standard library and the fields from the catalog descriptor.

import json, os, urllib.request

req = urllib.request.Request(
    "https://api.sume.com/v1/videos/models",
    headers={"Authorization": "Bearer " + os.environ["SUME_API_KEY"]},
)
with urllib.request.urlopen(req) as r:
    models = json.load(r)["data"]

for m in models:
    durations = m.get("supported_durations") or []
    ratios = m.get("supported_aspect_ratios") or []
    if 15 in durations and "9:16" in ratios:
        print(m["id"], m.get("supported_resolutions"),
              "audio" if m.get("generate_audio") else "no audio flag")

What to do with the shortlist

A model on the list can make the clip, which is not the same as making a good one. Generate one test per model with the same prompt and compare the first second, the product and the end. Where a model has a longer limit, such as 30 seconds for Seedance 2.5, ask for exactly 15 rather than the maximum. If no model suits, join two clips with Timeline, which is what the stored post on a 15-second Omni ad does.

Price the shortlist before you test it. At the billed rates in the Sume pricing tables, a 15-second clip at 720p is $1.88 on Wan 3.0 ($0.125 a second) and $8.67 on Seedance 2.5, which is billed per video token. MiniMax H3 at 768p is $1.13 for 15 seconds ($0.075 a second, rounded up to the cent), and Kling 3 is $2.10 with audio off or $3.15 with audio on. These are catalog rates, and a 9:16 frame has the same pixel count as 16:9, so the orientation does not change the price on Seedance. The spread is nearly an order of magnitude, which is why the filter should be followed by a price check and one cheap draft at 480p.

Model limits quoted in Sume's video generation page, read 2026-10-06; the catalog is the source of truth.
ModelDuration limitNote
seedance-2.54 to 30 seconds480p, 720p, 1080p
wan-3.02 to 30 secondsCheck ratios in the catalog
gemini-omni-flash-1.13 to 10 seconds16:9 or 9:16; audio on
minimax-h35 to 15 secondsNative 768p
Most other modelsUp to 15 secondsRead supported_durations

Keep the filter in your pipeline

Run it at the start of any batch and fail the job if the shortlist is empty. That one check turns a surprise 400 in the middle of 200 jobs into a message at the start. Cache the result for the run, not for weeks.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume