SCAIL CMU Motion
Play real mocap — walks, runs, fights — and chain them into one continuous performance
- library
- scail_pose
- pose_sequence_in
- pose_sequence
- frame_count_out
- motion_info
The AIST nodes make people dance; SCAILCMUMotion makes people do everything else. It plays single motion-capture sequences from the CMU library - walking, running, jumping, fighting, sports, climbing, sitting, even 55 two-person paired interactions like handshakes and partner dances. The standout feature is that it isn't dance-specific at all, and unlike AIST (which keeps dancers rooted in place), CMU motions keep their original trajectory: a walking motion actually moves the character across the frame. Chain a walk into a run into a jump and you get a continuous locomotion path, not a stationary figure doing calisthenics.
How it works
Feed it a CMU_LIBRARY from SCAILCMULibraryLoader and pick a motion:
category- one of 16 categories (walk, run, jump, dance, fight, sports, climb, interact, sit, crouch, gesture, swim, getup, fall, balance, misc). Walk alone has 955 motions.selection_mode-random(grab any motion in the category) orspecific, where you give amotion_idlike02_01.loop_mode-none(play once),loop, orping_pong(play, then reverse - great for a character pacing).target_fps- output frame rate. The source data is 120fps and gets scaled down, so 24fps is a sensible default.transition_frames- frames to blend from the previous pose or sequence, which is what makes chaining smooth.
The two optional inputs are where the chaining magic lives: scail_pose gives a reference pose for positioning/scaling (so your character starts where your character stands), and pose_sequence_in takes a previous motion's sequence so you can daisy-chain. The README's example is literally Walk → Run → Jump, each node's pose_sequence going into the next node's pose_sequence_in.
Outputs: pose_sequence (into the renderer or the next motion node), frame_count_out (an INT you can feed into your generation length), and motion_info (a STRING describing what was selected - handy when you picked random and want to know what you got).
Installing and troubleshooting
Pack-wide install: clone ckinpdx/ComfyUI-SCAIL-AudioReactive into ComfyUI/custom_nodes, pip install -r requirements.txt, restart, or use ComfyUI Manager. First run through the loader pulls the ~660MB CMU library - the largest download in the pack, and the thing to plan for.
Real-world gotchas: with random selection you get no control over which motion, which is exactly why motion_info exists. And because CMU motions drift (the character moves in world space), a chained sequence will keep accumulating that drift across nodes - great when you want continuous locomotion, surprising when you chain a walk into a stationary dance and the dancer arrives off-screen. Use scail_pose on the first node in a chain to anchor position, and keep an eye on transition_frames when switching categories so a run doesn't slam into a sitting pose.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| library | CMU_LIBRARY | — | |
| category | COMBO | 16 options: walk, run, jump, dance, fight, sports, +10 | |
| selection_mode | COMBO | 2 options: random, specific | |
| motion_id | STRING | Motion ID when selection_mode is 'specific' (e.g., '02_01') | |
| transition_frames | INT | 120–60 | — |
| loop_mode | COMBO | 3 options: none, loop, ping_pong | |
| target_fps | INT | 241–120 | — |
| scail_poseopt | SCAIL_POSE | — | |
| pose_sequence_inopt | SCAIL_POSE_SEQUENCE | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| pose_sequence | SCAIL_POSE_SEQUENCE | — |
| frame_count_out | INT | — |
| motion_info | STRING | — |