Lux3D Multi-Format Export
Turn that GLB into USDZ, OBJ, or FBX without a conversion script in sight
- model_url
- task_id
- glb
- usdz
- obj_zip
- fbx_zip
So you generated a .glb - now what? If the destination is an AR product view, an Unreal scene, or a Blender sculpt you want to actually edit, GLB might not be the format anyone downstream asked for. Lux3D Multi-Format Export is the pack's deliverable node: you feed it a .glb or a Lux3D .zip, pick your target formats, and it hands back URLs for USDZ, OBJ, and FBX.
The format-to-destination map is the short version of why this node exists. USDZ is the Apple/AR Quick Look format - the "view it in your living room" deliverable for product shots. FBX is what game engines and animation pipelines eat for breakfast. OBJ is the universal survivor that Blender, 3D printers, and every tool with an import menu can read. Getting any of these locally means wrangling assimp, trimesh, or a conversion script plus its dependency tree; this node offloads the conversion to Lux3D's servers and hands you links.
How it works
Same create-then-poll pattern as the rest of the pack: the node takes your model_url, uploads it if it's a local file, POSTs to /lux3d/v1/multi-format-export/task/create, and polls task/get until the exports are done. What comes back are URLs on Lux3D's storage - download them before they expire.
Inputs and outputs
- model_url - a public HTTP(S)
.glb/.zipURL, an upstreamSTRING, or a local ComfyUI file. The local side is nicer than the other nodes because it gives you a file picker:.glbor.zipin yourinputfolder shows up in a dropdown, and you can even reference files inoutput/tempby appending[output]or[temp]to the name. - output_format -
default,usdz,obj_zip,fbx_zip, and comma combos. One real gotcha here: a GLB input needs at least one explicit format.defaultonly applies when you feed it a ZIP. Pick GLB + no format and you'll get an error, not a shrug.
Output sockets are task_id, glb, usdz, obj_zip, fbx_zip. The glb output is just the model URL passed back when the service returns it; the formats you didn't ask for come back as empty strings. Wire whatever you actually need into a downloader node.
Install
# ComfyUI Manager → Custom Nodes → Install via URL
# https://github.com/manycore-research/ComfyUI-Lux3D.git
# or:
comfy node install lux3d
# or manually:
cd path/to/ComfyUI/custom_nodes
git clone https://github.com/manycore-research/ComfyUI-Lux3D.git
pip install -r requirements.txt
Set the API key env var matching your endpoint (LUX3D_API_KEY_CN for https://api.aholo3d.cn, LUX3D_API_KEY_INTL for https://api.aholo3d.com), restart ComfyUI. Requirements are just requests, Pillow, and numpy - the conversion happens remotely, so there's no local mesh library to install and no model files to download.
Where people get burned
The empty-string outputs trip people up first: they feed in a GLB, ask for everything, and see glb empty because they didn't select glb as an output. Empty string means "not requested," not "failed." Second: this is a cloud call, so local files are uploaded to Lux3D before conversion - if your model is proprietary, the file leaves your machine, same as every other node in this pack. And keep the same honesty check as the generation nodes: conversion is a solved problem and this is genuinely convenient, but for one-off local conversions, a free Blender or trimesh pass may be cheaper than spending API credits. Where it shines is when the GLB just came out of Lux3D Image to 3D anyway, and you want the whole chain - generate, then export to the format your game engine actually imports - inside one graph.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| base_api_path | STRING | https://api.aholo3d.cn | Use https://api.aholo3d.cn or https://api.aholo3d.com. The matching server API key environment variable is used. |
| model_url | STRING,LUX3D_MODEL_SOURCE | Public HTTP(S) .glb/.zip URL or a ComfyUI input/output/temp relative file (for example model.glb or model.glb [output]). | |
| output_format | COMBO | default | 8 options: default, usdz, obj_zip, fbx_zip, usdz,obj_zip, usdz,fbx_zip, +2 |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| task_id | STRING | — |
| glb | STRING | — |
| usdz | STRING | — |
| obj_zip | STRING | — |
| fbx_zip | STRING | — |