Nodes/RyanOnTheInside/Audio Feature Extractor βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
ComfyUI Node

Audio Feature Extractor βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜

The node that turns a waveform into something you can wire into a visual effect

By ryanontheinsideΒ·Created 2 years agoΒ·Updated 5 months agoΒ· 852
Audio Feature Extractor βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
  • audio
  • feature
  • frame_count
β—„extraction_methodβ–Ύβ–Ί
β—„frame_rate30.0β–Ί
β—„frame_count0β–Ί
β—„width512β–Ί
β—„height512β–Ί

This is the node that makes "audio-reactive" actually happen in this pack. It analyzes a waveform and outputs a per-frame FEATURE signal - a curve any Flex target (FlexImageWarp, FlexImageDepthWarp, FlexImageParallax, and others across the pack) can plug into its opt_feature input and use to drive one of its own parameters. Without this node (or a source node like it), the Flex system has nothing to react to.

The five extraction methods

extraction_method is the whole personality of the node, and the author's own tooltip descriptions are worth quoting directly because they tell you exactly when to reach for each one:

  • amplitude_envelope - overall loudness changes, great for syncing with dramatic moments.
  • rms_energy - continuous energy level, smoother than amplitude, good for sustained effects.
  • spectral_centroid - brightness of the sound, high for sharp/crisp sounds, low for bass/warm sounds.
  • onset_strength - detects new sounds/beats, perfect for rhythmic effects.
  • chroma_features - musical note content, useful for harmony-based effects.

If you're not sure where to start: onset_strength for anything you want to look punchy and on-beat, rms_energy for anything you want to feel smooth and breathing rather than jittery. amplitude_envelope and rms_energy sound similar in description but behave differently in practice - amplitude tends to read jittery on a busy mix, RMS is noticeably smoother because it's an energy average rather than an instant reading.

Inputs and outputs that matter

  • audio and extraction_method - the source and the analysis method.
  • frame_rate - the video rate you're targeting.
  • frame_count (default 0) - leave at 0 and it auto-calculates frame count from the audio's length and your frame rate; set it explicitly and the extracted feature gets interpolated to match that target length instead.
  • width/height - sizes the internal FEATURE tensor; match your pipeline's resolution.

Outputs: feature (FEATURE, wire into any Flex target's opt_feature) and frame_count (INT, handy to reuse elsewhere so your batch length stays consistent without recomputing it).

Installing it

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

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

No model download needed - this is signal analysis, not a learned model.

Where people get burned

Picking an extraction_method is genuinely trial-and-error the first few times - there's no wrong answer, but a method that doesn't match your intent (say, chroma_features on a percussion-heavy track with little melodic content) will produce a feature curve that doesn't do much. If your downstream effect looks too tame or too wild once you've got a signal wired in, that's not this node - it's strength, feature_threshold, and feature_mode on the target node. This node's only job is producing the raw curve; how hard that curve gets applied is entirely the target's decision.

CategoryRyanOnTheInside/FlexFeatures/Sources/Audio

Inputs (6)

NameTypeDefaultDescription
extraction_methodCOMBOChoose how to analyze the audio: - amplitude_envelope: Overall loudness changes - great for syncing with dramatic moments - rms_energy: Continuous energy level - smoother than amplitude, good for sustained effects - spectral_centroid: Brightness of the sound - high for sharp/crisp sounds, low for bass/warm sounds - onset_strength: Detects new sounds/beats - perfect for rhythmic effects - chroma_features: Musical note content - useful for harmony-based effects
frame_rateFLOAT30.01–120Frame rate of the video (1.0 to 120.0 fps)
frame_countINT0Number of frames to generate (default of 0 will automatically calculate frames from audio length and frame rate). When set to 0, automatically calculates frames from audio length and frame rate. When specified, interpolates feature to match the target frame count.
widthINT51264–4096Width of the output feature (64 to 4096)
heightINT51264–4096Height of the output feature (64 to 4096)
audioAUDIOInput audio to analyze

Outputs (2)

NameTypeDescription
featureFEATUREβ€”
frame_countINTβ€”