PosePoint Selector (frame)
Grab one frame out of a pose sequence without mutilating your graph.
- pose_point
- pose_point
- selected_index
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_pointis 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_indexbeyond the last frame gives you the last frame, not an error.selected_indexis the only way to notice. If you're batch-processing many videos, wireselected_indexsomewhere 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.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| pose_point | POSE_KEYPOINT | — | |
| frame_index | INT | 00–4096 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| pose_point | POSE_KEYPOINT | — |
| selected_index | INT | — |