Nodes/SAM3D Cam Shot Toolkit/Cam Shot Toolkit: Save Meshes (GLB)
ComfyUI Node

Cam Shot Toolkit: Save Meshes (GLB)

The one node that gives you an actual rigged human

By EnviralDesign·Created 5 months ago·Updated 12 days ago· 1
Cam Shot Toolkit: Save Meshes (GLB)
  • mesh_data
  • model
  • skeleton
  • reference_image
  • file_path
filename_prefixsam3d/body
riggingauto

If you've spent any time in image-to-3D, you know the standard output: a pretty mesh that's triangle soup with no rig, and the community verdict that anything needing to deform or animate is where generated 3D falls apart. This node is the notable exception in this pack, because it doesn't hand you a raw mesh - it writes a GLB with an actual armature, skeleton, and skin binding built in. That's the difference between "here's a statue of your subject" and "here's your subject, posed and ready to drop into Blender, Unreal, or a viewer."

How it works

You feed it mesh_data from Process Image and it writes a single .glb containing every reconstructed person (each named person_000, person_001, …). The interesting decisions are all in one dropdown, rigging:

  • auto (default) - armature + skin binding. If you also connect the optional model input, it extracts the real skin weights and joint hierarchy from the MHR parametric model and binds the mesh with those. No model connected? It falls back to auto-computed skin weights from the joints. Either way, you get a mesh that actually deforms.
  • skeleton_only - armature present, mesh not bound. The bones show and the rig is there, but it's not driving the mesh. Useful when you want to re-skin it yourself in Blender.
  • none - plain meshes, no armature at all. The fastest, most portable output for static props.

Two other optional inputs earn their keep: skeleton (from Process Image) supplies the joint parent hierarchy so the armature has proper bone relationships instead of a flat chain, and reference_image (the original photo) makes it emit a matching capture camera into the GLB - FOV derived from the reconstruction's focal length and the photo's aspect. That's a genuinely nice touch: the GLB arrives with the camera that shot the original, so your render setup in an external app lines up with the pack's Render Offset View.

The output is file_path (a STRING), and since this is an output node, ComfyUI shows the path in its UI text panel - that's where you go to find your file.

Where the file lands

filename_prefix defaults to sam3d/body, and it's relative to ComfyUI's output folder. So you'll get ComfyUI/output/sam3d/body_00001.glb. Subfolders are allowed - character/shot_a works - which keeps a batch of shots organized without post-hoc file moving.

Installation

Same as every node in this pack:

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

Restart, and you'll find "Cam Shot Toolkit: Save Meshes (GLB)" under the pack in Manager if you installed that way instead.

Where people get burned

The one trap: expecting auto rigging to always give real skin weights. It only extracts the true MHR weights when you also wire the model input into this node - and since Process Image's model comes from the Load node anyway, running that wire costs you nothing but a connection. If you skip it, auto weights are fine for a rough pose but noticeably less clean when you start bending limbs in Blender. Also worth setting expectations: this is a fitted parametric body, not a high-res scan, so the geometry is game-engine-usable but not hero-asset quality - the topology and UVs are what a fitted SMPL-style model gives you, which is exactly why the pack pairs it with calibrated camera work rather than promising a film-ready mesh.

CategoryCamShotToolkit/io

Inputs (6)

NameTypeDefaultDescription
mesh_dataSAM3D_OUTPUTMesh data from the SAM3D process node.
filename_prefixSTRINGsam3d/bodyOutput name under the ComfyUI output folder. Subfolders allowed.
riggingCOMBOautoauto: armature + skin binding (real weights if available, else auto weights). skeleton_only: armature present but mesh not bound. none: plain meshes.
modeloptSAM3D_MODELOptional. Enables extracting the real skin weights / joint hierarchy from the MHR model.
skeletonoptSKELETONOptional. Provides the joint parent hierarchy for the armature.
reference_imageoptIMAGEOptional. The image the reconstruction came from; used to emit a matching capture camera (FOV from focal length + aspect).

Outputs (1)

NameTypeDescription
file_pathSTRING