Motion Blur Vector
The name oversells it, the result is still worth it
- video
- video
- output_path
- summary
The "makes AI video look real" cheat, packaged
One of the most repeated pieces of wisdom in the video side of this hobby: AI video looks fake because it has no motion blur, and adding it is one of the cheapest realism wins you can make. MKRMotionBlurVector is the pack's answer to that - a one-node temporal motion blur you drop on a clip and forget about.
It's part of MKRShift_Nodes, the big utility pack by Cris K B. Pure numpy + Pillow, no optical flow, no models, no API.
The name is a lie, and that's fine
"Vector" suggests real vector-based motion blur - the kind where you compute per-pixel motion from optical flow and smear along it. That's not what this does. What it actually does is temporal frame averaging: for each frame, it averages the frames around it (a window of shutter_frames, default 5) and blends the result back over the original by strength. Moving areas streak because they're shifted between frames; static areas barely change and stay crisp. It's a cheap, effective approximation - the kind of motion blur you can actually afford on a whole clip, versus the optical-flow version that's slow and can smear into mush.
Being honest about the difference matters because it predicts the failure modes: fast, high-contrast motion can ghost or double-image, and it won't produce directional streaking that matches a real camera's shutter. But for fixing that "too clean, too synthetic" look, it's exactly the right tool, and the KB's own corpus has a compositor saying motion blur is the missing piece that makes AI video read as captured. This is that missing piece as a node.
The inputs
video- the input (packMKR_VIDEOtype or anything resolvable to a file).shutter_frames(default 5, odd values from 1–31) - the averaging window; think "shutter angle". 5 is a gentle blur, 15+ is heavy streak.strength(default 1.0) - how much of the averaged result replaces the original. 0 = no change.direction-centered(past + future),forward(only later frames), orbackward(only earlier frames).centeredis what you want 99% of the time; the others are for stylized trails.fallback_fps(24),output_format(auto/gif/webp/mp4/mov/webm),filename_prefix,subfolder,overwrite, optionalfilename_label- the standard pack save controls.
Outputs and install
video (MKR_VIDEO), output_path (the encoded file), and a summary JSON with the settings.
cd ComfyUI/custom_nodes
git clone https://github.com/criskb/MKRShift_Nodes
Restart, or install "MKRShift Nodes" via ComfyUI Manager. No pip deps, no models. ffmpeg required for encoding.
The classic mistake is cranking shutter_frames to the max and getting soup. Start at 5, nudge strength instead, and remember the AI-video-realism stack is motion blur + grain + a bit of vignetting - this node does the first one, and it does it without a single extra wheel installed.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| video | * | — | |
| shutter_frames | INT | 51–31 | — |
| strength | FLOAT | 1.000–2 | — |
| direction | COMBO | centered | 3 options: centered, forward, backward |
| fallback_fps | FLOAT | 24.01–240 | — |
| output_format | COMBO | auto | 6 options: auto, gif, webp, mp4, mov, webm |
| filename_prefix | STRING | MKR_motion_blur | — |
| subfolder | STRING | — | |
| overwrite | BOOLEAN | false | — |
| filename_labelopt | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| video | MKR_VIDEO | — |
| output_path | STRING | — |
| summary | STRING | — |