Nodes/ComfyUI-SCAIL-Pose2/SCAIL-Pose2 Pose Mask Geometry Align
ComfyUI Node

SCAIL-Pose2 Pose Mask Geometry Align

When your skeleton dances one meter to the left of your mask

By rookiestar28·Created 3 months ago·Updated 14 days ago· 13
SCAIL-Pose2 Pose Mask Geometry Align
  • pose_video
  • pose_video_mask
  • pose_video
  • summary

Every animation workflow hits the same silent killer eventually: the rendered pose looks right, but it's sitting in the wrong place relative to everything else. The skeleton was drawn on one canvas, the semantic mask was derived on another, and they disagree by a scale factor and a translation. The result is a video where the motion is technically there and visibly wrong.

SCAILPose2PoseMaskGeometryAlign exists to fix exactly that gap. It scales and translates your rendered pose foreground so its bounding box matches the SAM3-derived pose_video_mask bounding box - the same mask that drives the rest of the workflow.

What it does

Given a rendered pose image sequence and the colored semantic mask sequence, the node measures the actual foreground bbox in each, then solves the scale + translation that maps the pose onto the mask. The interesting part is that it applies conservative, transform-level temporal stabilization: an isolated one-frame bbox jump gets smoothed out rather than turning the whole sequence into a twitch, while real continuous motion is preserved. Jittery mask detections won't ripple through your render.

This matters because SCAIL-2's animation mode is picky about geometry. The pose images can be a half-resolution coordinate-equivalent downsample of the final canvas, but they can't be a different crop, a different projection, or a rescaled subject - the driving bbox has to match the mask bbox or the conditioning fights itself.

The inputs and outputs

Deliberately small. Two required inputs:

  • pose_video - your rendered pose sequence, typically RenderNLFPoses.image.
  • pose_video_mask - the driving semantic mask from SCAILPose2ColoredMask.pose_video_mask. Use the same mask you feed the Condition node; feeding it a different one is a fast way to confuse yourself.

Outputs are pose_video (the aligned image sequence, ready for SCAILPose2SCAIL2Condition.pose_video) and a summary string with the geometry diagnostics.

When to actually reach for it

Here's the nuance the name hides: current versions of RenderNLFPoses already have an optional pose_video_mask input that applies this exact alignment inline. So this standalone node is mainly for two cases - you already rendered poses with an older pipeline, or you need a manual repair step in an existing workflow. If you're starting fresh, prefer wiring the mask into RenderNLFPoses directly and save yourself a node.

Troubleshooting

If the alignment looks off, check the obvious thing first: are pose_video and pose_video_mask actually derived from the same source canvas? The README is blunt that half-resolution renders are fine, but only if they're a coordinate-equivalent downsample of the same shot. A mask from a different crop is not something this node can fix - it aligns, it doesn't resurrect.

It's a utility node, and a good one, but it's not the star of the show. In replacement mode you don't need it at all - that path uses the raw driving video, not rendered skeletons. You reach for this in animation-mode repair, and it does its one job quietly.

CategorySCAIL-Pose2/SCAIL-2

Inputs (2)

NameTypeDefaultDescription
pose_videoIMAGE
pose_video_maskIMAGE

Outputs (2)

NameTypeDescription
pose_videoIMAGE
summarySTRING