Detect a new video model on Sume: a Python diff of /v1/videos/models
Grok Imagine 1.5 Lite is on xAI's price table, not Sume's. A short Python script diffs GET /v1/videos/models against a saved list to flag new ids.

The way to know when Sume adds a model is to read GET /v1/videos/models on a schedule and compare the id list to a saved copy. xAI's models page lists Grok Imagine Video 1.5 Lite at $0.020 a second, but Sume's video catalog documents grok-imagine-video-1.5 and no Lite id, so sending a Lite id returns 404 model_not_found. The script below prints any id that appears or disappears.
The script
The catalog is the source of truth for validation: if a model does not advertise a resolution, aspect ratio or duration, the API gives a 400. The route needs your API key. It saves the last list to video_models.json next to the script and exits 1 when the list changed, which makes it easy to run from a scheduler.
import json, os, sys, urllib.request
req = urllib.request.Request(
"https://api.sume.com/v1/videos/models",
headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
)
with urllib.request.urlopen(req, timeout=30) as r:
models = json.load(r)["data"]
now = {m["id"]: m.get("supported_resolutions") for m in models}
path = "video_models.json"
before = json.load(open(path)) if os.path.exists(path) else {}
added = sorted(set(now) - set(before))
removed = sorted(set(before) - set(now))
for i in added:
print("new:", i, now[i])
for i in removed:
print("gone:", i)
json.dump(now, open(path, "w"), indent=2)
sys.exit(1 if (added or removed) and before else 0)What to do with a hit
Run it daily. The first run just saves the list. A later run that prints new: ... is your cue to read that row's supported_resolutions, supported_durations, supported_frame_images and pricing_skus before you route traffic to it. A row can appear and disappear by environment: some rows are listed only where their provider is configured.
| Vendor name | Where it is priced | Documented Sume id |
|---|---|---|
| Grok Imagine Video 1.5 | xAI: $0.080 per second | grok-imagine-video-1.5 |
| Grok Imagine Video 1.5 Lite | xAI: $0.020 per second | None documented |
| Gemini Omni Flash | Google: default video model | gemini-omni-flash-1.1 |
Sources
Related posts
More in Developers
- Edit a video with a prompt API: Python script for Omni Flash 1.1
Send a clip and a sentence to POST /v1/video-router/generate with gemini-omni-flash-1.1 and video_url, poll the job, read the result. Stdlib Python.
- Effect 4.0.4 retryTransient honors Retry-After: key your Sume submit
Effect 4.0.4 makes HttpClient.retryTransient honor Retry-After, so a Sume 429 waits as told. It also retries POST on 5xx, so send an Idempotency-Key.
- Which fps to set: TikTok 23-60, YouTube list, Sume's 24/25/30/60
Sume Timeline fps can be 24, 25, 30 or 60, and every one is in TikTok's 23 to 60 window and on YouTube's list. Leave fps unset to match your sources.
- Gemini Omni edit returns 400: the five field mistakes on Sume
A video_url edit on gemini-omni-flash-1.1 fails with 400 when you add aspect_ratio, generate_audio false, bitrate_mode, reference audio, or other media. Fixes.
Written by Sume