Choose an AI video model in Python: filter the Sume model list by need
Read GET /v1/videos/models and keep only the models that fit your clip length, resolution and reference needs. A runnable Python filter for Sume.

The reliable way to choose a model is to filter Sume's own model list, because limits are per model and change. GET /v1/videos/models returns each model's supported_resolutions, supported_durations, supported_frame_images, supported_input_references and generate_audio, so a few lines of Python can answer "which models do 20 seconds at 1080p?"
The filter
This script lists every model that supports at least the duration and resolution you pass in. It needs SUME_API_KEY in the environment and the httpx package.
import asyncio
import os
import httpx
MIN_SECONDS = 20
RESOLUTION = "1080p"
async def main() -> None:
key = os.environ["SUME_API_KEY"]
headers = {"Authorization": f"Bearer {key}"}
async with httpx.AsyncClient(base_url="https://api.sume.com", headers=headers) as client:
response = await client.get("/v1/videos/models")
response.raise_for_status()
for model in response.json()["data"]:
durations = model.get("supported_durations") or []
resolutions = model.get("supported_resolutions") or []
if durations and max(durations) >= MIN_SECONDS and RESOLUTION in resolutions:
refs = model.get("supported_input_references") or []
print(model["id"], max(durations), "s", "audio" if model.get("generate_audio") else "silent", refs)
asyncio.run(main())What to expect
On the catalog as read on 2026-10-03, a 20 second minimum leaves only the 30-second rows, Seedance 2.5 and Wan 3.0. Change the constants to ask other questions: set the resolution to "4K" and the answer is Gemini Omni Flash; add a check for "audio_url" in the references to find the audio-reference rows.
Notes
Once you have a model id, submit with the same id on POST /v1/videos.
- Genjutsu is listed only where its provider is configured, so the list can differ between environments.
- The list reports capability, not price. Read
pricing_skusin the same response, or the pricing block on the Video Router list. - Do not cache the answer for long. Re-read it when you deploy.
| Field | Meaning |
|---|---|
| supported_resolutions | accepted output resolutions |
| supported_durations | clip lengths in whole seconds |
| supported_frame_images | first_frame, last_frame |
| supported_input_references | image_url, video_url, audio_url |
| generate_audio | whether the model can make audio |
Sources
Related posts
More in Developers
- Chrome extension icon: 96 px art in a 128 px PNG, from Sume
Chrome's store icon is a 128x128 PNG: 96x96 artwork with 16 px transparent padding per side. Generate a transparent mark on Sume and pad it in Pillow.
- Chrome extension icons 16/32/48/128 from one Sume master
Chrome's manifest icons are PNG-preferred at 16, 32, 48 and 128 px, and SVG is not supported. Make one 1:1 master on Sume and downsample it in Pillow.
- Chrome Web Store marquee 1400x560: crop a 21:9 Sume image
The optional marquee is 1400x560, a 5:2 ratio no Sume model lists. Generate 21:9 on FLUX.2 Pro and crop 6.7% of the height, or lose 20% from a 2:1 image.
- Claude Agent SDK 0.2.160: background wait ceiling, Sume video job
Claude Agent SDK Python 0.2.160 keeps stdin open until background subagents go idle, ten minutes by default. Why a Sume video job can outlast that.
Written by Sume