UltraShape Output To Trimesh
The bridge that keeps your refined mesh in the graph
- refined_mesh
- trimesh
UltraShape Refine hands you a ULTRASHAPE_OUTPUT, which is a socket type only this pack understands. If you want to do anything with the refined mesh outside this pack - texture it, decimate it, simplify it, save it with a non-UltraShape saver - you first need to get it into a type the rest of the 3D ecosystem speaks. That's this node: one input, one conversion, a TRIMESH out.
It exists because of how the 3D workflow actually shakes out in practice. UltraShape is a geometry refiner - it sharpens the surface, but it doesn't texture anything. The community workflow that surfaced when this pack launched (r/comfyui, Jan 2026) is: generate your coarse mesh with Trellis 2 or Hunyuan3D, refine it here, then run the refined geometry through a texturing pipeline. That pipeline is Trellis2-family territory, and Trellis2 nodes speak TRIMESH. This node is the Rosetta stone between the two halves of the graph.
What it does
- Input:
refined_mesh(ULTRASHAPE_OUTPUT, from UltraShape Refine). - Output:
trimesh(TRIMESH).
Under the hood it unwraps the refined mesh and passes the underlying trimesh.Trimesh object through untouched - no resampling, no simplification, no vertex count change. The conversion is instant and lossless; the only reason it's a node at all is socket typing.
Where it plugs in
The classic bridge is: Refine → Output To Trimesh → Trellis2 texture-gen or Trellis2 Simplify Trimesh → UltraShape Save Mesh (or the Trellis2 export node) → a textured .glb. You can also loop the mesh back through UltraShape Load Coarse Mesh From Trimesh for a second refinement pass, since that node eats TRIMESH directly - a handy way to chain detail without ever touching disk.
Honestly, if you never install a Trellis2 pack, you might not need this node at all - the pack's own UltraShape Save GLB/OBJ writes the refined output fine on its own. It earns its place the moment you want to hand your refined geometry to anything outside this pack, or to reuse it inside the pack as a TRIMESH.
Install and notes
cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyUI-UltraShape1
cd ComfyUI-UltraShape1
pip install -r requirements.txt
Restart; ComfyUI Manager installs it as ComfyUI-UltraShape1. No weights are needed for this node itself - it only converts what the Refine node already produced. The only practical gotcha is the same socket-typing story in reverse: the TRIMESH output only connects to nodes that accept TRIMESH, so if your downstream doesn't light up, that's the reason. And remember the conversion is just a handoff - whatever quality the Refine node gave you (sharp edges included, internal clutter mostly absent, per the community reports) is exactly what arrives downstream. This node won't clean it up; it just makes it reachable.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| refined_mesh | ULTRASHAPE_OUTPUT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| trimesh | TRIMESH | — |