Nodes/AnimoFlow/priorMDM Timeline / Long Motion (AnimoFlow)
ComfyUI Node

priorMDM Timeline / Long Motion (AnimoFlow)

Stitching long, multi-beat motion from short segments

By AnimoFlow·Created 2 months ago·Updated about a month ago· 1
priorMDM Timeline / Long Motion (AnimoFlow)
    • npz_b64
    • native_fps
    segments_json[{"prompt": "a person walks forward", "num_frames": 80}, {"prompt": "a person turns and runs", "num_frames": 80}]
    seed42
    cfg2.5
    handshake_size10
    blend_len10

    Text-to-motion models have a hard ceiling on how long a single generation can be - priorMDM caps at 196 frames, about 10 seconds at 20 fps. If you want "walk forward, then turn and run, then stop and wave," no single prompt gets you there. AnimoFlow_PriorMDMTimeline is the node that does: you give it a list of segments, each with its own prompt and length, and it generates each one separately and stitches them into one long, coherent motion. The "double-take long motion" use case the display name advertises - the character looks at something, turns back - is exactly the kind of multi-beat sequence this exists for.

    The mechanism is worth understanding because it explains the inputs. Each segment is generated by the priorMDM container (the node is an HTTP client to localhost:8002, same as AnimoFlow_PriorMDM), and the seam is where the magic or the jank happens. The node generates with a handshake - overlapping frames between adjacent segments that get crossfaded together with a blend window. Two knobs control that seam:

    • segments_json - the input that matters. A JSON list, e.g. [{"prompt": "a person walks forward", "num_frames": 80}, {"prompt": "a person turns and runs", "num_frames": 80}]. Each entry is one generation with its own prompt and length, and they're concatenated in order.
    • handshake_size - 4–30 frames, default 10. How much overlap the neighboring segments share so they can be aligned and blended. Too small and the joint is visible; too large and the blend window softens real motion at the boundary.
    • blend_len - 2–20 frames, default 10. The crossfade length inside that overlap.
    • cfg - default 2.5, priorMDM's usual low guidance.
    • seed - default 42; one seed drives all segments so the whole timeline is reproducible.

    The outputs are npz_b64 and native_fps (20), and from there it's the standard chain - AnimoFlow_Resample to 30 fps, AnimoFlow_IK, AnimoFlow_Rig, AnimoFlow_GLBExport. The curated timeline_priormdm workflow is the quickest way to see the stitching in action.

    The honest take

    This is the most powerful and the most finicky node in the pack. The stitch is genuinely good - the handshake + blend approach is the right way to join diffusion samples, and it's far better than the naive "concatenate and hope" approach. But you're still joining independently-generated segments, so a "turn" that ends 30° off from where the next segment expects the character to be will produce a visible pop no matter how wide the blend. Where people get burned: putting a fast action right at a segment boundary (the blend softens it), and reusing the same prompt in every segment expecting a varied result (it's deterministic per seed, so you'll get near-identical chunks). The two levers that actually help are blend_len for seam smoothness and changing segments' num_frames to move the boundary off the action. And note: if you want multilingual prompts in your timeline, the AnimoFlow_PromptRewrite node doesn't touch timeline segments in the GUI yet - rewrite those by hand or use the API layer.

    CategoryAnimoFlow/Motion

    Inputs (5)

    NameTypeDefaultDescription
    segments_jsonSTRING[{"prompt": "a person walks forward", "num_frames": 80}, {"prompt": "a person turns and runs", "num_frames": 80}]
    seedINT420–2147483647
    cfgFLOAT2.50–10
    handshake_sizeINT104–30
    blend_lenINT102–20

    Outputs (2)

    NameTypeDescription
    npz_b64ANIMOFLOW_NPZ
    native_fpsINT