Wan 3.0 reference-to-video body: images, videos and audio in one job

A Wan 3.0 reference job on Sume takes up to 10 images, 5 videos and 5 audio files. Request body, the audio rule, and the frame-versus-reference conflict.

5 min readSume
All posts

On Sume, a wan-3.0 reference-to-video job accepts up to 10 reference_image_urls, 5 reference_video_urls, and 5 reference_audio_urls, for clips of 2-30 seconds. Audio references need at least one image or video reference beside them.

Alibaba's launch post describes Wan3.0 as taking text, images, audio, video, and documents as inputs and making up to 30 seconds in one pass. It does not give reference counts, so the counts here come from the Sume API schema.

Pick one input mode

There are two ways to feed images. Frame images (image_url, optionally end_image_url) start and end the clip. Reference fields guide the look without fixing frames. The API rejects a request that mixes the two with the message Use either first/end frame fields or reference_*_urls, not both.

On /v1/videos the same idea shows up as frame_images and input_references. If you send both there, the frame images win and the request runs as image-to-video, so a stray frame can silently switch your mode.

Wan 3.0 request fields for references (read 2026-10-07)
FieldLimit on SumeRule
reference_image_urls10Public HTTPS URLs
reference_video_urls5Public HTTPS URLs
reference_audio_urls5Needs an image or video reference too
duration2-30 secondsInteger seconds
image_url with reference_*_urlsNot allowedChoose one mode

A request

This TypeScript snippet sends one image and one video reference and prints the job id. Run it on Node 18 or later as an ES module.

const res = await fetch("https://api.sume.com/v1/video-router/generate", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.SUME_API_KEY}`,
    "Content-Type": "application/json",
    "Idempotency-Key": "wan-ref-demo-001",
  },
  body: JSON.stringify({
    model: "wan-3.0",
    prompt: "The dancer from the video reference, wearing the jacket in the photo",
    reference_image_urls: ["https://example.com/jacket.png"],
    reference_video_urls: ["https://example.com/dance.mp4"],
    duration: 15,
    resolution: "720p",
    mode: "async",
  }),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const { data } = await res.json();
console.log(data.request_id, data.status_url);

Where it fails

A 400 with a path like reference_audio_urls points at the rule above. A job that fails after it was accepted usually means a media URL could not be fetched, so use files that stay online until the job ends.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume