SCAIL FBX Motion
Play any Mixamo FBX animation as a SCAIL pose sequence (you'll need Blender)
- scail_pose
- pose_sequence_in
- pose_sequence
- frame_count_out
- motion_info
Every node in this pack wants to generate motion for you - beats, physics, mocap libraries. But sometimes you have a very specific animation in mind: that one Mixamo karate kick, a walk cycle that actually looks like a walk, a dance move you already own. SCAILMixamoFBX is the node that says "fine, let's just play your animation." It turns an FBX file into a SCAIL pose sequence, which means your rendered cylinder skeleton does exactly what the animation says - no audio analysis, no choreography guessing.
The name is doing double duty. "Mixamo" is Adobe's free animation site (mixamo.com), where you can grab character animations for nothing and download them as FBX. This node's real job is that it reads any FBX file, so Mixamo is the easiest source but not the only one. Drop whatever you have into ComfyUI/input/fbx_animations/ and it shows up in the dropdown.
How it works
The clever bit: the pack doesn't try to parse FBX in Python. FBX is a proprietary soup, and parsing it right means reimplementing a character rig. So this node cheats with Blender. It scans for Blender installs, then shells out headless:
blender --background --python blender_extract.py
with the FBX path and an output JSON passed via environment variables. Blender's built-in FBX importer handles the retargeting, extracts joint positions per frame, and the node resamples that trajectory to your target fps. It's a slow, separate-process operation - give it up to a couple of minutes for a long clip - but it's the one approach that actually works with real-world FBX files.
Inputs and outputs that matter
The fbx_file dropdown is built by scanning ComfyUI/input/fbx_animations/ (created automatically on install). blender_version is a dropdown of detected Blender installations - if it says "NOT FOUND - Install Blender," that's the whole problem. target_fps resamples to your video's fps (24 by default), and transition_frames blends in from the reference pose so the animation doesn't snap-jump when it starts.
The two optional inputs are worth knowing: scail_pose is a reference pose for scaling and positioning (wire in your DWPose base so the Mixamo character lands where your character actually stands), and pose_sequence_in chains onto a previous motion - same pattern as the CMU nodes. Outputs are pose_sequence (into the Pose Renderer), frame_count_out (handy for setting your generation length), and motion_info, a text description of what you just played.
Installing it
The pack itself is the usual dance:
cd ComfyUI/custom_nodes
git clone https://github.com/ckinpdx/ComfyUI-SCAIL-AudioReactive
pip install -r requirements.txt # taichi, numpy, torch, librosa
ComfyUI Manager can also find it if you search the pack title. The extra requirement here is Blender itself - that's not a pip package, it's a program. Install it from blender.org on your PATH or in a standard location, restart ComfyUI, and the dropdown populates. On Linux, /usr/bin/blender, /snap/bin/blender and /opt/blender* are all checked.
Common issues
The two failure modes are the two dropdowns. Blender missing or in a weird spot → the node throws "Blender not found. Please install Blender and restart ComfyUI." FBX folder empty → the dropdown just says "NO FBX FILES." Both are self-explanatory once you see them. One real gotcha: Mixamo FBX exports can be huge and detailed, so a 30-second clip takes a while to extract - that's Blender chewing, not a hang. Keep target_fps at your video fps and you'll get frame counts that line up with the rest of the pack.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| fbx_file | COMBO | FBX file from ComfyUI/input/fbx_animations/ folder | |
| blender_version | COMBO | NOT FOUND - Install Blender | 1 options: NOT FOUND - Install Blender |
| target_fps | INT | 241–120 | Output FPS (will resample if different from source) |
| transition_frames | INT | 120–60 | Blend frames from reference pose |
| scail_poseopt | SCAIL_POSE | Reference pose for scaling/positioning | |
| pose_sequence_inopt | SCAIL_POSE_SEQUENCE | Chain from previous motion |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| pose_sequence | SCAIL_POSE_SEQUENCE | — |
| frame_count_out | INT | — |
| motion_info | STRING | — |