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

Manual Feature Node βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜

Hand-keyframe a Flex Feature curve

By ryanontheinsideΒ·Created 2 years agoΒ·Updated 5 months agoΒ· 852
Manual Feature Node βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
    • FEATURE
    β—„extraction_methodβ–Ύβ–Ί
    β—„frame_rate30.0β–Ί
    β—„frame_count30β–Ί
    β—„width512β–Ί
    β—„height512β–Ί
    β—„frame_numbers0,10,20β–Ί
    β—„values0.0,0.5,1.0β–Ί
    β—„last_value1.00β–Ί
    β—„interpolation_methodnoneβ–Ί

    Not every Flex Feature curve needs to come from audio analysis or motion detection - sometimes you just want to type in "at frame 0 it's 0, at frame 10 it's 0.5, at frame 20 it's 1" and get a smooth curve out. That's exactly what this node is: manual, hand-keyframed feature creation, no upstream analysis required. It's the simplest, most self-contained way to get a FEATURE flowing into any of the pack's feature-driven nodes.

    Why you'd reach for it

    Two situations, mainly. First, testing: before you wire up a full audio-analysis pipeline, drop this in with a rough guess at the curve shape you want, and you can validate the rest of your graph reacts the way you expect. Second, deliberate manual control: sometimes you know exactly when you want an effect to ramp up - not because the audio hits a beat there, but because that's when the story beat lands - and typing keyframes directly is more precise than fighting an automated feature extractor into producing the timing you already have in your head.

    This node is the all-in-one version: it bundles its own frame rate, frame count, and resolution, so you don't need a separate pipe node feeding it. If you're already working with a shared FEATURE_PIPE elsewhere in your graph (so frame rate/count/size stay consistent across several feature sources), the sibling node ManualFeatureFromPipe does the same keyframing job but reads those dimensions from the pipe instead of duplicating them here.

    The inputs that matter

    • frame_rate (default 30, 1–120) and frame_count (default 30, up to 999999) - how long the curve is and how it's timed.
    • width / height (default 512, 64–4096) - the feature's associated resolution; match these to your actual output if the feature is meant to represent something spatial.
    • frame_numbers (default "0,10,20") - comma-separated keyframe positions.
    • values (default "0.0,0.5,1.0") - the value at each of those keyframes, matched by position to frame_numbers.
    • last_value (default 1) - what the curve does after your last explicit keyframe, out to frame_count.
    • interpolation_method (none/linear/ease_in/ease_out) - how the curve moves between keyframes. none gives you a stepped curve (hard jumps at each keyframe); linear is a straight ramp; the ease variants give it a soft start or soft landing.
    • extraction_method - locked to manual, since this node doesn't extract anything, it's purely hand-defined.

    Output is a single FEATURE - wire it into LocationTransform, InstantFloatPreview to sanity-check it, or any other Flex-Feature-consuming node in the pack.

    How to install it

    The pack's README came back empty when I checked for install specifics, so the standard path applies:

    ComfyUI Manager: search "RyanOnTheInside", install, restart.

    Manual:

    cd ComfyUI/custom_nodes
    git clone https://github.com/ryanontheinside/ComfyUI_RyanOnTheInside
    

    Restart ComfyUI afterward.

    Troubleshooting

    The most common trip-up is a length mismatch: frame_numbers and values need the same number of comma-separated entries, or the keyframes won't line up the way you expect. If a keyframe past frame_count never seems to matter, that's expected - the curve only runs out to frame_count, and anything beyond your last real keyframe just holds at last_value. And if your curve looks blocky when you wanted it smooth, check interpolation_method first - it defaults to none, which is a stepped curve, not a ramp; switch to linear or one of the ease modes for anything continuous.

    CategoryRyanOnTheInside/FlexFeatures/Sources/Manual

    Inputs (9)

    NameTypeDefaultDescription
    extraction_methodCOMBOMethod used to extract features
    frame_rateFLOAT30.01–120Frame rate of the video (1.0 to 120.0 fps)
    frame_countINT301–999999Total number of frames (minimum: 1)
    widthINT51264–4096Width of the output feature (64 to 4096)
    heightINT51264–4096Height of the output feature (64 to 4096)
    frame_numbersSTRING0,10,20Comma-separated list of frame numbers (e.g., "0,10,20")
    valuesSTRING0.0,0.5,1.0Comma-separated list of values (e.g., "0.0,0.5,1.0")
    last_valueFLOAT1.00Value for the last frame (default: 1.0)
    interpolation_methodCOMBOnoneMethod for interpolating between values ('none', 'linear', 'ease_in', 'ease_out')

    Outputs (1)

    NameTypeDescription
    FEATUREFEATUREβ€”