Python asyncio: one prompt, three Sume video rows, a $1.75 probe
Vidu Q4 is not on Sume. This Python asyncio script sends one 5-second prompt to Wan 3.0, MiniMax H3 Max and Omni with Idempotency-Keys for $1.75 total.

The short answer
To compare Sume rows against a Vidu Q4 Preview clip, send the same prompt to three Sume video models at once. The script below does that with Python asyncio and httpx, one Idempotency-Key per model so a retry cannot double-bill. Sume does not list Vidu, so these rows are stand-ins. Total cost is $1.75: Wan 3.0 at 720p is 5 x $0.125 = $0.625, Omni at 720p is 5 x $0.125 = $0.625, and MiniMax H3 Max at 768p is 5 x $0.10 = $0.50.
The script
It reads SUME_API_KEY from the environment and exits if the key is empty. It sends all three requests concurrently and prints the status and the start of each response body. The Video Router returns the job envelope in a data object, which you can poll afterwards.
import asyncio, os
import httpx
URL = "https://api.sume.com/v1/video-router/generate"
PROMPT = "A slow push-in on a ceramic mug on a wooden desk, morning light"
ROWS = {"wan-3.0": "720p", "minimax-h3-max": "768p", "gemini-omni-flash-1.1": "720p"}
async def submit(client, model, resolution):
r = await client.post(
URL,
headers={"Idempotency-Key": f"probe-{model}-001"},
json={"model": model, "prompt": PROMPT, "resolution": resolution,
"duration": 5, "aspect_ratio": "16:9", "mode": "async"},
)
return model, r.status_code, r.text[:200]
async def main():
key = os.environ.get("SUME_API_KEY", "")
if not key:
raise SystemExit("Set SUME_API_KEY first")
headers = {"Authorization": f"Bearer {key}"}
async with httpx.AsyncClient(headers=headers, timeout=60) as client:
jobs = [submit(client, m, res) for m, res in ROWS.items()]
for model, status, body in await asyncio.gather(*jobs):
print(model, status, body)
asyncio.run(main())What each field does
The request uses the flat Video Router fields from the Sume docs.
model: a catalog id from GET /v1/video-router/models.resolution: 720p for Wan 3.0 and Omni; MiniMax H3 Max is native 768p, so 720p is not offered.duration: 5 seconds, inside every row's valid range (Omni 3-10, Wan 2-30, H3 Max 5-15).mode: async, so the call returns a job instead of waiting.Idempotency-Key: a replay with the same key returns the same job and price.
Next steps
Poll each job at GET /v1/jobs/:id/status and read the result at GET /v1/jobs/:id/result, as the jobs and results docs describe, or pass a webhook to avoid polling. Change the key suffix on every deliberate re-run; keep it the same on a network retry. If a row returns a 400, read the message, because each model rejects fields it does not support. The Video Router docs list limits for each row.
Retries and failures
A repeat of the same Idempotency-Key replays the same job and the same price, which is what you want after a network error. A new key makes a new job and a new charge, which is what you want for a deliberate second take. Read the errors and credits docs before you automate retries, because a failed job and a rejected request behave differently. Run the script once per prompt, not in a loop, until you have read one full set of responses by eye.
Scaling the probe is simple arithmetic. Each prompt costs $1.75 across the three rows, so ten prompts cost 10 x $1.75 = $17.50, and the same ten prompts on a single row are $6.25 on Wan 3.0 or Omni and $5.00 on MiniMax H3 Max. Decide which rows to drop after the first three prompts, not after the tenth. Vidu Q4 Preview is not part of this script because Sume does not list it; if that changes, add its id to the ROWS dictionary and read its resolutions from the models endpoint first.
Sources
Related posts
More in Developers
- Python asyncio price check: one Omni Flash clip at four resolutions
A runnable Python script submits a 3-second Omni Flash clip at 360p, 720p, 1080p and 4K together and prints usage.cost. Expect $2.20 in total.
- Python check: is this MP4 over TikTok's 516 kbps? Size and duration
A short Python function turns file bytes and duration_seconds into average kbps and tests TikTok's 516 kbps floor, 500 MB cap and 10-minute limit.
- Python fallback chain for Sume video models: 404 and 503 only
After the Sora API shutdown, a model chain must not retry everything. This Python function moves on at 404 and 503 and stops on 429, 402, 400, 409.
- Python: find Sume image models that list a ratio like 8:1 or 4:5
A 15-line Python script reads GET /v1/images/models and prints every Sume image model that lists a given aspect ratio, so you stop guessing before a 400.
Written by Sume