Nodes/ComfyUI-Panda3d/Panda3dAttachNewNode
ComfyUI Node

Panda3dAttachNewNode

The 'empty' node for organizing a 3D scene

By chaojie·Created 3 years ago·Updated 2 years ago· 17
Panda3dAttachNewNode
  • base
  • parent
  • base
  • model
nodepath
x0.0
y0.0
z0.0
h0.0
p0.0
r0.0
sx1.0
sy1.0
sz1.0

In Blender you add an "empty": a point in space with a position, an orientation and a name, but no visible geometry. Panda3dAttachNewNode is that, for the chaojie/ComfyUI-Panda3d pack. It creates a blank transform node inside the 3D scene graph, parents it to an existing model, and gives you a handle you can move around. Alone it renders nothing - but as a mount point or a grouping anchor, it's quietly one of the more useful nodes in the pack.

How it works

The mechanism is a single Panda3D call: parent.attachNewNode(nodepath), where nodepath is just the name you want the node to have (it's a string input, not a file path - the naming is confusing, I know). The result is an empty NodePath parented to whatever you wired in, with the transform you set applied to it.

The demo workflow shows exactly why this matters. The carousel has four pandas riding around it. Instead of loading four copies of the panda model directly onto the carousel, the workflow creates four empty nodes (named panda0 through panda3), positions each around the ring, and then parents a panda model to each empty. The empties do the positioning; the models just ride along. If you animate or rotate the empty, everything attached to it moves with it - that's the whole point of a transform node.

The inputs that matter

  • parent (Panda3dModel) - what to attach to. render from Panda3dBase for a world-space empty, or another model's output to make it a child.
  • nodepath - a name for the new node. Only really matters if you're poking around in the scene graph.
  • x / y / z, h / p / r, sx / sy / sz - the transform. Same conventions as Panda3dLoadModel: position, heading/pitch/roll in degrees, per-axis scale.

Outputs are base (the engine, passed through - chain it onward) and model, the empty's handle. Feed that handle into another Panda3dAttachNewNode's parent to build hierarchies, or into Panda3dTest if you want to animate the empty itself.

Installing it

Part of the one pack, so it comes with all the others. ComfyUI Manager, search ComfyUI-Panda3d, or:

cd ComfyUI/custom_nodes
git clone https://github.com/chaojie/ComfyUI-Panda3d
cd ComfyUI-Panda3d
pip install -r requirements.txt

Restart ComfyUI and the Panda3d category appears.

Common issues

  • "It renders nothing." Correct - that's the feature. An empty has no mesh. You're meant to parent models to it, and the demo does exactly that.
  • "The name field isn't a path." nodepath is a label, not a file. People trip on this once and then it's obvious.
  • "My model doesn't inherit the empty's position." It only inherits if you wire the model's parent input to the empty's model output. Parent the model directly to render and it'll ignore the empty entirely.

For anything more complex than a static object - a rotating arm, a moving platform, pandas on a carousel - this is the node that makes it manageable.

CategoryPanda3d

Inputs (12)

NameTypeDefaultDescription
basePanda3dBase
parentPanda3dModel
nodepathSTRING
xFLOAT0.0-1000–1000
yFLOAT0.0-1000–1000
zFLOAT0.0-1000–1000
hFLOAT0.0-1000–1000
pFLOAT0.0-1000–1000
rFLOAT0.0-1000–1000
sxFLOAT1.0-1000–1000
syFLOAT1.0-1000–1000
szFLOAT1.0-1000–1000

Outputs (2)

NameTypeDescription
basePanda3dBase
modelPanda3dModel