Sepconv VFI
The kernel-based old-timer of frame interpolation
- frames
- optional_interpolation_states
- IMAGE
Sepconv is one of the elder statesmen of the ComfyUI Frame Interpolation pack - a kernel-based method whose original paper dates to 2017. It doesn't estimate optical flow at all; it learns adaptive convolution kernels instead. It's not the sharpest tool in the pack for fast, complex motion anymore, but it's simple, dependable, and a reasonable baseline when the newer models are being finicky.
Frame interpolation, in short: 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 AnimateDiff or Wan, then interpolate up to a watchable frame rate rather than paying to diffuse every real frame. Sepconv is one way to do that last step.
How it works
Sepconv - from Niklaus et al.'s work on "Adaptive Separable Convolution" (ICCV 2017, revisited WACV 2021) - treats interpolation as a local filtering problem rather than a motion problem. For each output pixel it estimates a pair of 1D (separable) convolution kernels and applies them to the input frames to produce the in-between. Because the kernels are spatially adaptive, they implicitly capture small motion and blur. The catch is that a kernel has a finite size, so motion larger than the kernel's reach can't be represented well - which is the fundamental reason flow-based successors like FILM handle big displacement better. You don't tune any of this; you just load the weights.
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,
sepconv.pth, which downloads automatically on first run. - multiplier (INT, default 2) - output frames per gap. 2 doubles the count, 4 quadruples it. Sepconv is happiest at 2x on gentle motion.
- 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.
Output is a single IMAGE batch - pipe it into a Video Combine node (VideoHelperSuite) to encode.
Installing it
It ships in 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, thenpython install.py(Linux, in your ComfyUI venv) orinstall.bat(Windows). Restart.
The sepconv.pth checkpoint downloads on first use.
Common issues
The honest limitation is motion range. Because Sepconv works with finite-size kernels, big jumps between frames come out soft or slightly doubled - the model literally can't reach that far. If your source has fast motion and Sepconv smears it, that's the design, not a bug; move to FILM (built for large motion) or AMT for a crisper result. For slow, smooth footage it does a perfectly clean job.
The pack-wide install stuff applies: cupy is the dependency that most often breaks setups, so run install.bat on Windows rather than install.py. If the GPU sits idle while interpolation crawls, the backend fell back to CPU - verify cupy installed against your CUDA version. On non-NVIDIA hardware, the experimental taichi backend (pip install taichi, set ops_backend: taichi in config.yaml) is worth trying, keeping in mind not every node supports it.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| ckpt_name | COMBO | 1 options: sepconv.pth | |
| frames | IMAGE | — | |
| clear_cache_after_n_frames | INT | 101–1000 | — |
| multiplier | INT | 22–1000 | — |
| optional_interpolation_statesopt | INTERPOLATION_STATES | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |