FL Infinite Zoom
The recursive droste zoom effect as a node
- images
- mask
- IMAGE
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) andmirror_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 optionalmaskandenvelope_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.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| envelope_jsonopt | STRING | — | |
| blend_intensityopt | FLOAT | 1.000–2 | — |
| invertopt | BOOLEAN | false | — |
| maskopt | IMAGE | — | |
| scaleopt | FLOAT | 2.001.1–10 | — |
| mirroropt | COMBO | 2 options: on, off | |
| mirror_warpopt | FLOAT | 1.000.5–1.5 | — |
| iterationsopt | INT | 101–100 | — |
| speedopt | FLOAT | 1.00.1–10 | — |
| fpsopt | INT | 301–120 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |