Flex Audio Visualizer Line β‘π ‘π π £π
The classic bar/line audio visualizer, built in
- audio
- opt_feature
- IMAGE
- MASK
If you need the audio visualizer you've seen a thousand times - a row of bars pulsing to the beat, or a smooth waveform line - this is that node, rendered directly to an image sequence you can composite over anything. It's the "generic" visualizer in the pack; its sibling, FlexAudioVisualizerContour, does the fancier version that traces a mask's shape instead of sitting in a straight line.
How it works
Feed it audio and it analyzes it via FFT, either showing visualization_feature: frequency (a proper spectrum analysis, low to high) or waveform (raw amplitude - more organic, less "EQ display"). visualization_method picks the render style: bar for discrete bars, line for a continuous connected line through the same data. frame_rate controls how many image frames come out, independent of the audio's own sample rate.
Everything else is layout and shape. screen_width/screen_height set the canvas, position_x/position_y place the visualizer's center within it (0β1, so 0.5/0.5 is dead center), and rotation spins the whole thing - useful for a vertical bar stack instead of horizontal. length sets how far the visualization extends before auto-fitting to the screen edges (0 = auto-fit based on rotation). For bars specifically: num_bars, max_height/min_height, separation (gap between bars), and curvature (rounds the bar corners). For the line mode: curve_smoothing. reflect flips the whole render to draw downward from the baseline instead of up - handy for a mirrored, "meter-style" look.
Like every Flex node, it accepts an optional opt_feature that can additionally modulate one of 14+ of the above parameters (feature_param picks which; the schema shows the first dozen - smoothing, rotation, position_y, num_bars, max/min height, separation, curvature, reflect, curve smoothing, fft_size, min/max frequency - plus a couple more), with feature_mode (relative/absolute), feature_threshold, and strength controlling how that modulation behaves. In practice most people leave opt_feature unconnected and just let the audio itself drive the bars via visualization_feature - the feature input is for a second, independent reactive layer on top (e.g. motion from another clip nudging the rotation while the audio drives the bar heights).
Inputs and outputs that matter
The ones worth touching first: audio, visualization_method (bar vs line), num_bars or length, and max_height/min_height to fit your canvas. Outputs are IMAGE (the rendered visualization) and MASK (the same shape as a mask, so you can composite it, recolor it, or use it to punch a hole in something else).
How to install it
ComfyUI Manager, search "RyanOnTheInside," or:
cd ComfyUI/custom_nodes
git clone https://github.com/ryanontheinside/ComfyUI_RyanOnTheInside
cd ComfyUI_RyanOnTheInside
pip install -r requirements.txt
then restart. Audio analysis depends on librosa; make sure that install step actually finishes without errors before you go hunting for bugs elsewhere.
Common issues & troubleshooting
Bars/line render but never move. Check visualization_feature is set to something meaningful for your source - silent or near-silent audio produces a flat visualization regardless of settings, since there's nothing in the signal to display.
Output frame count doesn't match your other video nodes. frame_rate here is independent from your project's video frame rate; if you're compositing this over footage, set frame_rate to match, or run the result through a frame-rate/interpolation node afterward.
It looks cramped or clipped. screen_width/screen_height define the canvas this node renders at - if you composite the output onto a differently-sized image without resizing, bars can overflow or look tiny. Match the canvas to your target resolution up front rather than scaling after the fact.
Inputs (26)
| Name | Type | Default | Description |
|---|---|---|---|
| strength | FLOAT | 1.000β1 | Strength of parameter modulation (0.0 to 1.0) |
| 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 | Parameter to modulate based on the optional feature input | |
| feature_mode | COMBO | relative | Mode of parameter modulation ('relative' or 'absolute') |
| audio | AUDIO | Input audio to visualize | |
| frame_rate | FLOAT | 301β240 | Frame rate of the output visualization (1.0 to 240.0 fps) |
| screen_width | INT | 768100β1920 | Width of the output visualization (100 to 1920 pixels) |
| screen_height | INT | 464100β1080 | Height of the output visualization (100 to 1080 pixels) |
| position_x | FLOAT | 0.500β1 | Horizontal position of the visualization center (0.0 to 1.0) |
| position_y | FLOAT | 0.500β1 | Vertical position of the visualization center (0.0 to 1.0) |
| visualization_method | COMBO | bar | Visualization style ('bar' or 'line') |
| visualization_feature | COMBO | frequency | Data source for visualization ('frequency' or 'waveform') |
| smoothing | FLOAT | 0.500β1 | Amount of smoothing applied to the visualization (0.0 to 1.0) |
| rotation | FLOAT | 00β360 | Rotation angle in degrees (0.0 to 360.0) |
| length | FLOAT | 00β4000 | Length of the visualization in pixels. 0 means auto-fit to screen edges based on rotation (0.0 to 4000.0) |
| num_bars | INT | 641β1024 | Number of bars/points in visualization (1 to 1024) |
| max_height | FLOAT | 20010β2000 | Maximum height of visualization (10.0 to 2000.0) |
| min_height | FLOAT | 100β500 | Minimum height of visualization (0.0 to 500.0) |
| separation | FLOAT | 50β100 | Separation between bars (0.0 to 100.0) |
| curvature | FLOAT | 00β50 | Curvature of bar corners (0.0 to 50.0) |
| curve_smoothing | FLOAT | 0.000β1 | Smoothing for line visualization (0.0 to 1.0) |
| fft_size | INT | 2048256β8192 | FFT window size for frequency analysis (256 to 8192) |
| min_frequency | FLOAT | 2020β20000 | Minimum frequency to visualize (20.0 to 20000.0 Hz) |
| max_frequency | FLOAT | 800020β20000 | Maximum frequency to visualize (20.0 to 20000.0 Hz) |
| reflect | BOOLEAN | false | Whether to draw visualization upward (false) or downward (true) from baseline |
| opt_featureopt | FEATURE | Optional feature input for parameter modulation |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | β |
| MASK | MASK | β |