Feature Contiguous Interpolate β‘π ‘π π £π
Smooth, eased ramps instead of hard on/off bursts
- feature
- FEATURE
A raw feature that crosses a threshold and drops back below it repeatedly - think "is the audio loud right now, yes or no" - gives you a step function: instantly on, instantly off. That reads as jarring when it's driving something visual. Feature Contiguous Interpolate finds each stretch of frames where the feature stays above your threshold and replaces it with a smooth eased ramp, optionally trailing off with a fade instead of cutting dead the moment the input drops.
Context if you're new to the RyanOnTheInside pack (Ryan / u/ryanontheinside, also behind ComfyStream and Daydream's real-time reactive video work): FEATURE here means a per-frame value curve, extracted from a source and reshaped by Feature Modulator nodes like this one before it drives a Flex node's parameter or an external target.
How it works
The node scans the input feature and identifies "contiguous segments" - runs of consecutive frames where the value stays above threshold. Within each segment it interpolates from start to end using the easing curve you pick (linear, plus quad/cubic/quart in/out/in-out variants - nine total beyond linear, ten choices in all). After a segment ends, fade_out lets you extend a decay tail for that many extra frames instead of snapping straight back down, so the effect eases out rather than stopping abruptly.
Inputs and outputs that matter
feature(required) - the curve to interpolate.threshold(0.0β1.0, default 0) - the level a frame needs to clear to count as part of a segment.start/end(0.0β1.0, default 0/1) - the values the eased ramp interpolates between within each segment.easing- pick fromlinear,ease_in_quad,ease_out_quad,ease_in_out_quad,ease_in_cubic,ease_out_cubic,ease_in_out_cubic,ease_in_quart,ease_out_quart,ease_in_out_quart.ease_out_*starts fast and settles - good for a hit that decays naturally;ease_in_*starts slow and accelerates - good for a buildup.fade_out(0β100 frames, default 0) - extra frames of fade after a segment ends, instead of an instant cutoff.invert_output- flips the result.
Output is a single FEATURE, wired into a Flex node's optional feature input or chained into another modulator.
Installing it
Via ComfyUI Manager: search RyanOnTheInside. Manual install:
cd ComfyUI/custom_nodes
git clone https://github.com/ryanontheinside/ComfyUI_RyanOnTheInside
cd ComfyUI_RyanOnTheInside
pip install -r requirements.txt
This node runs on already-extracted feature data - no models or GPU work of its own - but it ships with, and installs alongside, the pack's full dependency set for audio/MIDI/optical-flow extraction used elsewhere.
Where people get tripped up
If a v1-to-v2 update leaves nodes missing or throwing import errors, the README's fix is a clean uninstall and reinstall rather than a git pull.
For this node specifically: a threshold set too low means almost every frame counts as "in a segment," so you end up with one giant segment covering most of the clip and a single long ramp instead of the punchy, repeated hits you were probably going for. Raise the threshold until you're isolating the actual peaks in your source feature, not just its baseline noise floor. The other thing worth knowing: fade_out only extends the tail after a segment - it doesn't smooth the transition into a segment. If the attack still feels too sudden, that's what the easing choice is for; pair an ease_in_* curve with a short segment for a soft onset rather than trying to fix onset sharpness with fade_out alone.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| feature | FEATURE | Input feature to interpolate | |
| threshold | FLOAT | 0.000β1 | Threshold for identifying contiguous segments (0.0 to 1.0) |
| start | FLOAT | 0.000β1 | Starting value for interpolation (0.0 to 1.0) |
| end | FLOAT | 1.000β1 | Ending value for interpolation (0.0 to 1.0) |
| easing | COMBO | Easing function for interpolation | |
| fade_out | INT | 00β100 | Number of frames for fade-out after each segment (0 to 100) |
| invert_output | BOOLEAN | false | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| FEATURE | FEATURE | β |