Nodes/OmniNodes/Video Loop Composer πŸ”‚
ComfyUI Node

Video Loop Composer πŸ”‚

Make that clip loop without a visible seam

By TensorVizionΒ·Created 3 months agoΒ·Updated about 8 hours agoΒ· 0
Video Loop Composer πŸ”‚
  • images
  • images
  • summary
β—„modepingpongβ–Ί
β—„repeats1β–Ί
β—„crossfade_frames4β–Ί

A looping GIF or an infinite-seam video is a small flex, but it's also a genuinely useful output - background ambience, a profile avatar, a short social clip. The problem is that raw AI-generated clips almost never loop cleanly: play them back-to-back and you get a visible jump where the end slams into the start. The Video Loop Composer from TensorVizion/OmniNodes turns a one-way batch into something that reads as a loop, in one of three modes.

It's the finishing step the pack was missing: Latent Interpolate produces a one-way morph sequence, and this node is what turns that into something that can actually loop for a GIF or a social post. Pure tensor math, no dependencies.

The three modes

  • pingpong (default) - plays the batch forward, then backward. The reversed pass drops the duplicate endpoint frames (images.flip()[1:-1]), so the loop doesn't stutter on a held frame at the turnaround. This is the classic "make anything loopable" trick, and it's why the default is what it is.
  • straight_loop - repeats the batch repeats times as-is. Only truly seamless if the source was already designed to loop (first and last frame match). Use it when your clip is loop-ready and you just want more of it.
  • crossfade_loop - blends the last crossfade_frames into the first crossfade_frames, smoothing away the seam so an otherwise non-looping clip reads as a loop. The more aggressive option for footage that isn't loop-friendly.

Inputs and outputs

Inputs: images, mode (the three above), repeats (1–20, how many times the cycle plays), and crossfade_frames (1–64, default 4, the blend length for crossfade mode). Outputs: images (the looped batch) and summary.

Install

Part of OmniNodes:

cd ComfyUI/custom_nodes
git clone https://github.com/TensorVizion/OmniNodes

Or ComfyUI Manager β†’ OmniNodes β†’ restart. No extra dependencies. Under TensorVizion/Video.

Troubleshooting

  • Pingpong has a stutter at the turnaround - that's usually the source clip's last frame lingering. If your input is very short (the node needs at least 3 frames to pingpong properly), a longer base clip gives a smoother bounce.
  • Straight loop has a visible jump - expected; that mode assumes a loop-designed source. Switch to crossfade_loop and raise crossfade_frames until the seam hides.
  • Crossfade looks smeared - a long blend on a fast-moving clip can double-expose. Drop crossfade_frames to 2–4.
  • Node missing - restart ComfyUI and check the [OmniNodes] terminal log.

Reach for it when the output needs to loop: pingpong for anything, crossfade for footage you want to genuinely repeat, straight for clips you designed as loops.

CategoryTensorVizion/Video

Inputs (4)

NameTypeDefaultDescription
imagesIMAGEβ€”
modeCOMBOpingpong3 options: pingpong, straight_loop, crossfade_loop
repeatsINT11–20β€”
crossfade_framesINT41–64β€”

Outputs (2)

NameTypeDescription
imagesIMAGEβ€”
summarySTRINGβ€”