Nodes/was-node-suite-comfyui/EMA-VFI Frame Interpolation
ComfyUI Node Runs on cloud

EMA-VFI Frame Interpolation

Invent frames between frames with motion, not crossfades

By WASasquatch·Created 4 years ago·Updated a day ago· 1,864
EMA-VFI Frame Interpolation
  • images
  • ema_vfi_model
  • images
  • frame_count
◄multiplier2►

Frame interpolation is how you raise a sequence's frame rate without re-rendering it: instead of crossfading one frame into the next (which smears anything that moves), a motion-based interpolator works out where things actually moved between the two frames and draws the in-between frame with that motion accounted for. That's what this node does, using the EMA-VFI network - a well-trodden video-interpolation architecture that WAS Suite v3 vendors and runs on torch, on ComfyUI's own device.

Reach for it when you generated a video at a low frame rate and want it smooth, when you want a convincing slow-mo by interpolating up before dropping the playback rate, or when you need to double a sequence before feeding a downstream stage. It's the same class of tool the community uses to push short model outputs up toward cinematic frame rates, and WAS ships it so you don't need a separate EMA-VFI pack to do it.

How it works

You feed it an ordered batch of frames - at least two, all the same size - plus an ema_vfi_model from EMA-VFI Model Loader (the loader is where the checkpoint is chosen), and a multiplier: 2 puts one new frame in every gap, 4 puts three. The maths is simple: a run of n frames at multiplier m comes back as (n - 1) * m + 1 frames, originals included.

Here's the checkpoint gotcha, and it's the one that will bite you: a multiplier above 2 needs one of the ours_t checkpoints. The plain ours weights were trained to land a new frame exactly halfway between two inputs; the _t variants were trained to land anywhere between them, which is what multiplying by 4 or 8 actually asks of the network. Pick ours and ask for 4 and you're going to get told no - either cap the multiplier at 2 or switch to an ours_t model in the loader.

The inputs and outputs that matter

  • images - the sequence in order, minimum two frames, all the same size.
  • ema_vfi_model - from the loader. One loader can feed several interpolation nodes, because the loader builds the network once and keeps it for the life of the process.
  • multiplier - 2 to 8. Above 2, see above.

Outputs: images, the longer sequence; and frame_count, how many frames came back counting the originals - handy for driving a Save Video node or checking the arithmetic before you hand the batch onward.

Installing it - the weights are the whole install

The pack itself is the usual WAS Node Suite v3 story: ComfyUI Manager → search WAS Node Suite v3, or clone into custom_nodes. The network architecture ships inside the pack, but the weights do not, and nothing downloads unless you let it. Two routes:

  1. Turn on auto-download - set network: true under features: in the pack's config.yaml (written on first start at <ComfyUI user dir>/was-node-suite/config.yaml). The checkpoint is then fetched on the first run that needs it from the pack's own mirror of the EMA-VFI release weights.
  2. Or place a checkpoint in ComfyUI/models/EMA-VFI/ yourself and restart so it appears in the loader's list. The four released files are ours, ours_small, and their _t variants - the small ones are faster and less accurate, the _t ones are the any-timestep models a high multiplier needs.

If a run stops with a message naming a missing checkpoint, that's not a broken install - that's the network toggle being off and the file not being where the pack looks. Fix one of those two things and it just runs.

CategoryWAS Suite/Animation

Inputs (3)

NameTypeDefaultDescription
imagesIMAGEThe sequence to interpolate, in order. Needs at least two frames, all the same size.
ema_vfi_modelEMA_VFI_MODELThe interpolation network, from EMA-VFI Video Model Loader, which is where the checkpoint is chosen. One loader can feed several nodes so the network is built once.
multiplierINT22–8How many times the frame rate goes up. 2 puts one new frame in each gap, 4 puts three. Above 2 needs an 'ours_t' checkpoint.

Outputs (2)

NameTypeDescription
imagesIMAGEThe longer sequence, originals included. A run of n frames at multiplier m answers (n - 1) * m + 1 frames.
frame_countINTHow many frames came back, counting the originals.