ConvertTo3DFormat
Send your mesh to the cloud, get back the format you actually need
- model_path
You just made a 3D model in ComfyUI and now it's sitting on your disk as a .glb, and you need a .stl for your printer or a .step for some CAD person. Welcome to the most boring wall in 3D work: file format conversion. ConvertTo3DFormat is the node that knocks it down - it takes a mesh file, uploads it to the NSDT cloud converter, and hands you back a converted file in a format you pick from a dropdown.
This is the main node of the ComfyUI-3D-Convert pack, and here's the part to understand before you get excited: it doesn't convert anything locally. It's a thin HTTP wrapper around the 3dconvert.nsdt.cloud API. Your file goes up to their servers, gets converted there, and comes back down. That means it needs an API key, it needs an internet connection, and if your mesh is sensitive, it's now on someone else's machine. The trade-off is the format reach - the README lists over 40 input formats (GLB, OBJ, PLY, STL, FBX, DXF, STEP, LAS/LAZ point clouds, IFC, even DWG and Revit files) going to 13 outputs.
How it actually works
The code in util/nsdt.py is honest and short. It uploads your file as a multipart POST to tumo.nsdt.cloud/api/file/{extension}/main with your key as a Bearer token, then polls a GraphQL endpoint every three seconds until the server reports the conversion finished. Then it resolves the converted object's ID and downloads the result to a new file sitting right next to your original, named {yourfile}.{target_type}. So if you convert bunny.glb to stl, you get bunny.glb.stl in the same folder. Easy to find, if slightly redundant-looking.
The inputs that matter
Only three required inputs, and honestly only two of them need your attention:
file_path- the absolute path to the 3D file you're converting. Usually this comes fromLoad3DFile(same pack) or from a save/export node out of ComfyUI-3D-Pack. It must actually exist on disk, or the whole thing quietly fails.target_type- the dropdown that decides the output:gltf, glb, obj, ply, stl, xyz, off, dae, amf, 3mf, step, iges, fbx. If you're not sure,glborobjare the safe defaults;step/igesare the CAD exports.api_key- your NSDT key. Wire it in from theLoad3DConvertAPIKEYnode rather than pasting it here, so you've got one place to manage it.
The single output, model_path, is a string with the absolute path of the converted file. You can feed it into a preview or save node, or just go grab the file - the conversion is the whole point, there's no 3D viewport attached.
Installing it
Two ways, both standard. Easiest is ComfyUI Manager - search for "ComfyUI-3D-Convert" and install. Or do it by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/nsdtcloud3d/ComfyUI-3D-Convert
Then restart ComfyUI. There's no heavy dependency drag here: the entire requirements.txt is one line, Requests. No torch extension, no CUDA, no model downloads. It's one of the lightest installs in the 3D corner of the ecosystem, precisely because all the heavy lifting happens on NSDT's side.
Where people get burned
- You need a real key. Grab one from https://3dconvert.nsdt.cloud/. The node's default placeholder text is literally "Get your API KEY from: https://3dconvert.nsdt.cloud/" - if you run it with that as the key, the upload dies with an auth failure.
- Silent failure is the trap. Look at the code: if the upload or conversion fails for any reason, the node returns the original
file_path, not a converted one. Your workflow keeps running, you glance at the output path, and it looks fine - because it's the input file, unconverted. Check thatmodel_pathends in your target extension before trusting it. - It's network-bound. Big meshes mean a big upload, plus the server polls every three seconds, so a dense point cloud can take a while. Don't expect this to be instant.
- If you hit a
ModuleNotFoundErroron import, you're on an old checkout - there was a genuine import bug in the pack's early days (someone even filed a PR about relative imports).git pullin the custom_nodes folder to get the fix.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | — | |
| file_path | STRING | — | |
| target_type | COMBO | 13 options: gltf, glb, obj, ply, stl, xyz, +7 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model_path | STRING | — |