Nodes/RyanOnTheInside/Feature Contiguous Interpolate βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
ComfyUI Node

Feature Contiguous Interpolate βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜

Smooth, eased ramps instead of hard on/off bursts

By ryanontheinsideΒ·Created 2 years agoΒ·Updated 5 months agoΒ· 852
Feature Contiguous Interpolate βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
  • feature
  • FEATURE
β—„threshold0.00β–Ί
β—„start0.00β–Ί
β—„end1.00β–Ί
β—„easingβ–Ύβ–Ί
β—„fade_out0β–Ί
β—„invert_outputfalseβ–Ί

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 from linear, 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.

CategoryRyanOnTheInside/FlexFeatures/FeatureModulators

Inputs (7)

NameTypeDefaultDescription
featureFEATUREInput feature to interpolate
thresholdFLOAT0.000–1Threshold for identifying contiguous segments (0.0 to 1.0)
startFLOAT0.000–1Starting value for interpolation (0.0 to 1.0)
endFLOAT1.000–1Ending value for interpolation (0.0 to 1.0)
easingCOMBOEasing function for interpolation
fade_outINT00–100Number of frames for fade-out after each segment (0 to 100)
invert_outputBOOLEANfalseβ€”

Outputs (1)

NameTypeDescription
FEATUREFEATUREβ€”