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.

4 min readSume
All posts

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.

Wan 3.0 reference limits (Alibaba pages read 2026-10-09)
TypeCountPer fileAll together
Imageup to 10240 to 8000 px a side, up to 8:1, up to 20 MBnot stated
Videoup to 51 to 15 s, 16 fps or more, 240 to 4096 px a side, up to 100 MB15 s total
Audioup to 51 to 15 s, up to 15 MB15 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

All Developers posts

Written by Sume