Nodes/ComfyUI_Fill-Nodes/FL Infinite Zoom
ComfyUI Node

FL Infinite Zoom

The recursive droste zoom effect as a node

By filliptm·Created 3 years ago·Updated about 19 hours ago· 628
FL Infinite Zoom
  • images
  • mask
  • IMAGE
envelope_json
blend_intensity1.00
invertfalse
scale2.00
mirror
mirror_warp1.00
iterations10
speed1.0
fps30

That hypnotic effect where an image zooms endlessly into itself - you fall into the picture and it keeps revealing more of the same picture, forever - is a "droste" or infinite-zoom effect, and FL_InfiniteZoom generates it from a batch of images. Feed it frames, and it produces an animation that recursively zooms, with optional mirroring and swirl to make the repetition trippier. It's a pure visual-effect node, the kind of thing you reach for to make a music-video loop or a background ident, not part of a generation pipeline.

It's driven by OpenGL shaders under the hood, which matters for one practical reason we'll get to. Mechanically, it takes your input, scales and re-composites it into itself over a set number of iterations, and blends the layers so the seams between "levels" of the zoom are smooth rather than jarring.

The inputs that matter

You feed it images and get an IMAGE batch (the animation frames) out. Everything else is optional tuning:

  • scale (1.1–10, default 2) - how aggressive each zoom step is. Higher = you plunge in faster.
  • iterations (1–100, default 10) - how many recursive levels deep it goes. More levels, longer/deeper zoom.
  • speed (0.1–10, default 1) - animation speed.
  • fps (default 30) - frame rate of the output.
  • mirror (on/off) and mirror_warp - mirror the recursion for a kaleidoscope feel; the warp bends it.
  • blend_intensity (0–2, default 1) - how strongly the layers blend together.
  • invert, plus optional mask and envelope_json - the mask and envelope let you drive the effect from another source (an audio envelope, say), which is how you'd sync the zoom to a beat.

The two you'll actually play with first are scale and iterations. Start there, get the depth and pace right, then reach for mirror and blend.

Installing it

Part of ComfyUI_Fill-Nodes. ComfyUI Manager: search Fill-Nodes, install, restart. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/filliptm/ComfyUI_Fill-Nodes

then restart ComfyUI.

The gotcha nobody warns you about: headless servers

Here's the one that'll bite you. This node renders with OpenGL via GLFW, which needs a graphics context - normally provided by a display. On a normal desktop with a monitor, no problem. But on a headless cloud GPU box (no display attached, which is most rented ComfyUI), GLFW can fail to create a context and the node errors out with something about a window or display it can't open. This is a well-known class of problem with any OpenGL-shader ComfyUI node (the pack's FL_PaperDrawn and FL_Shadertoy are in the same boat). If you hit it on a server, the fix is environment-level - a virtual framebuffer (xvfb) or an EGL/offscreen GL setup - not a node setting. On your own machine with a screen, it just runs. So: gorgeous effect, but know that "works on my desktop, breaks on my cloud instance" is the expected failure, not a bug in your graph.

Category🏵️Fill Nodes/VFX

Inputs (11)

NameTypeDefaultDescription
imagesIMAGE
envelope_jsonoptSTRING
blend_intensityoptFLOAT1.000–2
invertoptBOOLEANfalse
maskoptIMAGE
scaleoptFLOAT2.001.1–10
mirroroptCOMBO2 options: on, off
mirror_warpoptFLOAT1.000.5–1.5
iterationsoptINT101–100
speedoptFLOAT1.00.1–10
fpsoptINT301–120

Outputs (1)

NameTypeDescription
IMAGEIMAGE