Nodes/RyanOnTheInside/Advanced Feature Combiner βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
ComfyUI Node

Advanced Feature Combiner βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜

The mixer desk for FlexFeature curves

By ryanontheinsideΒ·Created 2 years agoΒ·Updated 5 months agoΒ· 852
Advanced Feature Combiner βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
  • audio
  • feature_1
  • feature_2
  • feature_3
  • FEATURE
β—„combine_modeβ–Ύβ–Ί
β—„interpolation_methodβ–Ύβ–Ί
β—„frame_count0β–Ί
β—„frame_rate25.0β–Ί
β—„weight_data{}β–Ί
β—„invert_outputfalseβ–Ί

FlexFeatures is the older, arguably more famous half of this pack - a system for turning any time-varying signal (audio loudness, an object's on-screen size, MIDI, motion) into a normalized FEATURE curve you can use to drive some other parameter frame by frame. Once you've got two or three of those curves, you often want them working together rather than picking just one, and that's what this node is for: it's the mixer desk that combines multiple FlexFeature curves into a single output curve.

Built by ryanontheinside, whose FlexFeatures nodes are what the pack was originally known for, well before the ACE-Step music tooling arrived.

How it works

You plug in up to three FEATURE curves and pick a combine_mode that decides how they merge: weighted_sum adds them by weight, normalized divides by the total weight (so the result stays in a sane range), max/min take the highest or lowest value at each point, and multiply/subtract/divide do the arithmetic op directly - all per the node's own tooltip. Per-feature weights are automated over time via weight_data, edited through the node's visual lanes in the UI rather than typed by hand, and interpolation_method (linear, cubic, nearest, or hold) decides how those weight keyframes are interpolated between points.

The inputs and outputs that matter

  • feature_1 / feature_2 / feature_3 - all optional; wire in whichever curves you actually have, from one up to three.
  • combine_mode - the one setting that actually changes the shape of your result. weighted_sum is the natural default for "blend these together"; reach for max/min when you want whichever signal is currently strongest to win, and multiply when you want one curve to gate another (multiply by something near 0 and it suppresses that region).
  • frame_count - 0 auto-detects from audio or the first connected feature, which is usually what you want.
  • frame_rate - default 25.
  • invert_output - flips the final curve.
  • Optional audio input is only there for waveform display and frame-count detection - it doesn't feed into the actual math unless frame_count is left at 0.

Output is a single FEATURE. The node is also flagged as an output node, which matches the mention of visual weight-automation lanes rendering right in the graph.

How to install it

Via ComfyUI Manager, search RyanOnTheInside. Manually:

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

then restart. No model downloads - this is pure signal math on curves your graph already produced.

Common issues & troubleshooting

Nothing changes no matter what you set. All three feature inputs are optional, so it's easy to have the node running with none of them actually connected - it'll happily output a flat constant. Double-check at least one feature_N is wired.

Combined curve looks wrong or spiky. If your input features come from different sources with different frame rates or lengths, they won't line up cleanly at combine time - that's exactly why frame_rate/frame_count exist as explicit fields rather than being silently inferred. Set them to match your actual timeline instead of leaving mismatched inputs to fight it out.

Not sure which combine_mode to reach for. Start with weighted_sum for a general blend and only move to max/min/multiply once you have a specific reason - like wanting one signal to gate or override another.

CategoryRyanOnTheInside/FlexFeatures/FeatureModulators

Inputs (10)

NameTypeDefaultDescription
combine_modeCOMBOHow features are combined: weighted_sum adds weighted values, normalized divides by total weight, max takes the highest, multiply multiplies all together
interpolation_methodCOMBOHow weight automation points are interpolated between keyframes (linear, cubic, nearest, hold)
frame_countINT00–100000Number of output frames (0 = auto-detect from audio or first feature)
frame_rateFLOAT25.01–120Frames per second for timing calculations
weight_dataSTRING{}JSON automation data for per-feature weight envelopes (edited via the visual lanes)
invert_outputBOOLEANfalseβ€”
audiooptAUDIOOptional audio input for waveform display and frame count detection
feature_1optFEATUREFeature input 1
feature_2optFEATUREFeature input 2
feature_3optFEATUREFeature input 3

Outputs (1)

NameTypeDescription
FEATUREFEATUREβ€”