Nodes/DJZ-Nodes/Motion Blending
ComfyUI Node

Motion Blending

Make a batch of frames feel like motion, without any motion vectors

By MushroomFleet·Created 2 years ago·Updated 5 months ago· 78
Motion Blending
  • images
  • IMAGE
mode
style
intensity0.50
angle0
kernel_size15
frames_to_blend2
decay_factor0.50

MotionBlending is the node that fakes the look of motion in a still, or adds temporal smear to a sequence of frames - the "something moved and the camera kept the shutter open" effect. It's from the image-effects shelf of DJZ-Nodes, and if your workflow produces a batch of frames you want to feel less like a slideshow and more like footage, this is the cheap, fast way to get there.

There's an important honesty note up front: this is simulated motion. It builds a directional blur kernel and smears frames with it; it is not optical-flow motion blur, and it doesn't analyze where things actually moved. For stylized smear, action-line drama, or that slightly dreamy "long exposure" vibe, that's exactly what you want. If you need physically-correct motion blur on a moving subject, you're looking at a flow-based tool, not this.

How it works

Two modes, two styles, and they combine:

  • mode = Motion Blur - blurs each frame with a directional kernel. Simulated Shutter builds a line-shaped kernel at your angle and runs it through OpenCV's filter2D; the intensity stretches the blur length. Temporal Blend instead smears copies of the frame horizontally with np.roll, fading each copy by decay_factor - closer to what a slow shutter on a fast pan looks like.
  • mode = Frame Blending - the smear direction. With Simulated Shutter it chains the motion blur then the temporal blend; with Temporal Blend it just blends harder. Pick this when you're feeding it actual consecutive frames and want them to run together.

So the two controls that shape everything: angle (degrees, −180 to 180 - where the motion points) and kernel_size (3–99, how fat the smear is). Then frames_to_blend (2–10) and decay_factor (0–1) govern how many ghosts stack up and how fast they fade.

The inputs that matter

  • mode - Motion Blur (per-frame smear) vs Frame Blending (motion feel across a sequence).
  • style - Simulated Shutter vs Temporal Blend, as above.
  • angle - direction of the blur. 0 is horizontal, 90 is vertical. This is the one beginners forget, and the effect looks wrong until you set it.
  • kernel_size - 15 is a decent starting blur; go higher for drama.
  • intensity - overall strength, 0–1.
  • frames_to_blend / decay_factor - the "how many ghosts / how fast they fade" pair.

Output: a single IMAGE the same size as your input batch, ready for a VHS effect, a Save node, or straight into video encoding.

Installing it

It's a DJZ-Nodes pack node (the MushroomFleet pack by Drift Johnson). ComfyUI Manager → Install Custom Nodes → search DJZ-Nodes → install → restart, or:

cd ComfyUI/custom_nodes
git clone https://github.com/MushroomFleet/DJZ-Nodes
cd DJZ-Nodes
pip install -r requirements.txt

It needs OpenCV (opencv-python), which is in the pack's requirements - the standard install handles it. If you ever see an import error around cv2, that's the dependency that didn't finish.

Common issues

The classic mistake is leaving angle at 0 and wondering why everything looks like a horizontal smear regardless of the actual motion. Set the angle to match your content and it reads immediately. Also keep intensity modest: combined with a big kernel_size, high intensity turns frames into a gray streak. And a fair warning about the temporal blend: because it rolls pixels horizontally, it can warp text and hard edges - fine for abstract/glitch vibes, wrong for footage with readable signage. Test on a few frames before committing to a long batch.

Categoryimage/effects

Inputs (8)

NameTypeDefaultDescription
imagesIMAGE
modeCOMBO2 options: Motion Blur, Frame Blending
styleCOMBO2 options: Simulated Shutter, Temporal Blend
intensityFLOAT0.500–1
angleFLOAT0-180–180
kernel_sizeINT153–99
frames_to_blendINT22–10
decay_factorFLOAT0.500–1

Outputs (1)

NameTypeDescription
IMAGEIMAGE