FL FILM Frame Interpolation
FL_FILM — Google's FILM frame interpolation for smooth, large-motion in-betweens
- images
- IMAGE
You generated a video clip. It's choppy - maybe 16fps out of Wan, maybe a batch of stills you want to turn into motion - and you want it smooth. FL_FILM invents the in-between frames for you. Give it a sequence and a multiplier, and it synthesizes new frames between each pair of existing ones, so a jerky clip becomes a fluid one and your effective frame rate goes up.
It wraps FILM (Frame Interpolation for Large Motion), Google Research's interpolation model. The "large motion" part is the reason to care: plenty of interpolators fall apart when a lot moves between two frames - an arm swinging, a fast camera pan - and produce ghosting or torn edges. FILM was built specifically for that case, which makes it the one to reach for when the gaps between your frames are big. It's a standard, well-worn step in the local video pipeline: generate at a low frame count to save compute, then interpolate up to something watchable.
How it works
Frame interpolation estimates the motion between two real frames and warps pixels along that motion to construct plausible frames in the middle. FILM does this with a learned, timestep-based model, so you're not just cross-dissolving - it actually moves objects along their trajectory. Set multiplier to 2 and it puts one new frame between every existing pair (doubling the count); set it to 4 and it fills three; and so on up to 10x.
One practical note: it downloads a TorchScript model from HuggingFace on first use. So the very first run needs internet and a moment to fetch weights; after that it's cached locally.
The inputs and outputs
There are only two inputs, which is refreshing:
images- your frame sequence as an image batch.multiplier(2–10) - how many times to multiply the frame count. 2 doubles it, and honestly 2–4 covers almost everything.
Output is a single IMAGE batch with the extra frames woven in - feed it straight to a video-combine/save node. Remember your playback frame rate has effectively multiplied too, so either bump the output fps to keep the same duration, or keep the fps and enjoy a slow-motion version.
How to install it
FL_FILM ships in filliptm's Fill-Nodes pack. ComfyUI Manager → search ComfyUI_Fill-Nodes → Install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/filliptm/ComfyUI_Fill-Nodes
pip install -r ComfyUI_Fill-Nodes/requirements.txt
The FILM weights aren't bundled - they're pulled from HuggingFace automatically the first time you run the node.
Common issues & troubleshooting
First run hangs or errors on the download. That's the model fetch. It needs HuggingFace reachable; on a locked-down or offline box the first run will fail until the weights are cached. Let it complete once with a connection.
Ghosting on very fast motion. FILM handles large motion better than most, but there's a limit - if two adjacent frames barely overlap (a hard cut, a whip pan), no interpolator can honestly bridge them and you'll see artifacts. Interpolate within continuous shots, not across cuts.
It adds frames, not detail. Interpolation smooths motion; it doesn't sharpen or upscale. If you want both, interpolate and upscale as separate passes. In a typical Wan pipeline the order people land on is generate low → interpolate (FILM or RIFE) → upscale.
FILM vs RIFE. The pack also ships FL_RIFE. RIFE is faster and near real-time; FILM is heavier but stronger on big motion gaps. If RIFE is ghosting, try FILM; if FILM is too slow for a long clip, try RIFE.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| multiplier | INT | 22–10 | Number of frames to generate between each pair (2 = 2x frames) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |