Advanced Feature Combiner β‘π ‘π π £π
The mixer desk for FlexFeature curves
- audio
- feature_1
- feature_2
- feature_3
- FEATURE
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_sumis the natural default for "blend these together"; reach formax/minwhen you want whichever signal is currently strongest to win, andmultiplywhen 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
audioinput is only there for waveform display and frame-count detection - it doesn't feed into the actual math unlessframe_countis 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.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| combine_mode | COMBO | How features are combined: weighted_sum adds weighted values, normalized divides by total weight, max takes the highest, multiply multiplies all together | |
| interpolation_method | COMBO | How weight automation points are interpolated between keyframes (linear, cubic, nearest, hold) | |
| frame_count | INT | 00β100000 | Number of output frames (0 = auto-detect from audio or first feature) |
| frame_rate | FLOAT | 25.01β120 | Frames per second for timing calculations |
| weight_data | STRING | {} | JSON automation data for per-feature weight envelopes (edited via the visual lanes) |
| invert_output | BOOLEAN | false | β |
| audioopt | AUDIO | Optional audio input for waveform display and frame count detection | |
| feature_1opt | FEATURE | Feature input 1 | |
| feature_2opt | FEATURE | Feature input 2 | |
| feature_3opt | FEATURE | Feature input 3 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| FEATURE | FEATURE | β |