Nodes/RyanOnTheInside/Flex Image Kaleidoscope βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
ComfyUI Node

Flex Image Kaleidoscope βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜

Mirror-symmetry effect that can move to the beat

By ryanontheinsideΒ·Created 2 years agoΒ·Updated 5 months agoΒ· 852
Flex Image Kaleidoscope βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
  • images
  • opt_feature
  • IMAGE
β—„strength1.00β–Ί
β—„feature_threshold0.00β–Ί
β—„feature_paramβ–Ύβ–Ί
β—„feature_moderelativeβ–Ί
β—„segments8β–Ί
β—„center_x0.50β–Ί
β—„center_y0.50β–Ί
β—„zoom1.0β–Ί
β—„rotation0β–Ί
β—„precession0.00β–Ί
β—„speed1.0β–Ί

This is exactly what it sounds like - a kaleidoscope mirror effect for an image or video sequence, with the classic knobs (segments, zoom, rotation) plus the thing that makes it a RyanOnTheInside node rather than a generic filter: any of those knobs can be driven by an audio or motion signal instead of sitting still. Feed it a music-video frame sequence and an audio feature, and the pattern can pulse, spin, or zoom with the track.

It's part of the pack's "Flex" family - the shared design where nodes expose a strength/feature_threshold/feature_param/feature_mode set on top of their own effect-specific parameters, so you learn the pattern once and it applies across dozens of nodes in this pack.

How it works

You give it an image sequence, it mirrors and rotates around a center point to build the kaleidoscope pattern, and it renders one frame per input frame. Everything about the pattern's geometry - how many mirror segments, where it's centered, how fast it spins - is a plain parameter you can set once, or hand off to feature_param for per-frame modulation.

The inputs and outputs that matter

  • images (IMAGE, required) - your input sequence.
  • segments (default 8, range 2–32) - number of mirror segments; more segments means a busier, more fractured pattern.
  • center_x / center_y (default 0.5/0.5) - where the kaleidoscope's origin sits, as a fraction of the frame.
  • zoom (default 1, 0.1–2) and rotation (default 0, 0–360Β°) - the obvious ones.
  • precession (default 0, -1 to 1) and speed (default 1, 0.1–5) - these two are about motion over time: precession is how fast the rotation angle itself drifts, speed scales the overall animation rate.
  • feature_param (segments / zoom / rotation / precession / speed / None) - pick exactly one of the geometry parameters above to let a reactive FEATURE signal modulate. This is the field that decides what "reacts."
  • feature_mode (relative / absolute) - relative modulation centers changes around your set value; absolute scales from zero to the parameter's max.
  • strength, feature_threshold, opt_feature - the standard Flex trio: overall modulation intensity, a minimum feature value gate, and the reactive signal itself (audio, motion, color, or whatever else you've built a feature extractor for elsewhere in the pack).
  • Output - a single IMAGE sequence.

How to install it

Via ComfyUI Manager: search "RyanOnTheInside," install, restart. Manual install:

cd ComfyUI/custom_nodes
git clone https://github.com/ryanontheinside/ComfyUI_RyanOnTheInside.git
cd ComfyUI_RyanOnTheInside
pip install -r requirements.txt

then restart ComfyUI. Pure image-processing node - no model downloads involved.

Common issues & troubleshooting

Pattern looks identical to a static kaleidoscope even with a feature wired in. feature_param defaults matter here - it only modulates the one parameter you select, and it's easy to leave it on None after wiring opt_feature in, which silently disables the reactive part entirely.

Effect is too subtle or too violent to be usable. Start with strength before touching anything else - it's the master intensity dial for the whole modulation, separate from the base geometry values.

Center of the effect drifts off-frame with certain zoom/precession combos. center_x/center_y don't automatically compensate for extreme zoom or fast precession - if the pattern's focal point wanders somewhere ugly, it's worth re-centering manually rather than assuming a bug, since this is an aesthetic effect node with real interacting parameters, not a physically-constrained system.

This pairs naturally with an audio feature extractor elsewhere in this same pack, since the whole point of the Flex system is chaining a Feature node into effect nodes like this one - if you don't already have a feature source in your graph, that's the piece to add before this node will do anything beyond a static kaleidoscope.

CategoryRyanOnTheInside/FlexFeatures/Targets/Images

Inputs (13)

NameTypeDefaultDescription
strengthFLOAT1.000–1Overall strength of the effect (0.0 to 1.0) Higher values create more dramatic changes, while lower values are more subtle.
feature_thresholdFLOAT0.000–1Minimum feature value to trigger the effect (0.0 to 1.0) Only applies the effect when the feature value exceeds this threshold. Lower values make the effect more sensitive, higher values make it more selective.
feature_paramCOMBOChoose which parameter to modulate: - segments: Dynamically adjust number of mirror segments - zoom: Dynamically adjust magnification - rotation: Dynamically adjust pattern rotation - precession: Dynamically adjust rotation speed - speed: Dynamically adjust animation speed - None: No parameter modulation
feature_modeCOMBOrelativeHow to apply the feature modulation: - relative: Changes are centered around the original value - absolute: Changes scale directly from zero to the maximum
imagesIMAGEInput image sequence to be processed (IMAGE type)
segmentsINT82–32Number of mirror segments (2 to 32)
center_xFLOAT0.500–1X-coordinate of the effect center (0.0 to 1.0)
center_yFLOAT0.500–1Y-coordinate of the effect center (0.0 to 1.0)
zoomFLOAT1.00.1–2Zoom factor for the effect (0.1 to 2.0)
rotationFLOAT00–360Rotation angle of the effect (0.0 to 360.0)
precessionFLOAT0.00-1–1Rate of rotation change over time (-1.0 to 1.0)
speedFLOAT1.00.1–5Speed of the effect animation (0.1 to 5.0)
opt_featureoptFEATUREOptional feature input for modulation Connect any feature node here to control the effect. Features can come from audio, motion, color, or other sources.

Outputs (1)

NameTypeDescription
IMAGEIMAGEβ€”