Lux3D Single Image Generator
The '3D' node that makes a 2D image — on purpose
- image
- task_id
- image_url
Let's get the naming confusion out of the way first: Lux3D Single Image Generator is not a 3D node. It never touches a mesh, and "OpenAPI" isn't a hint that it calls OpenAI. It's a cloud image-generation node that lives inside ComfyUI-Lux3D, the official ComfyUI pack for Lux3D (the image-to-3D service behind the aholo3d API endpoints). The reason a 3D pack ships a 2D generator: most "text-to-3D" is secretly text-to-image followed by image-to-3D, and this node is that text-to-image stage - hosted in the cloud and built to hand its output straight to Lux3D's real 3D nodes.
Why you'd reach for it
If you're running Lux3D Image to 3D, you need a source image - and Lux3D's image slots are fussy about where that image lives: a public HTTP(S) URL, an upstream STRING URL, or one locally-connected IMAGE. That's a real bottleneck when you only have a text idea or a rough photo you want cleaned up first. This node closes the loop without leaving the pack. It calls Lux3D's own multimodal-to-image API, which will happily generate a fresh image from your prompt alone, regenerate from a reference image, or redraw an image following text instructions - then returns you a hosted URL that plugs straight into the next Lux3D node's image slot.
It's also the answer to "I want to try 3D gen but my card can't do it" - an API-wrapper node for a closed service, where there's no open-weight local equivalent and no GPU to run one on anyway.
The inputs that actually matter
Only three knobs, and only one is required:
base_api_path- the region endpoint:https://api.aholo3d.cn(China, the default) orhttps://api.aholo3d.com(international). No trailing slash. This must match the API key you set (below), and the China and global keys are not interchangeable.image- optional. A public URL, an upstreamSTRINGURL, or one connectedIMAGE(local images get uploaded automatically before the task is submitted).prompt- optional multiline text. You need at least one ofimageorprompt; if you leave both empty the node raises a clear error.
One behavior worth knowing before it surprises you: image-only input is regenerated, not passed through. The README is explicit - you get a newly generated image back, never your source URL verbatim. So it's an image editor/re-generator, not an upload pipe.
How it works
Mechanically it's simple under the hood: the node POSTs a task to /lux3d/v1/generate/multimodal-to-image/task/create, then polls the task endpoint every 15 seconds for up to 60 checks - roughly 15 minutes. Because that polling blocks, ComfyUI will look frozen the whole time. That's normal; it's waiting on Lux3D's servers, not crashed. When it finishes you get two STRING outputs: task_id (handy for cross-referencing on the Lux3D dashboard if a job misbehaves) and image_url - a real hosted URL, never a base64 data blob.
Heads-up on that output type: image_url is a STRING, not an IMAGE tensor. You can't wire it into a VAE decoder or a standard Save Image without a URL-loader node in between. Chain it into Lux3D Image to 3D or Lux3D Multi-View Generator, or just open the URL in a browser to look at it.
Installing it
The pack itself is refreshingly light for a 3D-related install - no CUDA wheels, no model downloads, no local GPU needed. Dependencies are just requests, Pillow, and numpy. Via ComfyUI Manager, install the pack by URL (https://github.com/manycore-research/ComfyUI-Lux3D) and restart; or manually:
cd path/to/ComfyUI/custom_nodes
git clone https://github.com/manycore-research/ComfyUI-Lux3D.git
pip install -r requirements.txt
Then restart ComfyUI and set the API key in the environment of the process that starts ComfyUI - newer Lux3D nodes don't expose a key field on the canvas anymore:
# match base_api_path: .cn → LUX3D_API_KEY_CN, .com → LUX3D_API_KEY_INTL
export LUX3D_API_KEY_INTL="your_key_from_labs.aholo3d.com"
Grab keys at labs.aholo3d.com (international) or labs.aholo3d.cn (China). If you only use one region, set only its variable.
Where people get burned
- Region/key mismatch. The #1 failure: key from the China portal with an international
base_api_path, or vice versa. Pick one region and be consistent. - "My workflow is stuck." It isn't - cloud image jobs run a few minutes, and this node waits its full ~15-minute budget first.
- Expecting an
IMAGEback. Remember:STRINGURL out, which is exactly what Lux3D's 3D nodes want, and not much else. - Expecting your input image back unchanged. It regenerates by design.
The honest caveats are the API-node ones: your prompts and images leave your machine for Lux3D's servers, the model behind it is closed, and per-call pricing applies. For producing a reference image inside Lux3D's own pipeline, that trade is the whole point - just don't mistake it for a local generator. It's the front half of a cloud 3D workflow wearing a ComfyUI costume.
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. |
| imageopt | STRING,IMAGE | Optional public HTTP(S) URL or connected IMAGE/STRING; provide image, prompt, or both. | |
| promptopt | STRING | Optional generation or redraw instructions; provide image, prompt, or both. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| task_id | STRING | — |
| image_url | STRING | — |