Nodes/ComfyUI-FrameFX/Dynamic Animated Weights
ComfyUI Node

Dynamic Animated Weights

The node that choreographs your whole animation — black frames first, then the wipe

By mgfxer·Created 2 years ago·Updated 2 years ago· 25
Dynamic Animated Weights
    • transitions
    • qr_mode
    • edge_fx
    • edge_fx_fade
    • total_frames
    animation_type_1RightToLeft
    animation_type_2SqSpinCCW
    animation_type_3VenetianBlindsVertical
    animation_type_4SqSpinCCW
    animation_type_5GrowingCircle
    animation_type_6DiagonalVenetianBlinds2
    animation_type_7DiagonalBottomRight-TopLeft
    animation_type_8DiagonalBottomLeft-TopRight
    animation_type_9TopDown
    animation_type_10BottomToTop
    animation_type_11ShrinkingCircle
    animation_type_12VenetianBlindsHorizontal
    transition_easingfalse
    blur_easingfalse
    frame_width512
    frame_height512
    hold_frames8
    transition_frames20
    padding_frames6
    input_frames5
    gaussian_blur_amount0.0
    edge_fx_thickness1
    push_fx0
    retract_fx0
    fx_cull_white_frames10.0
    qr_greyness0.50
    random_seed0.0
    edgeFade_contrast1.0
    edgeFade_blur0.0
    generation_modeOnly Transitions
    edge_fx_fade_balance0.50
    venetian_bars4

    If you've downloaded a prompt-travel workflow and stared at a node spitting out rows of black-and-white frames, this is probably that node. Dynamic Animated Weights is the flagship of mgfxer's ComfyUI-FrameFX pack, and it's the piece that actually choreographs an animation. Everything else in the pack - the mask helpers, the travel helpers - exists to feed or read the same language: hold frames, transition frames, end padding. This node is where that language meets a drawing engine.

    What it actually does

    Think of it as a machine that renders a weight sequence frame by frame. For each cycle it draws a solid black hold, then a transition animation over the next N frames - a wipe sweeping left to right, a circle growing, venetian blinds opening, a square spinning, a fade. White is the "this is where the transition is happening right now" zone. Hook that sequence into the mask/weight input of your animation stack and you've told it exactly when and where each prompt gets replaced. No hand-timing keyframes in a spreadsheet.

    It's all done with PIL in pure Python, so there's nothing to download and nothing to tune on the GPU side. The work is in the timeline, not the math.

    The inputs that matter

    The node is a wall of options; you'll mostly touch these:

    • animation_type_1 through animation_type_12 - your transition slots. Only the first few you set get used; if you need more than 12 cycles, the list loops in order. Random and RandomNoVenetian pick per slot, seeded by random_seed.
    • hold_frames, transition_frames, padding_frames - the timing skeleton. Defaults are 8 / 20 / 6, which is a decent starting cadence.
    • input_frames - how many cycles to generate. This is your overall animation length.
    • transition_easing - ease_in, ease_out, ease_in_out, or false for linear. This is where a wipe goes from "stiff" to "actually looks like motion."
    • generation_mode - Only Transitions, Generate QR, Generate Edge-FX, or Generate All.

    A note on generation_mode: "QR" and "Edge-FX" aren't gimmicks. QR mode alternates inverted cycles so the batch reads like a scannable QR pattern - that's how the QR-animation workflows you've seen get their trigger. qr_greyness keeps the "black" cells light enough for a phone to read. Edge-FX mode computes the difference between adjacent frames and emits white-on-black edge masks, which is the input an Edge-FX / ipadapter workflow wants. "Generate All" gives you both plus a faded edge_fx_fade version.

    The outputs

    • transitions - the main weight sequence (IMAGE). Wire this into the mask/weight input of your animation stack.
    • qr_mode - QR-pattern version.
    • edge_fx and edge_fx_fade - edge masks, raw and fade-weighted.
    • total_frames - the count, useful for setting your sampler's frame total so nothing drifts.

    Installing it

    Same install for every node in this pack - ComfyUI Manager, search ComfyUI-FrameFX, install, restart. Or the old-fashioned way:

    cd ComfyUI/custom_nodes
    git clone https://github.com/mgfxer/ComfyUI-FrameFX
    

    Then restart ComfyUI. There's no requirements.txt and no model download - the pack only needs torch, PIL and numpy, which ComfyUI already ships.

    Where people get burned

    Keep hold_frames, transition_frames and padding_frames in lockstep with whatever FrameFX node you're pairing this with - the pack's whole design is that these values agree across nodes, and the moment you change them in one place but not the other, your transitions drift off the timeline. Also: the blur and fade sliders are amplified in the code (gaussian_blur_amount gets scaled ×20), so small values go a lot further than the widget suggests. Start near zero. And random_seed is a float slider from 0–10, scaled internally - not the integer seed you're used to.

    It's a fiddly node, no argument. But it's the one that makes the rest of the animation workflow tick, and once the hold/transition/padding pattern clicks, the whole pack clicks with it.

    Categorymgfxer

    Inputs (32)

    NameTypeDefaultDescription
    animation_type_1COMBORightToLeft19 options: LeftToRight, RightToLeft, TopDown, BottomToTop, GrowingCircle, ShrinkingCircle, +13
    animation_type_2COMBOSqSpinCCW19 options: LeftToRight, RightToLeft, TopDown, BottomToTop, GrowingCircle, ShrinkingCircle, +13
    animation_type_3COMBOVenetianBlindsVertical19 options: LeftToRight, RightToLeft, TopDown, BottomToTop, GrowingCircle, ShrinkingCircle, +13
    animation_type_4COMBOSqSpinCCW19 options: LeftToRight, RightToLeft, TopDown, BottomToTop, GrowingCircle, ShrinkingCircle, +13
    animation_type_5COMBOGrowingCircle19 options: LeftToRight, RightToLeft, TopDown, BottomToTop, GrowingCircle, ShrinkingCircle, +13
    animation_type_6COMBODiagonalVenetianBlinds219 options: LeftToRight, RightToLeft, TopDown, BottomToTop, GrowingCircle, ShrinkingCircle, +13
    animation_type_7COMBODiagonalBottomRight-TopLeft19 options: LeftToRight, RightToLeft, TopDown, BottomToTop, GrowingCircle, ShrinkingCircle, +13
    animation_type_8COMBODiagonalBottomLeft-TopRight19 options: LeftToRight, RightToLeft, TopDown, BottomToTop, GrowingCircle, ShrinkingCircle, +13
    animation_type_9COMBOTopDown19 options: LeftToRight, RightToLeft, TopDown, BottomToTop, GrowingCircle, ShrinkingCircle, +13
    animation_type_10COMBOBottomToTop19 options: LeftToRight, RightToLeft, TopDown, BottomToTop, GrowingCircle, ShrinkingCircle, +13
    animation_type_11COMBOShrinkingCircle19 options: LeftToRight, RightToLeft, TopDown, BottomToTop, GrowingCircle, ShrinkingCircle, +13
    animation_type_12COMBOVenetianBlindsHorizontal19 options: LeftToRight, RightToLeft, TopDown, BottomToTop, GrowingCircle, ShrinkingCircle, +13
    transition_easingCOMBOfalse4 options: ease_in, ease_out, ease_in_out, false
    blur_easingCOMBOfalse4 options: ease_in, ease_out, ease_in_out, false
    frame_widthINT512
    frame_heightINT512
    hold_framesINT8
    transition_framesINT20
    padding_framesINT6
    input_framesINT5
    gaussian_blur_amountFLOAT0.00–10
    edge_fx_thicknessINT11–10
    push_fxINT00–30
    retract_fxINT00–30
    fx_cull_white_framesFLOAT10.00–100
    qr_greynessFLOAT0.500–1
    random_seedFLOAT0.00–10
    edgeFade_contrastFLOAT1.00.5–6
    edgeFade_blurFLOAT0.00–10
    generation_modeCOMBOOnly Transitions4 options: Only Transitions, Generate QR, Generate Edge-FX, Generate All
    edge_fx_fade_balanceFLOAT0.500.1–0.9
    venetian_barsINT4

    Outputs (5)

    NameTypeDescription
    transitionsIMAGE
    qr_modeIMAGE
    edge_fxIMAGE
    edge_fx_fadeIMAGE
    total_framesINT