ExploreTrendingCollectionsPricingBlogAboutHelp & FAQ
Log inSign up

The anatomy of a seamless loop

Some loops feel endless. Others hiccup every eight seconds and you can’t unsee it. After reviewing about 30,000 uploads this year, we know exactly why — and we now check for it automatically.

A loop is a promise: this clip can play forever and you will never see the joint. When that promise breaks, the whole edit feels cheap. A presenter on stage in front of a stuttering background looks like a technical fault, even when everything else is perfect.

Since March we have run every clip labelled “loop” through a set of automated checks before it goes live. About 11% fail the first time. Nearly all of them fail for one of three reasons.

1. The last frame is the first frame

This is the classic. If your animation is periodic with period T, the frame at t = T is identical to the frame at t = 0. Render both and the player shows that image twice in a row — a tiny freeze, every cycle.

The fix is to render the half-open interval [0, T). At 25 fps and a 12-second loop, that means frames 0 to 299, not 0 to 300.

# ffmpeg: a 12 s plasma that wraps perfectly
geq=r='128+100*sin(X/23+2*PI*T/12)' ... -t 12 -r 25

2. Motion that is periodic in position, but not in velocity

A camera that pushes in and then snaps back is a loop on paper. In practice, the eye notices the change in direction far more than any position mismatch. Good loops are periodic in every derivative you can perceive: position, speed and, for slow moves, acceleration.

The practical rule: drive motion with sine and cosine of 2πt/T (or integer multiples of it), not with linear ramps. A linear zoom can only loop if the content is self-similar — which is exactly why fractal zooms work so well.

If you can find the loop point by watching the speed, the loop isn’t finished.

3. Noise and grain that reset

Film grain, sensor noise and particle systems are usually seeded randomly per frame. That’s fine — until the seed sequence restarts at the loop point and a burst of identical grain appears twice. Either make the noise itself periodic (loop the seed over the same T) or apply grain in your editor after the loop.

What our checker does

For every loop upload we compute three things around the joint:

  • Frame difference between the last and first frames, compared with the median difference between neighbouring frames elsewhere in the clip.
  • Optical-flow continuity: the motion vectors across the joint should look like any other pair of frames.
  • Duplicate detection: catches the “last frame equals first frame” case directly.
Creators: if a clip fails, the upload page now shows the exact frame range that tripped the check, with a side-by-side preview. Most fixes take one re-export.

The refund promise

Because of these checks, we now offer something we were nervous about a year ago: if you can spot the loop point on a clip marked “verified loop”, we refund the download. In the six months since launch we’ve had 14 claims, and fixed the checker every time.

Want to see what passes? Browse the Calm backgrounds collection — every clip in it is a verified loop.

Daniel Okoro

Design Lead at VideoFinder. Based in Warsaw.