Flex Image Kaleidoscope β‘π ‘π π £π
Mirror-symmetry effect that can move to the beat
- images
- opt_feature
- IMAGE
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) androtation(default 0, 0β360Β°) - the obvious ones.precession(default 0, -1 to 1) andspeed(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 reactiveFEATUREsignal 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
IMAGEsequence.
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.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| strength | FLOAT | 1.000β1 | Overall strength of the effect (0.0 to 1.0) Higher values create more dramatic changes, while lower values are more subtle. |
| feature_threshold | FLOAT | 0.000β1 | Minimum 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_param | COMBO | Choose 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_mode | COMBO | relative | How to apply the feature modulation: - relative: Changes are centered around the original value - absolute: Changes scale directly from zero to the maximum |
| images | IMAGE | Input image sequence to be processed (IMAGE type) | |
| segments | INT | 82β32 | Number of mirror segments (2 to 32) |
| center_x | FLOAT | 0.500β1 | X-coordinate of the effect center (0.0 to 1.0) |
| center_y | FLOAT | 0.500β1 | Y-coordinate of the effect center (0.0 to 1.0) |
| zoom | FLOAT | 1.00.1β2 | Zoom factor for the effect (0.1 to 2.0) |
| rotation | FLOAT | 00β360 | Rotation angle of the effect (0.0 to 360.0) |
| precession | FLOAT | 0.00-1β1 | Rate of rotation change over time (-1.0 to 1.0) |
| speed | FLOAT | 1.00.1β5 | Speed of the effect animation (0.1 to 5.0) |
| opt_featureopt | FEATURE | Optional 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)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | β |