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

Feature Renormalize βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜

Remap a feature onto whatever numeric range your parameter actually needs

By ryanontheinsideΒ·Created 2 years agoΒ·Updated 5 months agoΒ· 852
Feature Renormalize βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
  • feature
  • FEATURE
β—„lower_threshold0.00β–Ί
β—„upper_threshold1.00β–Ί
β—„invert_outputfalseβ–Ί

Every Feature Extraction node in this pack hands you a curve normalized to roughly 0–1. That's convenient for chaining modulators together, but it's rarely the range the thing you're actually trying to drive wants - a strength value might need to swing from -5 to 5, an offset might need to go well past 1. Feature Renormalize is the node that rescales a feature's numeric range onto whatever you actually need, including negative numbers and values far outside 0–1.

If you're new to the RyanOnTheInside pack (Ryan / u/ryanontheinside, also behind ComfyStream and Daydream's real-time reactive video work): a FEATURE is 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

lower_threshold and upper_threshold set the minimum and maximum of the normalized output - the key difference from its close cousin Feature Rebase is that these aren't capped to 0–1, they run all the way from -10,000 to 10,000. That's what makes this the node you reach for when the target isn't a normalized 0–1 curve at all: negative offsets, a wider swing, whatever number range the thing downstream actually expects. The result is a feature with the same shape and relative motion as the input, just re-expressed in a different numeric range.

Inputs and outputs that matter

  • feature (required) - the curve to renormalize.
  • lower_threshold (-10,000 to 10,000, default 0) - the minimum output value; the feature's own minimum maps here.
  • upper_threshold (-10,000 to 10,000, default 1) - the maximum output value; the feature's own maximum maps here.
  • invert_output - flips the result.

Output is a single FEATURE, ready to wire into a Flex node's optional feature input, or into a Feature To Flex Float Param / Feature To Flex Int Param node if you need it as a plain number for a non-Flex parameter.

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

Pure math on already-extracted feature data - no models, no GPU work, though it ships with the pack's full dependency set.

Where people get tripped up

If a v1-to-v2 update leaves the pack broken, the README's fix is a full uninstall and reinstall rather than a git pull.

Worth knowing: because normalization nodes like this one typically work off the feature's actual observed min and max rather than an assumed 0–1, an input that's drifted after a couple of other modulators (never quite reaching 0, or capped below 1) can still renormalize to fill your full target range - which is usually what you want, but it means two features that look similar on paper can come out differently once renormalized, if their real observed ranges differ. If the result looks off, run a Feature Info Node on your input first and check min_value/max_value before assuming the thresholds you set here are the problem.

CategoryRyanOnTheInside/FlexFeatures/FeatureModulators

Inputs (4)

NameTypeDefaultDescription
featureFEATUREInput feature to be renormalized
lower_thresholdFLOAT0.00-10000–10000Minimum value for the normalized output (-10000.0 to 10000.0)
upper_thresholdFLOAT1.00-10000–10000Maximum value for the normalized output (-10000.0 to 10000.0)
invert_outputBOOLEANfalseβ€”

Outputs (1)

NameTypeDescription
FEATUREFEATUREβ€”