Nodes/ComfyUI/Load 3D & Animation
ComfyUI Node Runs on cloud

Load 3D & Animation

The node that put a 3D viewport inside ComfyUI

By Comfy-Org·Created 4 years ago·Updated 36 minutes ago· 129,963
Load 3D & Animation
  • image
  • image
  • mask
  • mesh_path
  • normal
  • camera_info
  • recording_video
  • model_3d
  • model_3d_info
model_file
width1024
height1024

The moment you add Load 3D to the canvas, the node itself becomes a 3D viewport. Not a dropdown, not a "pick a file" box - a real orbiting, zooming 3D viewer with gizmos, lighting, an HDRI skybox, and animation playback controls all living inside the node. It's ComfyUI's way of saying "yes, this app is a 3D tool now." If you're making a mesh in ComfyUI and want to actually look at it, or you want to turn a model into a rotating video, this is where you start.

It ships with ComfyUI core - nothing to install, nothing to clone. It's part of the "3d" category and, fair warning, it's marked experimental. The node has been around since December 2024 (animation support merged in late 2025), but the whole 3D family is still being actively reshaped, so don't be shocked when an update moves things around.

How it works

Under the hood it's a loader plus a live viewer. Pick a model in the model_file dropdown and it appears in the embedded viewport, where you can orbit, pan, drop a gizmo on it, change the lighting, swap the HDRI, or stick a background image behind it. Everything you see there - the camera angle, the render, the mask, the normal pass - is what the node outputs. It's a WYSIWYG node in the literal sense.

Model files come from ComfyUI/input/3d/ (any subfolder inside works), and it accepts the formats you'd expect plus a couple you wouldn't: .gltf, .glb, .obj, .fbx, .stl, and the splat formats .ply, .splat, .spz, .ksplat. The dropdown only lists what's in that folder when the node was created, so if a file isn't showing up, either refresh or just drag-and-drop it straight onto the viewport.

The inputs and outputs that matter

The one that confuses everyone: the image input isn't an image you pass in. It's the viewport widget itself - the state of the 3D viewer. The two width/height numbers (default 1024×1024) control the resolution of the rendered captures.

The outputs are where this node earns its keep, because it hands you almost everything at once:

  • image - a normal render of the current view, straight into an IMAGE socket.
  • mask - the model's silhouette as a MASK. Great for compositing or feeding a ControlNet.
  • normal - the normal pass as an IMAGE.
  • camera_info - the current camera (position, target, FOV, zoom), ready to be reused by a Render Splat or another preview.
  • recording_video - if you hit record in the viewport and move the camera, this outputs the animation as a VIDEO you can wire straight into video nodes.
  • mesh_path - the model file's path as a string, handy when something downstream wants a path.
  • model_3d and model_3d_info - the raw file and its metadata, for the newer file-passing nodes.

Where people get burned

The big one is the "Invalid 3D model file" error. It usually means the file path isn't resolving - historically the node double-resolved paths, which was fixed in mid-2026, but if you moved or renamed the file after picking it, the old path points nowhere and you get exactly that message. Re-pick the file.

Second: don't assume mesh_path and model_3d are the same thing for every format. The path output works for anything, but if your downstream node is a mesh pipeline (like Voxel to Mesh or Save 3D Model expecting a MESH), a splat won't feed it. Watch the socket types.

And a general note: this is the viewport-centric loader. If your goal is just to move a file into the graph without rendering anything, its sibling Load 3D (Advanced) is the leaner choice - no image/mask/normal outputs, just the file. Reach for this one when you want to look at the thing and film it, reach for that one when you want to feed a pipeline.

Category3d

Inputs (4)

NameTypeDefaultDescription
model_fileCOMBO1 options: none
imageLOAD_3D
widthINT10241–4096
heightINT10241–4096

Outputs (8)

NameTypeDescription
imageIMAGE
maskMASK
mesh_pathSTRING
normalIMAGE
camera_infoLOAD3D_CAMERA
recording_videoVIDEO
model_3dFILE_3D
model_3d_infoLOAD3D_MODEL_INFO