ComfyUI Node Runs on cloud

M2M VFI

Many-to-many splatting for fast interpolation

By Fannovel16·Created 3 years ago·Updated 4 months ago· 1,058
M2M VFI
  • frames
  • optional_interpolation_states
  • IMAGE
ckpt_name
clear_cache_after_n_frames10
multiplier2

M2M is the efficient-at-high-multipliers option in the ComfyUI Frame Interpolation pack. Its whole design point is generating several in-between frames in one motion pass instead of estimating flow over and over, which makes it a good pick when you want to interpolate 4x or 8x without the runtime exploding. If you're going for a big frame-rate jump on a decent clip, it's worth a look.

Frame interpolation, briefly: it invents new frames between your existing ones so a choppy low-fps clip plays smooth. You generate video cheaply at a low frame count with something like AnimateDiff or Wan, then interpolate up to a watchable frame rate instead of paying to diffuse every real frame. M2M does that final step.

How it works

M2M stands for "Many-to-Many Splatting" (CVPR 2022). Most flow-based interpolators estimate motion for one target time and warp to it - do it again for the next in-between frame, and again. M2M instead computes motion once and splats pixels forward to many output timestamps in a single shot. Forward splatting (pushing source pixels along their motion vectors) many-to-many is where the efficiency comes from: the expensive motion estimation is amortized across all the frames you're inserting. You don't configure any of that; you just set how many frames you want out.

The inputs that matter

  • frames (IMAGE) - your clip, at least 2 frames, from a VAE decode or a Load Images node.
  • ckpt_name - one option, M2M.pth, which downloads automatically on first run.
  • multiplier (INT, default 2) - output frames per gap, and this is where M2M earns its keep: because it splats to many timestamps at once, pushing to 4x or 8x is relatively cheap compared with rerunning a single-target model that many times.
  • clear_cache_after_n_frames (INT, default 10) - the OOM valve; lower it on long clips if memory gets tight.

An optional optional_interpolation_states input takes a Make Interpolation State List for skipping specific frame pairs across cuts. Usually left unwired.

The output is a single IMAGE batch - send it into a Video Combine node (VideoHelperSuite) to write the file.

Installing it

It comes with the whole ComfyUI Frame Interpolation pack:

  • ComfyUI Manager - search ComfyUI Frame Interpolation, install, restart.
  • Manual - cd ComfyUI/custom_nodes && git clone https://github.com/Fannovel16/ComfyUI-Frame-Interpolation, then python install.py (Linux, in your ComfyUI venv) or install.bat (Windows). Restart.

The M2M.pth checkpoint downloads on first use.

Common issues

Splatting-based methods like M2M can leave small holes or soft edges where pixels get pushed away and nothing fills in behind them - most visible around fast-moving object boundaries. If you see that and it bugs you, a flow-and-refine model like FILM or AMT will usually clean it up at the cost of speed. Pick your tradeoff.

The pack-wide gotchas apply: the cupy backend is the install pain point, so run install.bat on Windows, not install.py. And a genuinely common complaint with this pack's interpolation nodes is the GPU sitting idle while the CPU grinds - that's the backend having failed to initialize on the GPU. Verify cupy installed against your actual CUDA version before assuming the node is slow by nature. On a non-NVIDIA machine you can try the taichi backend (pip install taichi, set ops_backend: taichi in config.yaml), accepting a possible NotImplementedError on unsupported nodes.

CategoryComfyUI-Frame-Interpolation/VFI

Inputs (5)

NameTypeDefaultDescription
ckpt_nameCOMBO1 options: M2M.pth
framesIMAGE
clear_cache_after_n_framesINT101–1000
multiplierINT22–1000
optional_interpolation_statesoptINTERPOLATION_STATES

Outputs (1)

NameTypeDescription
IMAGEIMAGE