Nodes/LiquidTime - by PabloGFX/LiquidTime - by PabloGFX
ComfyUI Node

LiquidTime - by PabloGFX

Frame Interpolation You Can Bend to Your Will

By lazniak·Created 2 years ago·Updated about a year ago· 13
LiquidTime - by PabloGFX
  • images
  • IMAGE
target_frames60
start_curve0
middle_curve0
middle_moment50
end_curve0

Most frame interpolation nodes are one-trick ponies: they double your frame count and stop there. LiquidTime does that and lets you reshape time itself - slow the middle, punch the start, land soft at the end. It's the node people on r/comfyui point to when someone asks "how do I speed up or slow down a clip I already generated," and it earns that recommendation by being the rare interpolation tool that isn't stuck on uniform speed.

Why you'd reach for it. Video in ComfyUI is usually built from short, chunky bursts. AnimateDiff gives you 16-frame windows that at 8fps are about two seconds of stiff motion - classic stuff to smooth out. You take that burst, push it through interpolation to hit a clean 24/30/60fps, and suddenly it looks like a real clip instead of a slideshow. LiquidTime's twist: instead of just adding frames evenly, it lets you retime the whole sequence while it's at it, so you can build a slow-motion ease or an accelerating camera move in the same pass.

How it works. Feed it a batch of frames (an IMAGE tensor - exactly what AnimateDiff or your sampler stack spits out) and a target frame count. The node builds a time mapping from your curve parameters, then walks source-frame pairs and synthesizes in-between frames at each mapped timestamp. The heavy lifting is done by the FILM model (Google's frame interpolation for large motion) through a PyTorch port. A couple of honest limits baked into the code: if target_frames is less than your input, it just subsamples evenly - no interpolation, no magic; and if they're equal, it passes through untouched. The interpolation only happens when you're going up.

The inputs that matter. Out of six, a beginner really touches these:

  • target_frames (default 60, range 2–100000) - how many frames you want out. That's your speed knob: more than the input = slow motion, fewer = sped up.
  • start_curve / middle_curve / end_curve (default 0, range −100 to 100) - the retiming curves at the beginning, middle, and end of your clip. 0 is linear (uniform speed); negative slows that section, positive speeds it up.
  • middle_moment (default 50, range 0–100) - where the "middle" influence sits along the timeline. Set it to 30 and your middle curve acts a third of the way in.

Leave the curves at 0 and it behaves like a plain interpolator - which is a fine place to start. The single output is an IMAGE batch, ready to feed straight into VideoHelperSuite's VideoCombine and then out to gif or mp4.

Installing it. Two real options. If you have ComfyUI Manager, search the pack title "LiquidTime" and install. Otherwise:

cd ComfyUI/custom_nodes
git clone https://github.com/lazniak/LiquidTime-Interpolation
cd LiquidTime-Interpolation
pip install -r requirements.txt

Then restart ComfyUI. Dependencies are refreshingly light - just torch, numpy, pillow, tqdm; nothing exotic. The catch is the model: on your first run the node auto-downloads film_net_fp16.pt from GitHub releases into the pack's models/ folder. That's the one step that needs the internet, and it's the thing that breaks first if GitHub is blocked or the release vanishes.

Gotchas. The auto-download failing on first use is the classic complaint - the node will throw and you'll have no idea why. Watch the console: it prints [LiquidTime] progress and errors clearly. No CUDA? It silently falls back to CPU with fp32, which is noticeably slow. GPU out of memory gives you a clear message telling you to shrink the image or go CPU. And know the competition: newer ComfyUI builds ship a native Frame Interpolate node (FILM and RIFE) that manages VRAM better and is the right call if all you want is frame doubling. LiquidTime still earns its slot when you want the curve-based retiming - that's the part the native node doesn't do.

One recipe to try. Take a 16-frame AnimateDiff burst, set target_frames to 48, middle_curve to −50 at middle_moment 50, and you get a slow-motion pass that eases through the middle instead of slamming to a stop. That "liquid" feel is the whole point.

Categoryanimation/LiquidTime

Inputs (6)

NameTypeDefaultDescription
imagesIMAGE
target_framesINT602–100000
start_curveINT0-100–100
middle_curveINT0-100–100
middle_momentINT500–100
end_curveINT0-100–100

Outputs (1)

NameTypeDescription
IMAGEIMAGE