Nodes/SAM3D Cam Shot Toolkit/Cam Shot Toolkit: Save Pose Rig
ComfyUI Node

Cam Shot Toolkit: Save Pose Rig

Save a pose once, reuse it in a thousand synthetic shots

By EnviralDesign·Created 5 months ago·Updated 2 days ago· 1
Cam Shot Toolkit: Save Pose Rig
  • mesh_data
  • model
  • skeleton
  • reference_image
  • rig_dir
  • rig_entry_json
label
rig_setpose_rigs/default
count0
riggingauto

Reconstructing a human mesh from a single photo is slow, and doing it every time you want a pose reference is a waste of your afternoon. Save Pose Rig is the archiving step in the Cam Shot Toolkit's posing group: it takes the mesh that comes out of the pack's SAM3D processing chain and files it away as a named, reusable "rig" - a rigged .glb plus an entry in a rig.json index. Next run, you don't re-reconstruct the person; you Load the rig and reuse the pose.

The bigger picture first. This pack is EnviralDesign's focused extraction of the SAM3D-Body ecosystem - Meta's SAM 3D Body model, which landed November 2025 and recovers a full articulated human mesh from one image, wrapped for ComfyUI by Pozzetti's ComfyUI-SAM3DBody. These posing nodes exist to turn those reconstructions into a library of gestures, then procedurally assemble synthetic pose-reference scenes from it. Save is where a single good reconstruction becomes part of that library.

What it writes

Give it a mesh_data (SAM3D_OUTPUT, from the pack's Process Image node) and a label, and it does the following:

  • Extracts the person meshes and anchors them feet-on-the-floor with +Y up - so the GLB opens standing on a ground plane in Blender, not floating mid-air.
  • Rigs them, if you want: rigging accepts auto (armature + skin binding), skeleton_only, or none - same semantics as the pack's Save Meshes (GLB) node.
  • Writes <set>/<label>.glb and records a rig.json entry carrying the actor count, footprint and bounding box, capture camera (focal, aspect, image size) and a SHA-256 of the source image when you connect reference_image.

The label matters - it becomes the rig id and file name, and it's the gesture the whole pipeline keys on (think wave, star_jump, 01_turn). It gets sanitized through safe_rig_id: alphanumerics and -_ . survive, everything else becomes an underscore, and it must contain at least one alphanumeric character or the node throws. So give it a real name, not an empty string.

Inputs and outputs worth knowing

Required: mesh_data, label, rig_set (folder, default pose_rigs/default - relative paths live under the ComfyUI output folder), count (actor count for this gesture; 0 = however many people were reconstructed), rigging. Optional: model (a SAM3D_MODEL, for real skin weights and joint hierarchy from the MHR model), skeleton (joint parent hierarchy for the armature), and reference_image (records the capture camera and source hash - worth connecting if you want provenance in your dataset).

It returns rig_dir (the folder the rig landed in) and rig_entry_json (the full entry). It's an output node, so you also get a text readout of the path it wrote.

Install

ComfyUI Manager (search sam3d-body-comfyUI-camshottoolkit) or:

cd ComfyUI/custom_nodes
git clone https://github.com/EnviralDesign/sam3d-body-comfyUI-camshottoolkit
cd sam3d-body-comfyUI-camshottoolkit
python -m pip install -r requirements.txt

Restart ComfyUI after installing. Note that this node is the upstream-heavy end of the pack: the first time you run the SAM3D loader, weights auto-download into ComfyUI/models/sam3dbody (and the person detector into ComfyUI/models/sam3_person_detector, trying the gated facebook/sam3 first and falling back to an ungated mirror). Those downloads are one-time, but they're the reason the first run feels slow.

Gotchas

The most common failure here isn't in this node - it's upstream. If you haven't actually run the SAM3D pipeline (Load SAM3D Model → Load SAM3 Person Detector → Process Image), there's no SAM3D_OUTPUT to feed in, and "No mesh vertices/faces found in mesh_data" is the honest result. Reconstruct first, save second.

The good news about the GLB end: the rigged export is meant to open in Blender, so if you want to eyeball what you archived, that's the place - a human mesh reconstructed from one photo is never production topology, but as a pose reference asset it's exactly what the rest of this pack expects.

CategoryCamShotToolkit/posing

Inputs (8)

NameTypeDefaultDescription
mesh_dataSAM3D_OUTPUTMesh data from the SAM3D process node.
labelSTRINGGesture label this rig stands for (becomes the rig id and file name).
rig_setSTRINGpose_rigs/defaultRig set folder. Relative paths live under the ComfyUI output folder.
countINT00–32Actor count for this gesture. 0 = number of reconstructed people.
riggingCOMBOautoSame as Save Meshes (GLB): armature + skin binding, armature only, or plain mesh.
modeloptSAM3D_MODELOptional. Real skin weights / joint hierarchy from the MHR model.
skeletonoptSKELETONOptional. Joint parent hierarchy for the armature.
reference_imageoptIMAGEThe image the reconstruction came from. Records the capture camera (focal, size) and the source hash in rig.json.

Outputs (2)

NameTypeDescription
rig_dirSTRING
rig_entry_jsonSTRING