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
- allowManagedModsOnly in Claude Code: does hosted Sume MCP still load?
allowManagedModsOnly keeps users' own Claude Code mods from loading. What it leaves alone, how a policy mod reviews the rest, and the Sume MCP connection.
- Claude Code mod: stop paid Sume calls after N in a session
Write a Claude Code mod that counts paid Sume MCP calls with a tool.call hook, denies call N+1, and fails closed. Code, matcher, and what it cannot cap.
- Claude Code mod hook skipped and a paid Sume call still ran
A Claude Code mod hook that throws or times out is skipped, so the call runs anyway. Add .catch to fail closed, and know what a mod still cannot guarantee.
- Claude Code mod: ask before a paid Sume call (and claude -p)
A Claude Code mod can hold a paid Sume MCP call with $.ui.ask and show max_spend_usd in the question. In claude -p nobody answers, so it refuses. Code inside.
Written by Sume