FL Animated Shape Patterns
Six algorithms for generative motion loops
- image
- mask
FL Animated Shape Patterns is a batch-of-frames generator: pick a pattern algorithm, a shape, and some motion parameters, and it spits out an animated sequence of that shape moving around the frame - no diffusion model involved. It's a background-loop and motion-graphics node, not an AI node, and it lives in Fill-Nodes' "Work-in-Progress" bucket, which in this pack just means "shipped and functional, but the author isn't promising the interface won't change." Treat it as stable enough to use, not stable enough to build a pipeline you can't tolerate breaking.
How it works
Six pattern algorithms, chosen via pattern_type: grid_wave and grid_ripple arrange shapes in a grid and animate a wave or ripple through the positions; circle_array and orbital put shapes on a ring and rotate/orbit them; spiral walks shapes outward (or inward) along a spiral path; lissajous drives position with the classic Lissajous curve - two out-of-phase sine waves - which is the one that looks most like an oscilloscope pattern. All six are pure math, no seed-dependent diffusion, so the same settings always give the same output.
Every algorithm shares the same speed, amplitude, and frequency controls, so switching pattern_type doesn't mean relearning the knobs - you can A/B all six against the same motion settings.
The inputs and outputs that matter
You'll set: pattern_type (the algorithm), shape (circle/square/triangle/hexagon/star), count (how many shape instances, up to 100), frame_count (up to 500), and frame_width/frame_height. shape_color and bg_color take plain color strings. The motion feel comes from speed, amplitude, and frequency - bump amplitude for bigger swings, frequency for more cycles across the clip.
Worth knowing in the optional block: trail_length (0–1) leaves a fading trail behind each shape instead of a hard cut, blur_radius softens edges, rotation spins every instance, and size_variation/phase_offset add per-instance randomness so a grid of shapes doesn't move in perfect lockstep - bump size_variation if a uniform grid of identical circles looks too sterile.
It outputs both image (the frame batch) and mask (a matching alpha mask of just the shapes). The mask is the useful bit if you want to composite these shapes onto other footage, or feed a moving-region mask into a video model's conditioning instead of using the raw frames as final output.
How to install it
ComfyUI Manager: search ComfyUI_Fill-Nodes (or "Fill-Nodes"), install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/filliptm/ComfyUI_Fill-Nodes
then restart ComfyUI. This node itself only needs PIL and numpy, both already in any ComfyUI install - no models, no extra pip steps specific to it. The catch with Fill-Nodes as a whole: it's a huge pack that also wires in OpenAI, Gemini, Fal.ai, Google Cloud, and Hugging Face integrations, so at startup ComfyUI's log prints a long list of optional-dependency notices for API nodes you'll probably never touch. That's normal noise, not a broken install - people have gotten spooked by exactly that kind of startup wall of text before, assuming something was wrong when the pack was just being upfront about everything it can do.
Common issues & troubleshooting
Output looks like a strobing mess. Usually frequency set too high relative to frame_count - you're cramming more oscillations into the clip than the frame count can resolve smoothly. Drop frequency or raise frame_count.
All shapes move identically and it reads as robotic. Add phase_offset and/or size_variation so instances desync - at defaults (both 0) every shape is perfectly synchronized, which looks very "generated."
Huge frame counts are slow. 500 frames at 4096×4096 is a lot of per-frame PIL drawing done on CPU - there's no GPU acceleration here. Keep dimensions and frame count modest while dialing in the pattern, then scale up once you like the motion.
Inputs (21)
| Name | Type | Default | Description |
|---|---|---|---|
| pattern_type | COMBO | grid_wave | 6 options: grid_wave, grid_ripple, circle_array, orbital, spiral, lissajous |
| frame_count | INT | 301–500 | — |
| frame_width | INT | 51264–4096 | — |
| frame_height | INT | 51264–4096 | — |
| shape | COMBO | circle | 5 options: circle, square, triangle, hexagon, star |
| shape_size | INT | 202–500 | — |
| shape_color | STRING | white | — |
| bg_color | STRING | black | — |
| count | INT | 101–100 | — |
| speed | FLOAT | 1.00.1–10 | — |
| amplitude | FLOAT | 500–500 | — |
| frequency | FLOAT | 1.00.1–10 | — |
| blur_radiusopt | FLOAT | 0.00–50 | — |
| trail_lengthopt | FLOAT | 0.000–1 | — |
| size_variationopt | FLOAT | 0.000–1 | — |
| rotationopt | FLOAT | 0-360–360 | — |
| phase_offsetopt | FLOAT | 0.00–6.28 | — |
| intensityopt | FLOAT | 1.000.01–10 | — |
| border_widthopt | INT | 00–20 | — |
| border_coloropt | STRING | white | — |
| seedopt | INT | 00–18446744073709550000 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| mask | MASK | — |