Motion Data Visualizer
See the Motion Before You Build the Body
- motion_data
- IMAGE
Motion data is a tensor of joint coordinates - invisible until you draw it. Motion Data Visualizer is the pack's instant-preview node: feed it any MOTION_DATA and it renders the motion as a sequence of frames you can actually watch. It's the fastest way to check whether your prompt produced the right dance before you spend minutes on SMPL fitting. Almost every text-to-motion workflow should include one of these for the sanity-check pass.
It gives you two visualization styles. original draws the raw joint plot. pseudo-openpose renders a stick figure in an OpenPose-ish layout. The README is honest about the tradeoff: pseudo-openpose is fast and smooth but has no head, no depth, and doesn't exactly match the OpenPose format. It's a preview, not a ControlNet-ready condition. (The real, head-included OpenPose output is the Render OpenPose from SMPL Multiple node, which needs the full SMPL fitting path first.)
How it works
Under the hood it uses the same 3D motion plotting routine the mogen research code uses - it projects the joint chain to 2D and draws the skeleton per frame, with a virtual camera you control. Then it returns the frames as a batched IMAGE, ready for a preview node or to be saved as video.
The inputs that matter
motion_data- any motion, fromMotionGPT Text2Motion,MotionDiff Simple Sampler, or a loaded file.visualization-originalorpseudo-openpose. For previewing, pseudo-openpose is the one you want; the stick figure is way easier to read than raw joint plots.distance(7),elevation(120),rotation(-90) - the virtual camera. If your figure is too zoomed in or you're staring at its back, these are the dials. People routinely report the default camera looks down on the subject, so expect to play with elevation.poselinewidth(4) - skeleton line thickness; bump it if the stick figure disappears against a bright preview.opt_title- optional text drawn on the frames, handy when comparing variants.
Output: IMAGE.
Installation
Part of Fannovel16/ComfyUI-MotionDiff. Install via ComfyUI Manager (search "ComfyUI MotionDiff") or clone into ComfyUI/custom_nodes and install requirements, restart. This node leans on the matplotlib-backed plotting in the pack's motion library, so the install stays on the heavy side but nothing extra downloads here.
Gotchas
Remember what this output is and isn't. Because pseudo-openpose has no head and isn't true OpenPose format, don't feed it straight into an OpenPose ControlNet expecting reliable conditioning - that's the trap people hit, and it's exactly why the pack ships a second, slower OpenPose path. Also, the camera is fixed per render: rotation animates the view around the figure, but you can't fly a free camera around the motion. For a first glance it's perfect; for actual pose-conditioned generation, go the SMPL route.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| motion_data | MOTION_DATA | — | |
| visualization | COMBO | pseudo-openpose | 2 options: original, pseudo-openpose |
| distance | FLOAT | 7.00–10 | — |
| elevation | FLOAT | 120.00–300 | — |
| rotation | FLOAT | -90-180–180 | — |
| poselinewidth | FLOAT | 4.00–50 | — |
| opt_titleopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |