Python: list Sume video models that accept a video input

A 20-line Python script reads GET /v1/videos/models and prints every model whose supported_input_references include video_url, with its duration range.

6 min readSume
All posts

To find which Sume video models accept a video input, call GET /v1/videos/models and keep the rows whose supported_input_references include video_url. The script below does it with httpx and prints each id with its duration range and resolutions. It matters because the catalog changes: the docs say limits are per model and that you should read the catalog rather than assume one envelope (Video generation docs, read 2026-10-03).

One caveat shapes how you read the output. A model that lists video_url can use it in different roles. On Seedance 2.x, Wan 3.0 and MiniMax H3 the video is a reference that guides a new generation. On gemini-omni-flash-1.1, higgsfield-genjutsu and h3-max-recast it is the source that gets edited, restyled or recast. The catalog flag tells you a video is accepted; the model's docs tell you what it does with it.

The script

The code wraps the async call in asyncio.run, reads the key from the environment and refuses to run without it. It tolerates null fields because the catalog uses null where a model has no fixed list.

import asyncio
import os

import httpx

async def main() -> None:
    key = os.environ.get("SUME_API_KEY")
    if not key:
        raise SystemExit("set SUME_API_KEY")
    async with httpx.AsyncClient(timeout=30) as client:
        r = await client.get(
            "https://api.sume.com/v1/videos/models",
            headers={"Authorization": f"Bearer {key}"},
        )
        r.raise_for_status()
        for m in r.json()["data"]:
            refs = m.get("supported_input_references") or []
            if "video_url" not in refs:
                continue
            durations = m.get("supported_durations") or []
            span = f"{min(durations)}-{max(durations)}s" if durations else "n/a"
            print(m["id"], span, m.get("supported_resolutions"))

asyncio.run(main())

What to expect in the output

The docs describe the roles that matter for a person swap, so you can check the script's output against them. They are summarized below from the Video Router and Video generation pages; your live catalog is the authority.

Models documented as taking a video input on Sume, read 2026-10-03
Model idRole of the videoDocumented duration
seedance-2.5Reference that conditions a new clip4 to 30 s
wan-3.0Reference2 to 30 s
minimax-h3, minimax-h3-maxReference (audio and video honored)5 to 15 s
gemini-omni-flash-1.1Edit source (video_to_video)3 to 10 s; output follows source
higgsfield-genjutsuMotion Transfer source, listed only when its provider is configured4 to 30 s
h3-max-recastRecast source5 to 30 s, no shot over 15 s

Why the catalog beats a hard-coded list

Video model support moves fast, and the pages that describe it are written at a point in time. The Video Router page lists a catalog of twelve ids today, from higgsfield-genjutsu through h3-max-recast, and states that ids not listed in GET /v1/video-router/models are rejected on generate. A hard-coded list in your app is therefore a bug waiting for the next release, whereas the catalog call is one cheap read. The same call also returns pricing_skus, so the script can be extended to print the price basis next to each id.

There are two catalogs and it is worth knowing which you are reading. GET /v1/videos/models is the OpenRouter-shaped list with supported_input_references, supported_resolutions and supported_durations. GET /v1/video-router/models is the legacy Sume envelope with capabilities and billing fields. They share model ids, so a script can use either; the first is easier for the filter above, and the second is where each row's billable_formula lives.

Reading the result responsibly

Because higgsfield-genjutsu is listed only when its provider is configured, a workspace may not see it at all, and a script that expects it should treat absence as normal rather than an error. Likewise seedance-2 and seedance-2-mini are no longer picked by any default or routing preset but stay routable when named, so they can appear in your output even though sume/auto will not choose them.

If your goal is a person swap, filter again on the ids you know are source-editing models and ignore the reference-only ones. A simple approach is an allow-list of h3-max-recast, higgsfield-genjutsu and gemini-omni-flash-1.1, then check each is present in the catalog before you build a UI that offers it.

Making it a daily check

A new video model can appear between releases of your own code. Run the script from a scheduled job, diff its output against yesterday's, and alert when an id appears or a duration range changes. That is cheaper than discovering a change through a 400 on a customer request. For the one-call catalog habit see check the Sume catalog when a new video model launches.

  • Store the previous output and compare ids and ranges.
  • Treat a missing higgsfield-genjutsu as configuration, not failure.
  • Never infer capability from the model name; read the fields.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume