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

Time Feature βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜

A built-in curve generator for when you want a Flex signal but don't have audio

By ryanontheinsideΒ·Created 2 years agoΒ·Updated 5 months agoΒ· 852
Time Feature βš‘πŸ…‘πŸ…žπŸ…£πŸ…˜
    • FEATURE
    β—„extraction_methodβ–Ύβ–Ί
    β—„frame_rate30.0β–Ί
    β—„frame_count30β–Ί
    β—„width512β–Ί
    β—„height512β–Ί
    β—„frames_per_cycle30β–Ί
    β—„offset0.00β–Ί

    Every Flex target node in this pack (FlexImageWarp, FlexImageDepthWarp, FlexImageParallax, and others) wants an optional FEATURE input to modulate itself with. Usually that comes from analyzing something - audio, motion, color. This node skips analysis entirely and just generates a repeating curve over time, no external signal required. It's the pack's own built-in LFO: pick a shape, a period, and it hands you a FEATURE you can wire straight into any target's opt_feature.

    The shapes

    extraction_method picks the curve: smooth is a linear ramp; accelerate ramps at an increasing rate; pulse oscillates periodically; sawtooth rises steadily then drops sharply back to start; bounce emulates a bouncing, springy motion; square switches cleanly between two states each cycle rather than ramping. These map directly onto how the underlying parameter will move once wired into a target node - a bounce curve driving warp_strength on FlexImageWarp will bounce, not ramp.

    Inputs and outputs that matter

    • extraction_method - the curve shape, as above.
    • frame_rate and frame_count - the total length and rate the curve is generated over, matched to your video.
    • frames_per_cycle - how many frames one full repeat of the pattern takes.
    • offset (0.0-1.0) - shifts the starting phase of the cycle, useful if you're layering multiple Time Features and don't want them all peaking at the same frame.
    • width/height - sizes the internal FEATURE tensor; keep this consistent with the resolution of whatever you're driving downstream.

    Output is a single FEATURE.

    Why you'd use this over an audio-driven feature

    Two real reasons. First, when you genuinely don't have or want audio driving the effect - a deterministic, reproducible pulse or drift that doesn't depend on a track. Second, and underrated: while you're dialing in a Flex target node's strength/feature_threshold/feature_mode settings, a Time Feature gives you a predictable, repeatable test signal instead of whatever your source audio happens to be doing at that moment - much easier to reason about what's actually changing.

    Installing it

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

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

    Pure math, no model downloads or extra dependencies beyond the base pack install.

    Where people get burned

    If frames_per_cycle doesn't evenly divide frame_count, you get a partial, cut-off cycle at the end - harmless for most one-shot clips, but a problem if you need the output to loop cleanly (a looping GIF or seamless video background). Pick values that divide evenly if a perfect loop matters. And width/height here aren't a visual setting - they just size the internal feature tensor - but a mismatch against your actual image dimensions downstream can cause a target node to complain or silently resample, so keep them matched to your pipeline's resolution rather than treating them as arbitrary.

    CategoryRyanOnTheInside/FlexFeatures/Sources

    Inputs (7)

    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)
    frames_per_cycleINT301–1000β€”
    offsetFLOAT0.000–1Shifts the starting point of the effect (0.0 to 1.0)

    Outputs (1)

    NameTypeDescription
    FEATUREFEATUREβ€”