Interpolate Frames
Crossfade Between Two Images
- begin_image
- end_image
- frames
So you want to turn a keyframe A and a keyframe B into a smooth sequence of frames. Interpolate Frames is the node that does it - but let's be clear about what it is and isn't. It's linear crossfading: each frame is a weighted blend of the start and end images. It is not motion-aware interpolation like RIFE or frame-generation like what you'd feed an actual video model. If your goal is a gentle transition for an img2img sequence or a rough tween to preview timing, this is perfect. If you expected "real" intermediate frames with moving subject matter, you'll be disappointed. Knowing which one you want is the whole review.
How it works
frame_count- how many in-between frames to generate, default 10. These are between the endpoints, so with endpoints included you getframe_count + 2frames total.include_begin/include_end- whether to prepend/append the original start/end images. Both default on.begin_image/end_image- the two keyframes. Both are optional, but at least one must be provided or the node raises an error. If only one is given, the missing side becomes a black image.
The math is the simplest possible interpolation: frame i is (1 - alpha) * begin + alpha * end, where alpha = i / (frame_count + 1). Frames are evenly spaced, each is a straight pixel blend, and the result is a single IMAGE batch in order (begin, tween frames..., end).
The real constraints are structural: both images must be the same dimensions (different sizes raise an error), and only the first image is used if you hand in a batch instead of a single image. The error on mismatched sizes is at least a loud one - no silent squashing - but you'll hit it the first time you interpolate between a portrait and a landscape crop.
Where you'd actually use it
- Keyframe tweens: build a starting sequence of frames for an img2img video workflow from two stills.
- Transitions: a crossfade between two images that you then run through a video or animation pipeline.
- Preview: eyeball timing/ordering before committing to a heavier process.
Installing it
Part of ComfyUI-TinyBee under 🐝TinyBee/Video:
- ComfyUI Manager → Install Custom Nodes → search "ComfyUI-TinyBee" → Install, then restart ComfyUI.
cd ComfyUI/custom_nodes
git clone https://github.com/TinyBeeman/ComfyUI-TinyBee
Restart. No models, and the work is tensor arithmetic (torch), which ComfyUI already has.
Gotchas
Set expectations and you're fine. This is a blend, not motion interpolation - moving subjects will ghost/dissolve rather than move. For genuine intermediate frames you want a dedicated motion-interpolation pack (RIFE-style) or an I2V model; use this node when a fade is what you actually want. Also remember the size-mismatch error and the "one endpoint only" black-fill behavior. And since frame_count counts in-between frames, a frame_count of 0 with both endpoints included gives you just the two keyframes back - useful as a passthrough, mildly confusing if you expected a single frame.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| frame_count | INT | 100–1000 | — |
| include_begin | BOOLEAN | true | — |
| include_end | BOOLEAN | true | — |
| begin_imageopt | IMAGE | — | |
| end_imageopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| frames | IMAGE | — |