***BETA*** Feature To Spline Data β‘π ‘π π £π
Turning a reactive signal into a motion path (beta)
- feature
- mask
- coord_str
- float
- count
- normalized_str
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.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| feature | FEATURE | Input feature to be converted to spline data | |
| mask_width | INT | 5128β4096 | Width of the output mask (8 to 4096) |
| mask_height | INT | 5128β4096 | Height of the output mask (8 to 4096) |
| sampling_method | COMBO | time | Method for sampling points ('path', 'time', 'controlpoints') |
| interpolation | COMBO | cardinal | Spline interpolation method ('cardinal', 'monotone', 'basis', 'linear', 'step-before', 'step-after', 'polar', 'polar-reverse') |
| tension | FLOAT | 0.500β1 | Tension parameter for cardinal splines (0.0 to 1.0) |
| repeat_output | INT | 11β4096 | Number of times to repeat the output (1 to 4096) |
| float_output_type | COMBO | list | Type of float output ('list', 'pandas series', 'tensor') |
| min_valueopt | FLOAT | 0.00-10000β10000 | Optional minimum value for normalization |
| max_valueopt | FLOAT | 1.00-10000β10000 | Optional maximum value for normalization |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| mask | MASK | β |
| coord_str | STRING | β |
| float | FLOAT | β |
| count | INT | β |
| normalized_str | STRING | β |