Nodes/RyanOnTheInside/Flex Audio Visualizer Circular βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
ComfyUI Node

Flex Audio Visualizer Circular βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜

Generate a beat-reactive ring visualizer

By ryanontheinsideΒ·Created 2 years agoΒ·Updated 5 months agoΒ· 852
Flex Audio Visualizer Circular βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
  • audio
  • opt_feature
  • IMAGE
  • MASK
β—„strength1.00β–Ί
β—„feature_threshold0.00β–Ί
β—„feature_paramβ–Ύβ–Ί
β—„feature_moderelativeβ–Ί
β—„frame_rate30β–Ί
β—„screen_width768β–Ί
β—„screen_height464β–Ί
β—„position_x0.50β–Ί
β—„position_y0.50β–Ί
β—„visualization_methodbarβ–Ί
β—„visualization_featurefrequencyβ–Ί
β—„smoothing0.50β–Ί
β—„rotation0β–Ί
β—„num_points360β–Ί
β—„fft_size2048β–Ί
β—„min_frequency20β–Ί
β—„max_frequency8000β–Ί
β—„radius200β–Ί
β—„line_width2β–Ί
β—„amplitude_scale100β–Ί
β—„base_radius200β–Ί

This is the node for the classic circular audio-reactive visual - a ring of bars or a wavy line pulsing outward from a center point, driven by the actual frequency content of a track. Unlike most of this pack's other targets, it doesn't modify an existing image sequence - it generates its own visualization frames from scratch, straight out of the audio.

How it works

Feed it audio, and it runs an FFT (fft_size, 256 to 8192 - bigger windows give finer frequency resolution at the cost of temporal precision) over a slice defined by min_frequency/max_frequency, then draws the result as either bar (individual radial spikes) or line (a continuous connected ring) around a circle of num_points points. visualization_feature picks whether that circle is driven by frequency data (a spectrum, bass-to-treble around the ring) or waveform data (the raw signal shape). radius/base_radius and amplitude_scale control the ring's resting size and how far it deforms with the audio; smoothing damps frame-to-frame jitter so the motion reads as pulsing rather than flickering; rotation spins the whole ring.

frame_rate, screen_width, and screen_height set the canvas the visualizer renders onto - these need to line up with whatever you're compositing this into downstream, or you'll be resizing afterward. position_x/position_y place the visualizer's center within that canvas (0 to 1, normalized), which matters if you're layering this over existing footage rather than using it as a full-frame element.

As with the rest of the Flex family, every one of the visual parameters - smoothing, rotation, point count, FFT size, frequency range, radius, line width, amplitude scale, base radius - can additionally be modulated by an optional FEATURE through opt_feature, via feature_param and feature_mode. That's mostly a power-user knob, though: the audio itself is already driving the primary visual through the FFT, so feature modulation here is for a second, independent reactive layer - say, having the ring's rotation speed respond to a different feature than the one making it pulse.

Inputs and outputs

  • audio (required, AUDIO) - the track to visualize.
  • visualization_method (bar or line) and visualization_feature (frequency or waveform) - the two settings that define the visualizer's basic character.
  • screen_width / screen_height - output canvas size; match your target composite.
  • Outputs - two: an IMAGE (the rendered visualization frames) and a MASK (an alpha you can use to composite the visualizer over other footage without it dragging a solid background along with it).

Installing it

Install through ComfyUI Manager (search RyanOnTheInside) or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/ryanontheinside/ComfyUI_RyanOnTheInside

Then pip install -r requirements.txt and restart ComfyUI. Audio feature extraction here runs on librosa, which is exactly what that install step pulls in - skip it and this node won't import.

Common issues

If the visualizer barely moves, check min_frequency/max_frequency before touching amplitude_scale - a range that's too narrow, or set to a band your source track doesn't have much energy in, will look nearly static regardless of how high you push the amplitude setting. Conversely, if it looks jittery and chaotic rather than pulsing, raise smoothing - the default is a reasonable middle ground, but percussive or noisy tracks benefit from more damping.

Remember the two outputs are separate: if you plug only the IMAGE output into a composite and the visualizer shows up with a hard rectangular background instead of blending cleanly, that's because you skipped wiring the MASK output in as the alpha for that composite step.

CategoryRyanOnTheInside/FlexFeatures/Targets/Audio/Visualizers

Inputs (23)

NameTypeDefaultDescription
strengthFLOAT1.000–1Strength of parameter modulation (0.0 to 1.0)
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_paramCOMBOParameter to modulate based on the optional feature input
feature_modeCOMBOrelativeMode of parameter modulation ('relative' or 'absolute')
audioAUDIOInput audio to visualize
frame_rateFLOAT301–240Frame rate of the output visualization (1.0 to 240.0 fps)
screen_widthINT768100–1920Width of the output visualization (100 to 1920 pixels)
screen_heightINT464100–1080Height of the output visualization (100 to 1080 pixels)
position_xFLOAT0.500–1Horizontal position of the visualization center (0.0 to 1.0)
position_yFLOAT0.500–1Vertical position of the visualization center (0.0 to 1.0)
visualization_methodCOMBObarVisualization style ('bar' or 'line')
visualization_featureCOMBOfrequencyData source for visualization ('frequency' or 'waveform')
smoothingFLOAT0.500–1Amount of smoothing applied to the visualization (0.0 to 1.0)
rotationFLOAT00–360Rotation angle in degrees (0.0 to 360.0)
num_pointsINT3603–1000Number of points in circular visualization (3 to 1000)
fft_sizeINT2048256–8192FFT window size for frequency analysis (256 to 8192)
min_frequencyFLOAT2020–20000Minimum frequency to visualize (20.0 to 20000.0 Hz)
max_frequencyFLOAT800020–20000Maximum frequency to visualize (20.0 to 20000.0 Hz)
radiusFLOAT20010–1000Radius of visualization (10.0 to 1000.0 pixels)
line_widthINT21–10Width of visualization lines (1 to 10 pixels)
amplitude_scaleFLOAT1001–1000Scaling factor for amplitude (1.0 to 1000.0)
base_radiusFLOAT20010–1000Base radius for visualization (10.0 to 1000.0 pixels)
opt_featureoptFEATUREOptional feature input for parameter modulation

Outputs (2)

NameTypeDescription
IMAGEIMAGEβ€”
MASKMASKβ€”