Wan 3.0 reference clips: four 4-second videos break the 15 s cap
Wan 3.0 accepts up to 5 reference videos totalling 15 seconds at 16 fps or more. Four 4-second clips total 16 seconds and fail; three 5-second clips pass.

Wan 3.0 on Sume accepts up to 5 reference videos, with a combined length of at most 15 seconds and a frame rate of at least 16 fps. Four 4-second clips add up to 16 seconds and break the cap; three 5-second clips add up to exactly 15 and pass. Count the total before you submit, not the number of clips.
Which combinations pass
The rule has two parts: at most 5 clips, and at most 15 seconds in total. A single 15-second clip is allowed.
| Clips | Total seconds | Result |
|---|---|---|
| 1 x 15 s | 15 | passes |
| 3 x 5 s | 15 | passes |
| 5 x 3 s | 15 | passes |
| 4 x 4 s | 16 | fails: over 15 s |
| 6 x 2 s | 12 | fails: more than 5 clips |
| 3 x 5 s at 12 fps | 15 | fails: below 16 fps |
Related caps on the same row
Reference images are capped at 10 and reference audio at 5 clips with 15 seconds in total. The output length is separate: 2 to 30 seconds. At 720p a 10-second output costs 10 x $0.125 = $1.25, and the catalog constraints list no extra fee for references on Wan.
- Check the clip's frame rate with video inspect before you spend money.
- A phone clip at 24 or 30 fps passes the 16 fps floor; screen recordings at a low variable rate may not.
- Trim a clip to a safe length with video trim, $0.02 per job.
A preflight check
The check below fails fast. It takes durations you already know, for example from video inspect.
def check_wan_refs(clips):
# clips: list of (seconds, fps)
if len(clips) > 5:
return "more than 5 reference videos"
if sum(s for s, _ in clips) > 15:
return "reference videos exceed 15 seconds in total"
if any(fps < 16 for _, fps in clips):
return "a reference video is below 16 fps"
return "ok"
print(check_wan_refs([(4, 24)] * 4))
print(check_wan_refs([(5, 24)] * 3))What the error looks like
A request that breaks a reference limit is refused before generation, so the usual cost is time rather than money; failed jobs are refunded. Read the error field on the poll response, and make sure every reference is available over public HTTPS.
Keep a manifest of your reference clips with duration and fps, and re-run the check whenever you swap one. A 15-second budget goes quickly: one long establishing shot and two short action shots is a better split than five tiny clips.
Sources
Related posts
More in Developers
- wave_size_hint on an empty workspace: Free 4, Pro 18, Startup 36
What generation_limits.wave_size_hint returns before any job is queued, by Sume plan, with the arithmetic and a Python check you can run.
- Which AI video models on Sume make their own audio track
Gemini Omni Flash 1.1 always generates audio and rejects generate_audio false; MiniMax H3 Max has native stereo audio; Seedance 2.0 reports generate_audio true.
- Which id to send Sume support: req_, job_, arun_ or agrun_
Error bodies carry req_ ids; jobs have job_; Format and Action runs arun_; Agent Completions agrun_. Which to share with support, and what never to paste.
- Which Sume wait mode fits which job: image, video, avatar, swap
Sume's async, sync, subscribe and webhook modes differ only in how you learn the outcome. A table by job length, and why 30 seconds is a request budget.
Written by Sume