MX_LensZoomBurst
The zoom-kick effect, rendered one frame at a time
- images
- IMAGE
LensZoomBurst is the pack's "zoom kick" node - the effect you get when you change focal length mid-exposure, so the frame streaks outward from a center point like light trails. It's a one-stop cinematic effect: feed it an image, pick a zoom center, and it builds the burst for you.
It's part of Intersection98/ComfyUI-MX-post-processing-nodes, and it sits alongside MX_LensBokeh and MX_LensOpticAxis in the pack's postprocessing/lens category. It's the compute-heavy one: the effect is simulated by literally stacking many slightly-scaled copies of the image, so the samples input trades quality against time.
How it works
The node iteratively re-scales the image toward (or away from) your chosen position_x/position_y center, samples times, averaging each new scaled copy into the running result. Each iteration pushes the scale by a fraction of the total (scale - 1 divided by samples), so you're building up the streak gradually rather than in one jump. Two method options control how the scaling falls off across the frame:
circle- falloff is based on distance from the zoom center, so the burst is stronger near the edges of the frame.point- a uniform point-perspective scaling, more like the whole image rushing away from the center.
rotation adds a twist of rotation per iteration for a spiral/zoom hybrid. And stabilization (true/false) changes the math: stabilized mode averages pairs of opposing scaled copies (up and down), which reduces ghosting artifacts at the cost of doing two warps per sample. The end result is that classic radial streak centered on your chosen point.
The inputs that matter
images- your IMAGE tensor.position_x/position_y-0to1, default0.5(dead center). The zoom center; put it on the subject, not the background, or the streaks will look wrong.scale-1and up, default1.5. Total zoom range of the burst. Must be ≥ 1.0 - the node throws aValueErrorif it isn't.samples-1and up, default100. Number of stacked frames. More = smoother streaks, linearly more compute. Drop it to30–50for a quick preview, crank it for final.rotation-0–360degrees of total twist across the burst.method-circleorpoint.stabilization-trueorfalse.
Output is a single IMAGE.
Install
Standard MX pack install. ComfyUI Manager (search MX or ComfyUI-MX-post-processing-nodes), or:
cd ComfyUI/custom_nodes
git clone https://github.com/Intersection98/ComfyUI_MX_post_processing-nodes
cd ComfyUI_MX_post_processing-nodes
pip install -r requirements.txt
Restart ComfyUI; it's under postprocessing/lens. No models - it's pure OpenCV remap/warpAffine, using the pack's opencv-python dependency.
Where people get burned
Patience: at the default 100 samples on a large image this node is not fast, and it runs on every re-queue. Dial samples way down while you find the composition, then raise it for the final render. Second, the scale >= 1 rule is strict - a value like 0.99 (which feels like "zoom out") throws an error rather than inverting. And the border behavior deserves a mention: with stabilization off, edges can smear toward the center oddly; if you see edge artifacts, flip stabilization to true and re-run. For a beginner, start centered at 0.5/0.5, scale 1.3, samples 40, method circle - that's a recognizable "street photography zoom burst" before you touch anything else.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| scale | FLOAT | 1.50 | — |
| samples | INT | 100 | — |
| position_x | FLOAT | 0.50 | — |
| position_y | FLOAT | 0.50 | — |
| rotation | FLOAT | 0.000–360 | — |
| method | COMBO | 2 options: circle, point | |
| stabilization | COMBO | 2 options: true, false |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |