Vidu Q4 image-to-video request, field by field, as a Sume body
Vidu Q4 Preview is not in Sume's video catalog (read 2026-10-09). Map its img2video fields to POST /v1/videos on seedance-2.5 or wan-3.0.

Vidu Q4 Preview is not listed in Sume's video catalog (catalog read 2026-10-09), so you cannot send viduq4-preview to POST /v1/videos. You can move an image-to-video call to seedance-2.5 or wan-3.0 by renaming about eight fields. The table shows each one.
What does the Vidu Q4 image-to-video call send?
Vidu's page for the preview model lists a POST https://api.vidu.com/ent/v2/img2video create call and a GET https://api.vidu.com/ent/v2/tasks/{id}/creations query. The body carries model: viduq4-preview, one start-frame images entry, and optional prompt, duration, resolution, audio, seed, payload and callback_url.
| Vidu field | Sume field | Note |
|---|---|---|
| model: viduq4-preview | model: seedance-2.5 or wan-3.0 | Pick an id from GET /v1/videos/models |
| images (one start frame, URL or base64) | frame_images with frame_type first_frame | Public HTTPS URL only |
| prompt (optional, up to 20,000 characters) | prompt | Required on a pinned model |
| duration 3 to 16, default 5 | duration | seedance-2.5 takes 4 to 30, wan-3.0 takes 2 to 30 |
| resolution 540p to 4K, default 720p | resolution | 480p, 720p or 1080p on both rows |
| audio, default true | generate_audio | Same on/off idea |
| seed | none | Sume models reject seed |
| callback_url | callback_url | Must be HTTPS |
What fails if you copy the call unchanged?
A few Vidu habits fail on Sume.
seedis rejected: every v1 model reportsseed: falseand rejects the field.payloadis not a Sume field, and a non-emptyprovider.optionsreturns400 unsupported_parameter.- A base64
imagesstring is not a public HTTPS URL, so host the file first. duration: 3is below the 4-second floor ofseedance-2.5;wan-3.0starts at 2.540p,2Kand4Kare not values these two rows list.
What does the Sume version look like?
This submits a 5-second 720p clip from a first frame and prints the URL to poll. Replace the example image URL with your own public HTTPS file.
import os, requests
body = {
"model": "seedance-2.5",
"prompt": "The camera pushes in as she turns and smiles",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
"generate_audio": True,
"frame_images": [{
"type": "image_url",
"image_url": {"url": "https://example.com/start.png"},
"frame_type": "first_frame",
}],
}
r = requests.post(
"https://api.sume.com/v1/videos",
headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
json=body,
timeout=60,
)
print(r.status_code, r.json().get("polling_url"))Where do the limits come from?
The limits per row are in the video generation docs: read supported_durations, supported_resolutions and supported_frame_images from GET /v1/videos/models before you hard-code anything. Sume bills the provider list price times 1.25 and reserves that amount at submit.
Sources
Related posts
More in Developers
- Vidu task states mapped onto Sume job statuses in Python
Map Vidu task states (created, queueing, processing, success, failed) to Sume queued, processing, completed and failed so an old poller keeps working.
- Vidu, Wan 3.0 and Sume job states in one poller
Vidu says created/queueing/processing/success/failed, Wan says PENDING/RUNNING/SUCCEEDED/FAILED, Sume says pending/in_progress/completed. One mapping table.
- waitForRun or waitForJob? Pick by which Sume endpoint made the id
A Sume run id cannot be read as a job id. Which create endpoint made your id decides waitForRun or waitForJob, with a TypeScript example of each.
- Wan 3.0 says 30 fps MP4: check your Sume download with ffprobe
Alibaba says Wan 3.0 outputs 30 fps MP4. Sume's docs do not repeat it, so probe your download. A Python ffprobe script for fps, size, length and audio.
Written by Sume