Convert USD
The bridge from generated 3D straight into OpenUSD
- mesh
- USD
This is the node that makes the pack matter for people who aren't USD nerds yet. ComfyUI's 3D stack - Hunyuan3D, TRELLIS, TripoSR, the whole image-to-3D corner of the ecosystem - spits out a MESH socket: vertices, faces, maybe UVs, sitting in a tensor structure. That socket is ComfyUI's own convention, and almost nothing outside the 3D node family understands it. Convert USD takes that MESH and turns it into a real USD stage with a UsdGeom.Mesh inside, which means everything else in this pack - materials, lights, cameras, composition - can finally touch it.
So the workflow that actually justifies installing this pack is: generate a mesh from an image (TripoSR for speed, Hunyuan3D for quality), pipe it into Convert USD, then use Apply USD Material and the lighting nodes to dress it up, and Save USD to ship it. You get a generated object that has left the AI-3D toy world and entered the interchangeable scene-format world. That's the whole pitch.
How it works
The node pulls the vertices and faces off the MESH (it expects a tensor-backed mesh object, the kind ComfyUI's 3D generators produce), rebuilds it as a trimesh mesh, then writes a proper USD mesh prim with:
- points (vertices), faceVertexIndices and faceVertexCounts - the actual geometry
- normals, if the source mesh has them
- primvars:st UVs, if the mesh carries them - which matters if you want a texture to map correctly later
It also registers the resulting USDA in the pack's in-memory stage store so the interactive viewer can show it without a file on disk. One input, mesh (the MESH socket), one output, USD.
Fair warning on the output quality: generated meshes are famously triangle soup with machine-made UVs - the 3D-generation literature calls this out constantly. Convert USD is not a retopology pass; it faithfully converts whatever the generator gave you. For static props and previews that's fine. For anything that needs clean topology, budget for a cleanup pass before or after.
Install & gotchas
Same pack install as everything here: ComfyUI Manager → "ComfyUI-OpenUSD", or
cd ComfyUI/custom_nodes
git clone https://github.com/cjhosken/ComfyUI-OpenUSD
then restart. This node specifically needs trimesh, which the pack pins (trimesh==4.12.2) alongside usd-core==26.5 and numpy==2.5.0 - if you install the pack and the node complains trimesh is missing, pip install -r requirements.txt inside the pack folder fixes it.
Two gotchas. First, the MESH input only comes from ComfyUI 3D sources - the socket won't appear on, say, a Load3D node's output if it doesn't emit the tensor MESH type. Match the sockets. Second, the pack's USD socket is its own type, so the output connects to OpenUSD nodes but not back into the 3D generator family - the bridge is one-way. That's fine; it's the direction you want.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| mesh | MESH | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| USD | USD | — |