Seamless loop with Wan 3.0: the same image as first and last frame
Send one image as both start and end frame to ask Wan 3.0 for a loop on Sume, keep it 4 to 6 seconds, and check the join with stills before it repeats.

To ask Wan 3.0 for a looping clip on Sume, send the same image URL as the first frame and the last frame, keep the clip short, and describe a motion that returns to where it began. The catalog lists end_frame support for wan-3.0, and the Video Router's image-to-video fields are image_url and the optional end_image_url. Alibaba's Wan 3.0 README (read 2026-10-05) lists native 30 second generation, but for a loop you want the opposite end of the range: Sume's docs show wan-3.0 accepting 2 to 30 seconds, and 4 to 6 is where a return to the start frame is easiest to believe.
Why identical frames work
A first and a last frame constrain the clip at both ends. When the two are the same picture, the model has to leave the picture and come back to it, so the end of the clip is almost the start. That is what makes a repeating background, a product turntable or a breathing effect look continuous when a player repeats it.
- Choose motion that is naturally periodic: steam rising, a slow camera orbit, leaves moving, a light pulse.
- Avoid one-way events: a door that opens, a pour, anything that cannot undo itself.
- Keep the subject centered and the background simple; busy backgrounds drift more.
- Use the same aspect ratio as the image, so nothing is cropped from the end frames.
- Keep the audio off or ambient: speech does not loop.
The request
The same URL appears twice. The prompt describes the motion and says that the end returns to the start.
curl -X POST https://api.sume.com/v1/video-router/generate \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: loop-001" \
-d '{
"model": "wan-3.0",
"prompt": "Steam curls up from the cup and settles, camera drifts a few degrees and returns. The last frame matches the first.",
"image_url": "https://example.com/cup.png",
"end_image_url": "https://example.com/cup.png",
"resolution": "720p",
"duration": 5,
"generate_audio": false,
"mode": "async"
}'Check the join before you publish
A loop fails at the seam: a small jump between the last frame and the first. Pull stills at the start and at the very end with video frames, using at with 0 and a time just under the clip length, and compare them side by side. The docs say frames keep the source size unless you set max_edge, so the comparison is at full resolution. If the end frame is not quite the start frame, trim a few frames off the end with video trim (it cuts a [start, end) range into a new MP4) or add a short crossfade when you join the clip to itself with Timeline 1.0.
| Symptom | Likely cause | Fix |
|---|---|---|
| Visible jump at the seam | Last frame differs from the first | Trim the end, or crossfade the clip with itself in Timeline |
| Motion stops dead at the end | Prompt did not ask for a return | Say the motion returns to its start pose |
| Background shifts over time | Too long or too busy | Shorten to 4 s, simplify the image |
| Looks fine once, jerky on repeat | Audio or fps mismatch | Mute with generate_audio false; set output fps in Timeline |
Repeating it
To make a loop longer than one pass, use Timeline 1.0: put the same clip into several consecutive video[] slots, each with its own start and duration. The docs say the first slot must start at 0 and later starts must increase, and that transitions are allowed only on slots after the first. A dissolve of a fraction of a second at each join hides small seams. Preview the result before you commit it to a page.
Sources
Related posts
More in Media tools
- Serum label close-up: three crop punch-ins from one clip for $0.06
Cut three label and dropper close-ups from one serum clip with video-filter crop fractions: $0.02 each, no re-shoot, no efficacy claims added to the frame.
- Shopify video limits: 120 fps and WebM allowed, so Sume MP4s fit
Shopify takes video up to 1 GB, 10 min, 120 fps and 4096 px per side. Sume's 24, 25, 30 or 60 fps MP4 at up to 2160 px sits inside all of those limits.
- Shopify Magic edits at 1 megapixel: when to generate larger
Shopify media generation defaults to about 1 megapixel, resizing inputs to fit. Sume's Image API accepts custom sizes up to 3840 px and 8,294,400 pixels.
- Replace the music in a vertical Short: trim audio drop, then a bed
Remove a clip's audio with video-trim audio drop, then rebuild the track in Timeline with a silent spine and a soundtrack bed at a set gain_db.
Written by Sume