Nodes/ComfyUI-MiniMaxH3-Loop/Loop Interpolate
ComfyUI Node

Loop Interpolate

The frame between your last frame and your first

By pxl-pshr·Created 2 days ago·Updated a day ago· 24
Loop Interpolate
  • images
  • IMAGE
  • fps
◄method▾►
◄multiplier2►
◄fps24►

Every frame interpolator has a blind spot, and for looping video it's the same one every time: the frames between the last frame and the first. Your clip ends on frame N and starts again on frame 0, and nothing in a normal VFI node knows those two frames are neighbours. So the loop joins with a hop exactly one frame long - tiny, and once you've seen it you can't unsee it.

Loop Interpolate exists to fix that one hole. It's the last node in the MiniMax H3 Loop chain, but it's a general-purpose utility: any IMAGE batch that loops can go through it.

How it closes the loop

The mechanism is almost embarrassingly simple, which is why it works. It appends frame 0 to the end of the batch, interpolates the now-open sequence, then drops the duplicated frame at the finish:

frames = torch.cat((images, images[:1]), dim=0)
out = nodes.NODE_CLASS_MAPPINGS[node_name]().vfi(ckpt, frames, multiplier=multiplier, **extra)[0]
return (out[:-1], fps * multiplier)

Because the appended copy of frame 0 is a real endpoint, the interpolator generates genuine in-between frames across the loop point - same motion model, same quality as anywhere else in the clip. Then the duplicate comes off, and what's left has exactly frames × multiplier frames, which is what you want for a clean duration.

It implements none of the interpolation itself. It calls ComfyUI-Frame-Interpolation (Fannovel16's pack) - FILM VFI or RIFE VFI - and raises a plain RuntimeError if that pack isn't installed. Two hardcoded checkpoints, film_net_fp32.pt and rife49.pth, auto-download the first time you run it; RIFE runs with fast_mode and ensemble on.

Inputs and outputs

Four widgets, no surprises. images is the batch - from MiniMax H3 Loop Decode, or any looping IMAGE sequence. method is FILM or RIFE 4.9 and nothing else; there's no checkpoint picker because both are pinned. multiplier is 2 to 8. fps is the frame rate of what you're feeding in, default 24 - which is what H3 always generates at.

Two outputs, and both matter. IMAGE is the interpolated batch. fps is your input fps times the multiplier - 24 in, 48 out at ×2 - and it exists so you wire it directly into Create Video's frame rate.

Wire the wrong fps and you get the classic mistake: 48 fps worth of frames played back at 24 gives you a slow-motion clip twice as long. The frames are all there, they're just being played at half speed.

Which method you should reach for: RIFE 4.9 is the default, and ×2 is usually all you need to take a 24 fps H3 loop to something that reads as smooth. It's fast and it handles the small, dense motion between adjacent frames well. If you're looking at smearing or ghosting around fast movement - hands, fabric, particles - switch to FILM. It's the slower of the two and it's more forgiving when motion between frames is large. Try RIFE first; you'll know within one render whether it's enough.

Install

The node ships in the MiniMax H3 Loop pack:

cd ComfyUI/custom_nodes
git clone https://github.com/pxl-pshr/ComfyUI-MiniMaxH3-Loop
git clone https://github.com/Fannovel16/ComfyUI-Frame-Interpolation

Restart, then let Frame-Interpolation pull its own requirements - that's the heavy install here (torch-adjacent wheels and the two checkpoint downloads), not the loop pack, which has no requirements.txt at all. ComfyUI Manager can do both: search "ComfyUI-MiniMaxH3-Loop", then "ComfyUI-Frame-Interpolation".

Note that the pack itself needs ComfyUI v0.42.0+ even for this node, because the module imports H3 internals at load time. On an older build, Loop Interpolate won't appear - and the error will look like a Frame-Interpolation problem when it isn't.

Things that go wrong

"Loop Interpolate needs ComfyUI-Frame-Interpolation installed." That message means exactly what it says: the sibling pack is missing, or it's installed but failed its own import and isn't in NODE_CLASS_MAPPINGS. Check the startup console for the Frame-Interpolation error, which is usually a Python dependency it couldn't fetch.

The loop still hops. If the seam is still visible after interpolation, the problem is upstream, not here. Interpolation smooths the transition between your last and first frame; it can't fix a subject that jumped position or a puddle that filled up between them. On H3 loops, that's usually a prompt issue - the loop wants a state that keeps going, not a sequence of events.

Memory, not speed. A 6.4-second 1344×768 loop at ×2 is a few hundred float32 frames - several GB - before Create Video ever sees them. If a long loop dies here rather than at sampling, drop the multiplier to 2.

It's not a speed-up tool. Raising playback fps only makes the clip play faster. If you want a longer, smoother loop, interpolate; if you want a slower one, you're really after a different generated length (158 for 6.4 s, 209 for 8.5 s, and so on), not a widget here.

Categoryimage/animation

Inputs (4)

NameTypeDefaultDescription
imagesIMAGE—
methodCOMBO2 options: FILM, RIFE 4.9
multiplierINT22–8—
fpsFLOAT241–240—

Outputs (2)

NameTypeDescription
IMAGEIMAGE—
fpsFLOAT—