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

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

Noise, twist, or bulge distortion, with almost every knob feature-modulatable

By ryanontheinsideΒ·Created 2 years agoΒ·Updated 5 months agoΒ· 852
Flex Image Warp βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
  • images
  • opt_feature
  • IMAGE
β—„strength1.00β–Ί
β—„feature_threshold0.00β–Ί
β—„feature_paramβ–Ύβ–Ί
β—„feature_moderelativeβ–Ί
β—„warp_typenoiseβ–Ί
β—„warp_strength0.10β–Ί
β—„center_x0.50β–Ί
β—„center_y0.50β–Ί
β—„radius1.00β–Ί
β—„warp_frequency5.0β–Ί
β—„warp_octaves3β–Ί
β—„warp_seed0β–Ί

This is the general-purpose distortion node in the Flex family: three warp styles - noise (organic, wavy, like heat shimmer), twist (rotational swirl around a center point), and bulge (fisheye-style push out from center) - and, unusually for this pack, seven different parameters you can hand off to a live modulation signal instead of just one. That makes it the most flexible of the FlexImage nodes, and also the easiest one to get lost in if you don't know which knobs actually do something for your chosen warp type.

How it works

Pick a warp_type, and the node distorts each frame accordingly. noise uses Perlin-style noise with a frequency and octave count to shape the distortion pattern; twist and bulge are geometric and centered on a point you set. Wire a Feature signal (from AudioFeatureExtractor, TimeFeatureNode, or any other Feature source in the pack) into opt_feature, and feature_param decides which single parameter that signal drives - warp_strength, center_x, center_y, radius, warp_frequency, warp_octaves, warp_seed, or None for no modulation at all. feature_mode controls whether the modulation is relative (offsets around your set value) or absolute (scales from zero up to it), and feature_threshold gates it so weak signal doesn't trigger the effect.

Inputs and outputs that matter

  • images, warp_type (noise/twist/bulge), warp_strength (-1.0 to 1.0, default 0.1) - the core effect.
  • center_x, center_y (0.0-1.0, default 0.5 each - normalized position, not pixels) and radius (0.0-2.0) - where the effect is centered and how far it reaches; mainly relevant to twist/bulge.
  • Optional: warp_frequency (0.1-20), warp_octaves (1-5), warp_seed - these only matter when warp_type is noise. Set to twist or bulge and they become no-ops.
  • opt_feature - the Feature modulation input.

Output is a single IMAGE.

Where you'd use it

noise at low strength is good for a subtle "alive" texture wobble on a looping background. twist and bulge driven by an audio onset feature give you punchy, beat-synced distortion pulses - the kind of thing that reads as "reactive" the moment someone sees it move on the beat.

Installing it

ComfyUI Manager: search RyanOnTheInside, install, restart. Or:

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

No model downloads - this is pure image math.

Where people get burned

The biggest source of confusion: cranking warp_frequency or warp_octaves and seeing nothing happen - because those only apply to noise, and you've got warp_type set to twist or bulge. Check your warp type first before assuming a param is broken. Second: center_x/center_y are normalized 0-1 coordinates, not pixel positions - 0.5, 0.5 is always dead center regardless of your resolution, so don't try to plug in pixel values. And as with any Flex node, if the modulated effect looks too tame or too wild, that's strength, feature_threshold, and feature_mode on this node to adjust - the Feature source itself just supplies a raw signal, it doesn't know how hard you want it applied.

CategoryRyanOnTheInside/FlexFeatures/Targets/Images

Inputs (14)

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: - warp_strength: Dynamically adjust distortion amount - center_x: Dynamically adjust horizontal center - center_y: Dynamically adjust vertical center - radius: Dynamically adjust effect radius - warp_frequency: Dynamically adjust noise/pattern frequency - warp_octaves: Dynamically adjust noise detail - warp_seed: Dynamically change noise pattern - 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)
warp_typeCOMBOnoiseType of warping effect ('noise', 'twist', 'bulge')
warp_strengthFLOAT0.10-1–1Strength of the warping effect (-1.0 to 1.0)
center_xFLOAT0.500–1X-coordinate of the warp center (0.0 to 1.0)
center_yFLOAT0.500–1Y-coordinate of the warp center (0.0 to 1.0)
radiusFLOAT1.000–2Radius of the warp effect (0.0 to 2.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.
warp_frequencyoptFLOAT5.00.1–20Optional frequency of the warp effect (0.1 to 20.0)
warp_octavesoptINT31–5Optional number of noise octaves (1 to 5)
warp_seedoptINT00–18446744073709550000Optional seed for noise generation

Outputs (1)

NameTypeDescription
IMAGEIMAGEβ€”