SCAIL Base Pose
Create 1 to 5 dancers out of thin air — no reference image needed
- custom_pose
- base_pose
Every dance sequence in this pack needs a starting skeleton, and there are two ways to get one: pull it from a real image with SCAILPoseFromDWPose, or just build one. SCAILBasePoseGenerator is the second path. It procedurally creates between 1 and 5 skeletons, side by side, with adjustable spacing - no reference image, no pose detector, no video. You can go from nothing to a five-person dance crew in one node, which is honestly the fastest way to start playing with this pack.
What it makes
A SCAIL pose is an 18-keypoint skeleton (OpenPose-style layout) in 3D world space. The node constructs it from a joint map scaled to your chosen height (400 is standard - that's the baseline the whole pack assumes), then places copies of it in a row:
pose_type-active_idle(default; a relaxed, dance-ready stance with arms loose),t_pose,a_pose, orcustom(pass your own skeleton intocustom_pose).character_count- 1 to 5. The pack's multi-character choreography (SCAILBeatDrivenPose's unison/mirror/random modes) really shines once you go above 1.spacing- horizontal distance between characters in world units (150 default). For a group shot, this is how you stop them colliding.depth- Z distance from the camera. Higher = further away and smaller on screen.center_x/center_y- offsets from frame center so you can park the dancer off-axis for composition.
The custom option is worth knowing about even if you rarely use it: with pose_type=custom and a custom_pose wired in, the generator becomes a passthrough that positions your pose - a handy way to control where a DWPose-derived skeleton sits.
Output and where it goes
Single output: base_pose (type SCAIL_POSE), which is exactly the required base_pose input of SCAILBeatDrivenPose. That's the intended flow: Generator → BeatDrivenPose → Renderer. You can also feed it into the scail_pose inputs of the CMU/FBX motion nodes as a reference for scaling and positioning, or into SCAILAlignPoseToReference to park a sequence at a generated skeleton's location.
When to reach for it
Reach for it when you want a clean, stylized dancer and don't care about matching a real character - think test renders, rhythm loops, or music-visualizer-style output where the skeleton is the art. Reach for SCAILPoseFromDWPose instead when the dancer needs to match a specific character's proportions and pose from your footage. A common hybrid: generate procedural skeletons for the crowd and use a DWPose base for the lead.
Installing
Shared pack install: clone ckinpdx/ComfyUI-SCAIL-AudioReactive into ComfyUI/custom_nodes, pip install -r requirements.txt, restart - or find the pack title in ComfyUI Manager. No models, no downloads, no audio needed. It's pure math, which makes it the cheapest node in the pack to experiment with.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| pose_type | COMBO | active_idle | Starting pose style. active_idle=relaxed dance-ready |
| character_count | INT | 11–5 | Number of characters to generate |
| spacing | FLOAT | 150.0050–500 | Horizontal distance between characters |
| height | FLOAT | 400.00 | Character height scaling. 400 is standard. |
| depth | FLOAT | 800.00 | Z-depth from camera. Higher = further away. |
| center_x | FLOAT | 0.00 | Horizontal offset from frame center |
| center_y | FLOAT | 0.00 | Vertical offset from frame center |
| custom_poseopt | SCAIL_POSE | Override with custom pose when pose_type='custom' |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| base_pose | SCAIL_POSE | — |