Same prompt on Seedance 2.5, Wan 3.0 and MiniMax H3: compare via API
Submit one 480p prompt to seedance-2.5, wan-3.0 and minimax-h3 with distinct idempotency keys and metadata, then poll all three. A short Python script.

To compare video models on your own prompt, submit the same request to seedance-2.5, wan-3.0 and minimax-h3 through POST /v1/video-router/generate, each with its own Idempotency-Key and a metadata tag, at 480p and 5 seconds, then poll the three status URLs. Five seconds is legal on all three, since their minimums are 4, 2 and 5 seconds. The script below does it with requests.
Request fields come from Sume's Video Router docs and API reference; polling follows Jobs and results, read 2026-10-02.
What does the comparison script look like?
It submits in async mode, so each call returns at once with a status_url and result_url. metadata is stored with the Sume job request and is not sent to the provider, so use it to label the run in your own records. It needs SUME_API_KEY in the environment and spends a small amount at 480p.
aspect_ratio is 16:9 for all three; minimax-h3 accepts 480p natively.
import os, time, requests
BASE = "https://api.sume.com"
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
PROMPT = "A ceramic mug on a wooden desk, steam rising, soft window light."
jobs = {}
for model in ("seedance-2.5", "wan-3.0", "minimax-h3"):
body = {"model": model, "prompt": PROMPT, "resolution": "480p",
"duration": 5, "aspect_ratio": "16:9", "mode": "async",
"metadata": {"test": "mug-ab-1", "model": model}}
r = requests.post(f"{BASE}/v1/video-router/generate", json=body, timeout=60,
headers={**H, "Idempotency-Key": f"mug-ab-1-{model}"})
r.raise_for_status()
jobs[model] = r.json()["data"]
for model, d in jobs.items():
while True:
s = requests.get(d["status_url"], headers=H, timeout=30).json()
s = s.get("data", s)
if s.get("terminal"):
break
time.sleep(s.get("next_poll_after_seconds") or 10)
print(model, s.get("sume_status"), d["result_url"])What should the three requests share and what must differ?
Share the prompt, resolution, duration and aspect ratio, so the only variable is the model. Differ the Idempotency-Key, since a key reused with a different payload returns 409 idempotency_conflict. Build keys from the test name and model, as the script does, so a rerun of the same test returns the same jobs.
Rerunning with a new prompt needs a new test name.
| Sume id | Clip length | 480p | Audio field |
|---|---|---|---|
seedance-2.5 | 4-30 s | Yes | generate_audio boolean |
wan-3.0 | 2-30 s | Yes | generate_audio boolean |
minimax-h3 | 5-15 s | Yes, native | Native stereo audio, no toggle |
How do I judge the three clips?
Write the rubric first: product shape, motion, lighting, audio. Score each clip blind by labeling files A, B and C. Then re-run only the winner at 1080p where it is offered; H3 stops at native 768p.
Keep the result URLs from each job; public results use Sume media URLs rather than provider URLs. For picking by constraints before testing see choosing a video model API.
Keep the experiment small and cheap: one prompt, three models, 480p, 5 seconds. If the three clips are close, choose on clip length and price; if one clearly fails your rubric, drop it and spend your 1080p budget on the other two.
Sources
Related posts
- Choosing an AI video API as a developer: a technical checklist
- Wan 3.0 vs MiniMax H3: clip length, ratios and reference caps
- Wan 3.0 vs Seedance 2.5: 30-second clips, inputs and price
- Seedance 2.5 vs MiniMax H3: length, resolution, audio, price
- Video 1.0 metadata field: stored on the job, not sent upstream
More in Developers
- Feed scraped product copy to a Format run: input, not instruction
Putting a supplier's text into a Format's instruction lets it steer the run. Sume's input field is treated as data, with a 64-key and 2 MiB limit.
- script_run budgets: call, paid-call and timeout limits on MCP
script_run caps a Sume MCP program by timeout (5-55 s), max_calls and max_paid_calls, and stops with a named error code. Defaults, ceilings and what to do next.
- Seedance 2.0 or Kling 3.0 gives 404 model_not_found: real ids
seedance-2.0 or kling-3.0 on /v1/videos gets 404 model_not_found. Sume's ids are seedance-2, seedance-2.5 and kling-3; list them from the models endpoint.
- Seedance 2.5 60 FPS on Dreamina: is there a frame-rate field?
Dreamina's plan page lists frame-rate improvements up to 60 FPS and resolution upgrades. Sume's video request has no fps field; here is what it takes instead.
Written by Sume