Nodes/comfyui-easy-sam3-tools/PosePoint Selector (frame)
ComfyUI Node

PosePoint Selector (frame)

Grab one frame out of a pose sequence without mutilating your graph.

By SuLU-K·Created 9 months ago·Updated 8 months ago· 9
PosePoint Selector (frame)
  • pose_point
  • pose_point
  • selected_index
frame_index0

When a video goes through pose detection, the POSE_KEYPOINT you get back isn't one pose - it's a sequence, one entry per frame. Most downstream pose nodes want exactly one. You could build a slicing workaround out of list utils and pray, or you could drop in PosePointSelector, which does the one thing its name promises: pull a single frame's pose out of a POSE_KEYPOINT list.

It's a two-port node with a dead-simple job. In: pose_point (POSE_KEYPOINT) and frame_index (INT, default 0, min 0, max 4096). Out: pose_point again - now a one-element list - plus selected_index (INT), which tells you which frame you actually got. Use it when you've got video pose data and you want to feed, say, frame 12 into a pose editor or a mask generator instead of the whole rolling sequence.

How it works

There's no heavy machinery here, and that's the point. The node takes the frame_index you set, clamps it into the valid range [0, len-1], and returns [pose_point[idx]] plus the clamped index. The clamping is the behavior worth knowing about: an out-of-range index doesn't error out - it silently lands on the last frame (or the first, if you went negative). That's friendlier than a crash, but it's also the kind of silent fallback that will puzzle you later, which is exactly why selected_index is wired out. Read it when you're not sure your number was in range.

The output stays a list even though you asked for one frame, because the whole POSE_KEYPOINT ecosystem expects a list of people/frames. If it returned a bare dict, every downstream node would reject it. This keeps the wire type honest.

The two inputs that matter

  • pose_point (POSE_KEYPOINT) - the sequence from your detection/pose node.
  • frame_index (INT, 0–4096, default 0) - which frame you want. You're almost certainly animating or scripting this rather than leaving it at 0.

Outputs: pose_point (one-element POSE_KEYPOINT) and selected_index (INT). If you're looping a video, you can also wire selected_index into whatever needs to know the frame number - handy for keying other nodes to the same moment.

Installing it

Standard pack install, same as every node in this set:

  • ComfyUI Manager → search comfyui-easy-sam3-tools → Install → restart.
  • Or:
cd ComfyUI/custom_nodes
git clone https://github.com/SuLU-K/comfyui-easy-sam3-tools

Then restart ComfyUI. No extra dependencies, no model files - this node is pure list slicing, so it only needs what ComfyUI already ships. It lands under Test Nodes/Pose; this pack is a small personal utility set, and this is one of its two pose-glue nodes (the other, ConvertPoseDataToPosePoint, adapts POSEDATA into POSE_KEYPOINT for editors).

Gotchas

  • Empty input raises. If pose_point is an empty list, the node throws "pose_point must be a non-empty list (POSE_KEYPOINT)" rather than returning nothing. If that appears, your upstream detection found zero poses on the frames you're feeding it - check the source, not this node.
  • Clamping is silent. frame_index beyond the last frame gives you the last frame, not an error. selected_index is the only way to notice. If you're batch-processing many videos, wire selected_index somewhere visible or accept that the tail frames may repeat.

It's a tiny utility, and it doesn't try to be more. But "pick frame N out of a pose sequence" is a surprisingly common operation, and doing it here beats hand-rolling a list slice every single time.

CategoryTest Nodes/Pose

Inputs (2)

NameTypeDefaultDescription
pose_pointPOSE_KEYPOINT
frame_indexINT00–4096

Outputs (2)

NameTypeDescription
pose_pointPOSE_KEYPOINT
selected_indexINT