Empty Motion Data
Empty Motion Data
- MOTION_DATA
Empty Motion Data looks like a node that does nothing, and in one sense it does: it produces a blank motion sequence. But it's also the node that decides how long your generated motion will be, which makes it a quiet but essential part of every text-to-motion graph in this pack. Think of it as the motion version of EmptyLatentImage - the empty canvas the diffusion sampler starts from and slowly fills in with movement.
In the standard pipeline, it goes like this: Empty Motion Data → MotionCLIP Text Encode (which bakes your prompt and this blank sequence into conditioning) → MotionDiff Simple Sampler. The sampler denoises the blank into actual joint positions, and the length of that blank is the length of the finished motion.
How it works
Motion diffusion works in a joint-coordinate space rather than image latents, but the mechanism is the same shape: you start from noise - here, an "empty" motion of the right length - and iteratively denoise toward something that matches your text conditioning. The single input sets how many frames that blank has, which caps the output length at the same number.
The input that matters
frames- how many frames of motion to generate, default 196, max 196, min 1. The cap isn't arbitrary: every model in the pack was trained on the HumanML3D dataset, which records at 20 fps, so 196 frames is roughly 9.8 seconds of movement. That's the practical ceiling for a single generation pass.
The MOTION_DATA output feeds both MotionCLIP Text Encode and MotionDiff Simple Sampler.
Installation
Part of Fannovel16/ComfyUI-MotionDiff. Install the pack via ComfyUI Manager (search "ComfyUI MotionDiff") or clone it into ComfyUI/custom_nodes and install requirements, then restart. It's a heavyweight pack - smplx, pyrender, spacy, timm - and models auto-download from HuggingFace on first use.
Gotchas
The frames cap is the thing that trips people up. If you need a longer clip, don't fight the max - generate a few batches (the README and the community both recommend 20–196 frame batches) and either sample every other frame or stitch them in a video editor. That's exactly the approach used for the "Pony SDXL MotionDiff Txt2Vid" music videos you'll see floating around.
One subtle gotcha: because the length is fixed at creation time and baked into the conditioning, changing frames after wiring up the graph means re-running the text encode too, or your conditioning and your blank disagree. Set the length first, then prompt.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| frames | INT | 1961–196 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MOTION_DATA | MOTION_DATA | — |