Feature Renormalize β‘π ‘π π £π
Remap a feature onto whatever numeric range your parameter actually needs
- feature
- FEATURE
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.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| feature | FEATURE | Input feature to be renormalized | |
| lower_threshold | FLOAT | 0.00-10000β10000 | Minimum value for the normalized output (-10000.0 to 10000.0) |
| upper_threshold | FLOAT | 1.00-10000β10000 | Maximum value for the normalized output (-10000.0 to 10000.0) |
| invert_output | BOOLEAN | false | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| FEATURE | FEATURE | β |