Nodes/RyanOnTheInside/***BETA*** Feature To Spline Data βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
ComfyUI Node

***BETA*** Feature To Spline Data βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜

Turning a reactive signal into a motion path (beta)

By ryanontheinsideΒ·Created 2 years agoΒ·Updated 5 months agoΒ· 852
***BETA*** Feature To Spline Data βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
  • feature
  • mask
  • coord_str
  • float
  • count
  • normalized_str
β—„mask_width512β–Ί
β—„mask_height512β–Ί
β—„sampling_methodtimeβ–Ί
β—„interpolationcardinalβ–Ί
β—„tension0.50β–Ί
β—„repeat_output1β–Ί
β—„float_output_typelistβ–Ί
β—„min_value0.00β–Ί
β—„max_value1.00β–Ί

The display name has "BETA" stapled to the front of it, and that's worth taking at face value - this is one of the newer, rougher edges of RyanOnTheInside's reactive system. Its job is to take a Feature timeline (the pack's normalized per-frame value stream - audio amplitude, motion, brightness, whatever you fed it) and turn it into spline/curve data: coordinates, a count, and a couple of serialized string formats that downstream motion-path or curve-editor nodes can consume.

What it actually does

Think of a Feature as a single number changing over time - one value per frame. FeatureToSplineData reinterprets that timeline as a curve rather than a flat brightness value: it samples the feature at points along the sequence and produces coordinate data plus a rendered mask of that curve, so you end up with something you could drive a motion path, an animated crop window, or any node expecting spline-shaped input.

Two settings decide how it samples: sampling_method picks whether it walks the curve by path position, by time, or by explicit controlpoints, and interpolation picks how it smooths between the sampled points - cardinal (the default, with a tension knob to control how tight the curve hugs its points), monotone, basis, straight linear, stepped variants, or the polar/polar-reverse options for curves that wrap around a center rather than running left to right.

Inputs and outputs that matter

The required inputs beyond feature (tooltip: "Input feature to be converted to spline data") are mostly about the rendered mask's canvas: mask_width and mask_height (default 512Γ—512, 8–4096) set the size of the output mask. repeat_output (default 1) lets you loop the sampled data if you need more frames than the source feature had. float_output_type decides the shape of the numeric output - plain list, a pandas series, or a tensor, depending what your downstream node expects. Two optional fields, min_value and max_value, let you rescale the feature's values into a specific numeric range before they become curve data - handy if the feature came out normalized 0–1 but the node you're feeding wants pixel coordinates or degrees instead.

There are five outputs, which is a lot for one node: mask (the curve rendered as a mask, sized by mask_width/mask_height), coord_str and normalized_str (the raw and normalized coordinate data as strings - the actual "spline data" other nodes parse), float (the sampled values as numbers), and count (how many points came out). In practice you'll wire coord_str or normalized_str into whatever spline/path-consuming node you're pairing this with, and treat mask/float/count as extras for previewing or debugging.

How to install it

Same pack, same install path as everything else here: ComfyUI Manager, search "RyanOnTheInside," or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/ryanontheinside/ComfyUI_RyanOnTheInside
cd ComfyUI_RyanOnTheInside
pip install -r requirements.txt

then restart. No extra model downloads are needed for this node specifically.

Common issues & troubleshooting

The beta tag is not decoration. If the output format doesn't match what a downstream spline node expects, or the coordinate string looks malformed for your case, that's the kind of rough edge a beta node ships with - don't assume it's your workflow that's broken before checking whether this node's output shape is actually what you think it is.

Getting flat or degenerate curves. If your source feature barely moves (a mostly-silent audio track, a near-static motion signal), the resulting spline will be nearly a straight line regardless of interpolation - the curve can only be as interesting as the feature driving it. Check the feature's own range before blaming the sampling settings.

Update stuck in ComfyUI Manager. Per the author's own note, a full uninstall-and-reinstall of the pack clears whatever gets Manager's update tracking confused - worth remembering since this node in particular is the kind of thing that changes shape between versions while it's still marked beta.

CategoryRyanOnTheInside/FlexFeatures/Targets/ExternalTargets/Spline

Inputs (10)

NameTypeDefaultDescription
featureFEATUREInput feature to be converted to spline data
mask_widthINT5128–4096Width of the output mask (8 to 4096)
mask_heightINT5128–4096Height of the output mask (8 to 4096)
sampling_methodCOMBOtimeMethod for sampling points ('path', 'time', 'controlpoints')
interpolationCOMBOcardinalSpline interpolation method ('cardinal', 'monotone', 'basis', 'linear', 'step-before', 'step-after', 'polar', 'polar-reverse')
tensionFLOAT0.500–1Tension parameter for cardinal splines (0.0 to 1.0)
repeat_outputINT11–4096Number of times to repeat the output (1 to 4096)
float_output_typeCOMBOlistType of float output ('list', 'pandas series', 'tensor')
min_valueoptFLOAT0.00-10000–10000Optional minimum value for normalization
max_valueoptFLOAT1.00-10000–10000Optional maximum value for normalization

Outputs (5)

NameTypeDescription
maskMASKβ€”
coord_strSTRINGβ€”
floatFLOATβ€”
countINTβ€”
normalized_strSTRINGβ€”