Seven pre-flight checks before an Omni, H3 or Recast job
Duration, resolution, ratio, edit conflicts, reference counts, refused fields and URLs: seven per-model checks that catch a refused Sume video request.

Most refused video requests on Sume fail one of seven checks, and five of them can be run in code before you submit. Omni wants 3-10 seconds, MiniMax 5-15, and Recast a 5-30 second source; each model also has its own resolution strings and its own list of refused fields.
The table is the checklist. Every limit comes from the Sume docs and catalog (read 2026-10-09).
The checklist by model
Check 1 and 2 catch most mistakes. A 12-second Omni request, a 720p MiniMax request and a 480p Recast request all fail there.
| Check | Omni Flash 1.1 | H3 and H3 Max | H3 Max Recast |
|---|---|---|---|
| 1. Duration | 3-10 s | 5-15 s | Source 5-30 s, no shot over 15 s |
| 2. Resolution | 360p, 720p, 1080p, 4K | H3: 480p, 768p, 2K, 4K. H3 Max: 480p, 768p, 1080p | 768p or 1080p |
| 3. Aspect ratio | 16:9 or 9:16 | adaptive, 21:9, 16:9, 4:3, 1:1, 3:4, 9:16 | None |
| 4. Edit conflicts | video_url alone: no frames, no references | Not an edit model | video_url plus photos only |
| 5. Reference counts | 10 images, 3 videos of 3 s or less | 9 images, 3 videos, 3 audio, 12 in all | 1-4 photos |
| 6. Refused fields | generate_audio: false, bitrate_mode, reference_audio_urls | generate_audio, bitrate_mode | Frames, audio, aspect_ratio, model_params |
| 7. URLs | Public HTTPS | Public HTTPS | Public HTTPS |
A pre-flight function
This covers the numeric checks and the edit conflict. It is a filter for obvious errors; the API remains the authority.
RULES = {
"gemini-omni-flash-1.1": (3, 10, {"360p", "720p", "1080p", "4K"}),
"minimax-h3": (5, 15, {"480p", "768p", "2K", "4K"}),
"minimax-h3-max": (5, 15, {"480p", "768p", "1080p"}),
"h3-max-recast": (5, 30, {"768p", "1080p"}),
}
def preflight(body):
lo, hi, res = RULES[body["model"]]
errs = []
d = body.get("duration")
if d is not None and not lo <= d <= hi:
errs.append(f"duration {d} outside {lo}-{hi}")
r = body.get("resolution")
if r is not None and r not in res:
errs.append(f"resolution {r} not accepted")
if "video_url" in body and body["model"] == "gemini-omni-flash-1.1":
for k in ("image_url", "end_image_url", "reference_image_urls", "reference_video_urls"):
if k in body:
errs.append(f"video_url cannot ride with {k}")
return errsA refused body and its fix
This Omni body fails twice: 12 seconds is above the 10-second limit, and 768p is not an Omni resolution. The fixed body below it uses 10 seconds and 720p, which is $1.25 on Sume (10 x $0.125).
// refused
{ "model": "gemini-omni-flash-1.1", "prompt": "Harbor at dawn", "duration": 12, "resolution": "768p" }
// accepted
{ "model": "gemini-omni-flash-1.1", "prompt": "Harbor at dawn", "duration": 10, "resolution": "720p", "mode": "async" }Limits and gotchas
Add the price check last: multiply the per-second rate for the resolution by the seconds, and stop if the total exceeds the budget you set for that request.
- Omni edit sends no
aspect_ratioand nodurationas a rule; the output keeps the source framing. - A request refused at validation comes back as an error, not as an accepted job, so the fix costs time and not a job.
- Send an
Idempotency-Keyon every real submit, so a retry does not create a second paid job. - The checks move when the catalog moves. Re-read
GET /v1/videos/modelswhen you update the table.
Sources
Related posts
More in Developers
- SGLang H3 /v1/videos vs Sume /v1/videos: same path, new fields
A self-hosted MiniMax H3 SGLang server and Sume both expose /v1/videos, but the fields differ: seconds vs duration, seed accepted vs not listed. Small adapter.
- Size a Sume submit wave: limit 100, 30 processing, 10 queued gives 60
How many new jobs can a Sume workspace take? max(0, limit - active - queued), capped by queue_capacity_remaining. Worked numbers and a TypeScript helper.
- Smoke-test 1:4, 4:1, 1:8 and 8:1 on Nano Banana 2.1 for $0.30
Four calls at 0.5K, one per new ratio, cost $0.30 on Sume ($0.80 at 4K). A script that prints status and cost per ratio, and what a 400 or 202 means.
- Sora, Veo and Omni preview shutdown dates in one table (Oct 2026)
OpenAI removed the Sora Videos API on Sept 24, 2026. Google ends Veo 3.1 and Omni preview ids Oct 22. One dated table, and how to read Sume's live list.
Written by Sume