***BETA*** Spline Feature Modulator β‘π ‘π π £π
Make a dot race along a hand-drawn path, speed set by audio or motion
- feature
- mask
- coord_str
- float
- count
- normalized_str
This one lives in the "Spline" corner of RyanOnTheInside's Flex Features system, and it's marked BETA in the node picker - worth knowing going in, since it means the exact behavior may shift under you across updates. What it does, though, is a genuinely useful idea: you draw a path, feed it a FEATURE (audio loudness, motion, MIDI velocity, whatever this pack's audio-reactive nodes hand you), and a point travels along that path faster or slower depending on how strong the feature is right now. Loud part of the song, the dot sprints; quiet part, it crawls. Out comes a mask you can composite, plus the raw numbers if you need them elsewhere.
RyanOnTheInside is a well-known name in the ComfyUI audio/motion-reactive space - the whole pack's pitch is "everything reacts to everything," and this node is a literal example of that: turn any measurable signal into physical motion along a path you drew.
How it works
coordinates is a JSON string of spline control points - in practice you get this from the pack's own spline-drawing interface rather than typing coordinates by hand (the README calls out "Manual Feature Creation" as one of its bigger V2 additions). feature is your driving signal. The node maps the feature's current value onto a travel speed somewhere between min_speed and max_speed, and a marker moves along the spline accordingly - this is the "feature" modulator, as opposed to its sibling SplineRhythmModulator, which maps the feature to position and rhythm instead of raw speed.
The inputs and outputs that matter
The knobs you'll actually touch: min_speed and max_speed (0β10, defaults 0.1 and 1) set the floor and ceiling of how fast the dot can move - widen the gap for more dramatic reactivity, narrow it for something subtle. mask_width/mask_height (default 512, up to 4096) just set the resolution of the output mask canvas - match your actual render size. float_output_type picks the shape of the raw numeric output: list, pandas series, or tensor - most Flex-compatible nodes downstream want tensor, so leave it there unless something specifically asks for the others. The optional min_value/max_value rescale the output float and its string form into whatever range you actually need (default 0β1), handy if a downstream node expects, say, -1 to 1.
Five outputs come out: mask is the position marker rendered onto a blank canvas - feed this into something like TranslucentComposite to actually paint a moving glow or light onto a real image. float is the raw driving value. coord_str and normalized_str are string forms of the coordinate/position data (the normalized one respects your min_value/max_value). count tells you how many points/samples got generated.
How to install it
Via ComfyUI Manager, search "RyanOnTheInside." Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/ryanontheinside/ComfyUI_RyanOnTheInside.git
cd ComfyUI_RyanOnTheInside
pip install -r requirements.txt
Restart ComfyUI after. This node itself needs nothing exotic beyond what the pack pulls in generally (opencv, scipy, matplotlib and friends) - no model downloads, it's all math.
Common issues & troubleshooting
Don't hand-write the coordinates JSON - it needs to match the exact structure the spline editor emits, and typos here tend to fail silently or produce a mask that's just wrong rather than a clear error. Use the pack's drawing interface.
If you don't have a real audio or motion feature wired up yet and just want to test the mechanics, feed it one of the pack's Time features instead (Pulse or Sawtooth work well for an obviously visible test) - cheaper than debugging your audio pipeline and this node's plumbing at the same time.
And remember it's beta: if an update changes a default or a tooltip's wording out from under you, that's expected here more than elsewhere in the pack - check the node's ? docs icon after pulling updates before assuming your workflow broke.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| coordinates | STRING | JSON string containing spline control points | |
| feature | FEATURE | Input feature for modulation | |
| 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) |
| min_speed | FLOAT | 0.10β10 | Minimum speed of movement along the spline (0.0 to 10.0) |
| max_speed | FLOAT | 1.00β10 | Maximum speed of movement along the spline (0.0 to 10.0) |
| 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 | β |