Smooth Video
FastBlend's frame-by-frame deflicker, ported into ComfyUI
- orginalframe
- keyframe
- IMAGE
If your video2video output flickers - texture crawling frame to frame even though the motion itself looks fine - SmoothVideo is the node built to fix exactly that. It's the flagship node of ComfyUI-fastblend, a small pack by AInseven, and it isn't a neural network at all. It's a patch-matching algorithm: no model to download, no checkpoint to pick, just math running frame against frame. The author didn't invent it either, and says so plainly in the README - the core code is lifted from Artiprocher's sd-webui-fastblend, the original A1111 extension; this pack just makes it run inside ComfyUI.
How it works
FastBlend treats your "original" sequence (the raw, temporally-stable frames) as a motion guide and your "key" sequence (the stylized, per-frame-edited output that flickers) as the thing to be smoothed. For every frame it searches nearby frames within a temporal window for matching patches and blends them in, nudging each frame toward consistency with its neighbors rather than a purely local diffusion-driven guess. SmoothVideo does this densely - every single frame gets rendered - which is the difference from its sibling, InterpolateKeyFrame, which only processes a subset and interpolates the rest.
The inputs and outputs that matter
Two image inputs and five algorithm knobs, all pulled straight from the README's own descriptions:
orginalframeandkeyframe(both IMAGE) - the motion-source sequence and the stylized sequence you want smoothed, respectively. Note the README's own typo carries into the widget name.accuracy(1–3, default 1) - "larger is better, 1 is enough for most situations." Leave it unless you have a specific reason to push it.window_size(default 15) - how far in time the blend looks; the author's plain description is "how smooth the video."minimum_patch_size(default 5, step 2) - must stay odd, the README flags this explicitly as important; larger is generally better but costs more.num_iter(default 5) - more iterations, better result, more time.guide_weight(default 10) - how strongly the motion fromorginalframegets imposed onkeyframe.batch_size(default 16) - bigger batches run faster but eat VRAM.tracking_window_size- present in the schema but not explained anywhere in the README; treat it as an advanced knob and leave it at 0 unless you're deliberately experimenting.
Output is a single IMAGE batch - wire it straight into a Save Image or a Video Combine node.
The author also gives you the actual cost formula, which is worth internalizing before you crank everything to max: log(window_size) × minimum_patch_size² × num_iter × video_length × video_resolution. Every one of those knobs is a multiplier, not an addition - doubling minimum_patch_size roughly quadruples the work.
How to install it
Easiest path is ComfyUI Manager: search "ComfyUI-fastblend," install, restart. Manually, it's the standard drop-in:
cd ComfyUI/custom_nodes
git clone https://github.com/AInseven/ComfyUI-fastblend
then restart ComfyUI. There's nothing to download beyond the code itself - no model weights, because this isn't a model.
Common issues & troubleshooting
It doesn't fix everything. This isn't a universally-loved tool. On r/StableDiffusion someone asked for free alternatives to the underlying sd-webui-fastblend algorithm and reported flatly that they'd tried it and "it doesn't produce good results." Patch-matching works well on slow, steady motion and struggles more on fast or chaotic movement - go in expecting a solid deflicker on the easy cases, not a miracle on the hard ones.
It's slow or runs out of VRAM on a full clip. That's the cost formula biting you. Drop batch_size, or better, use the pack's own reBatchImage node first to chunk a long clip into VRAM-sized pieces before it hits SmoothVideo.
Output looks smeared or over-blended. guide_weight too high relative to how much you actually want the original motion imposed - pull it down before touching anything else.
minimum_patch_size errors or looks wrong. It has to be odd - the README calls this out by name as the one parameter people get bitten by.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| orginalframe | IMAGE | — | |
| keyframe | IMAGE | — | |
| accuracy | INT | 11–3 | — |
| window_size | INT | 151–100 | — |
| batch_size | INT | 161–100 | — |
| tracking_window_size | INT | 00–100 | — |
| minimum_patch_size | INT | 50–100 | — |
| num_iter | INT | 50–100 | — |
| guide_weight | FLOAT | 10.01–100 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |