Wan 3.0 reference file limits: pixels, ratio, MB and fps preflight
Alibaba lists per-file limits for Wan 3.0 reference images, videos and audio. A runnable Python check to run before you submit them to Sume.
Wan 3.0 reference files have per-file limits on pixels, aspect ratio, size, frame rate and length, and Sume's request check counts them (10 images, 5 videos, 5 audio). Sume's docs do not describe the per-file limits, so a file that breaks one may only fail after you submit. The script below tests each file against Alibaba's published limits before you send the URL.
Which limits does Alibaba publish?
Alibaba's pages give these per-file limits for reference media.
| Type | Count | Per file | All together |
|---|---|---|---|
| Image | up to 10 | 240 to 8000 px a side, up to 8:1, up to 20 MB | not stated |
| Video | up to 5 | 1 to 15 s, 16 fps or more, 240 to 4096 px a side, up to 100 MB | 15 s total |
| Audio | up to 5 | 1 to 15 s, up to 15 MB | 15 s total |
What does Sume check itself?
The API schema for wan-3.0 caps the counts at 10 images, 5 videos and 5 audio files and requires every URL to be public HTTPS. The pixel, ratio, megabyte, frame-rate and total-length limits above are Alibaba's, and I found no Sume check for them, so catch them in your own code before you submit.
How do you preflight a file set?
Pass the numbers you already have from an upload step or a probe. The function returns a list of problems and prints nothing if all is well.
def check_image(w, h, mb):
out = []
if not (240 <= min(w, h) and max(w, h) <= 8000):
out.append("image side outside 240-8000 px")
if max(w, h) / min(w, h) > 8:
out.append("image ratio above 8:1")
if mb > 20:
out.append("image over 20 MB")
return out
def check_video(w, h, mb, fps, secs):
out = []
if not (240 <= min(w, h) and max(w, h) <= 4096):
out.append("video side outside 240-4096 px")
if mb > 100: out.append("video over 100 MB")
if fps < 16: out.append("video under 16 fps")
if not (1 <= secs <= 15): out.append("video clip not 1-15 s")
return out
def check_audio(mb, secs):
out = []
if mb > 15: out.append("audio over 15 MB")
if not (1 <= secs <= 15): out.append("audio clip not 1-15 s")
return out
def check_totals(video_secs, audio_secs):
out = []
if sum(video_secs) > 15: out.append("videos over 15 s total")
if sum(audio_secs) > 15: out.append("audio over 15 s total")
return out
print(check_image(3000, 300, 4))
print(check_video(1280, 720, 40, 12, 8))
print(check_totals([8, 9], [10]))What should you do when a check fails?
Trim long clips with Video trim and re-export images before submit. A 5-second test at 480p is $0.3125 on Sume, so fix the files first rather than learn from a rejected job.
Sources
Related posts
More in Developers
- Wan 3.0 reference video needs 16 fps: probe clips before Sume
Alibaba lists 16 fps or more, 1 to 15 s and 100 MB for each Wan 3.0 reference clip. An ffprobe script that checks your real files before you send URLs to Sume.
- 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.
- 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.
Written by Sume