ProxyPose Sampler (Bruxos)
The node that turns a clicked pixel into a 6-DoF pose track
- pipe
- gen_config
- images
- prompt
- visualization
- poses_json
This is the payoff node. Everything else in the pack exists to feed this one: the Model Loader hands it a ready Wan 2.1 pipeline, the Point Prompt hands it a single pixel, your video goes in, and out comes a visualization plus a machine-readable pose trajectory. If you want to know what ProxyPose actually is, you want to know what happens inside this node.
The short version: it cuts a square around your pixel, renders a colored cube "glued" to the object, asks Wan to generate a video where the cube stays stuck and rotates along with the object, then runs perspective-n-point (PnP) tracking to recover the camera-relative pose frame by frame. Rotation and translation, all six degrees of freedom, from one click. That last step - the tracking - is where the "AI video" work stops being a party trick and becomes data you can feed to compositing software, a game engine, or a matchmove.
The inputs that matter
images- your video as a batch of frames, at full resolution. Do not pre-crop it. The node does the square crop itself, and it crops around your point, so pre-cropping just misaligns the pixel coordinates you set in the Point Prompt.pipeandgen_config- straight from the Model Loader.prompt- from the Point Prompt.repo_path- must be identical to the Model Loader's.autouses the bundleddeps/proxypose.num_frames- default 49, and it matches Wan's temporal window for a reason. Wander far from it and quality drops off. It's also the count of input frames the node will process (it just truncates the batch), so it's your clip-length knob too.seed- the usual. Same seed, same cube drift; new seed, new drift.depth_anything_npz- the optional hidden gem. Point it at a*.da3.npzfrom Depth Anything 3 and the node estimates the camera focal length from it; leave it empty and it assumes a fixed 45° FOV. If you're compositing over real footage, the real focal length matters a lot, so this is worth doing for anything that isn't a quick test.
The outputs
Two of them, and they're different in kind:
visualization(IMAGE) - a five-column panel showing input / proxy render / tracking / overlay / prompt. Wire this into your Save Video node. It's also your debug tool: if the cube isn't glued where you clicked, you'll see it here instantly.poses_json(STRING) - the actual product. A JSON blob withrvec/tvecper frame, in OpenCV's rotation-vector convention. If you need 4×4 matrices, convert withcv2.Rodrigues(the ProxyPose repo hasconvert_tracking_resultsfor exactly this). Frames where tracking failed come back asnull, which is honest and useful.
The rough edges
This node is the heavy one - the Wan generation inside it is the slowest stage in the pack, fixed at 512×512 output, so budget real time per clip. And the usual pack-level gotchas apply here too: if fp8 + LoRA gives you junk or NaNs, drop the Model Loader to precision=bf16 with a vram_limit_gb set; if another custom node (comfy-dvd, WanVideoWrapper, WanAnimatePlus) is shadowing diffsynth, this node tries to evict and reimport the clean one. The README's isolated subprocess mode is the fallback if the import wars keep going.
The verdict: for something this fiddly to install, the output is remarkably direct. One pixel in, a full pose trajectory out - with a five-column picture proving what happened. If you're doing matchmoving, VFX, or camera-projection experiments on consumer hardware, this is currently the most direct path there is. Nobody else is even talking about ProxyPose in ComfyUI yet; you'd be early.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| pipe | PROXYPOSE_PIPE | — | |
| gen_config | PROXYPOSE_GENCFG | — | |
| images | IMAGE | Video de entrada como batch de frames. | |
| prompt | PROXYPOSE_PROMPT | — | |
| repo_path | STRING | auto | 'auto' (ou vazio) = usa o deps/proxypose empacotado. Igual ao do Model Loader. |
| track_config | STRING | configs/tracking/default.yaml | YAML de tracking (relativo ao repo_path ou absoluto). |
| num_frames | INT | 491–200 | Numero de frames processados (49 casa com a janela do Wan). |
| seed | INT | 1230–2147483647 | — |
| device | COMBO | cuda | 2 options: cuda, cpu |
| depth_anything_npzopt | STRING | Opcional: *.da3.npz pra focal; vazio = FOV fixo de 45graus. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| visualization | IMAGE | — |
| poses_json | STRING | — |