Nodes/ComfyUI-Lux3D/Lux3D Single Image Generator
ComfyUI Node

Lux3D Single Image Generator

The '3D' node that makes a 2D image — on purpose

By manycore-research·Created 7 months ago·Updated 2 days ago· 130
Lux3D Single Image Generator
  • image
  • task_id
  • image_url
base_api_pathhttps://api.aholo3d.cn
prompt

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) or https://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 upstream STRING URL, or one connected IMAGE (local images get uploaded automatically before the task is submitted).
  • prompt - optional multiline text. You need at least one of image or prompt; 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 IMAGE back. Remember: STRING URL 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.

CategoryLux3D/Generate

Inputs (3)

NameTypeDefaultDescription
base_api_pathSTRINGhttps://api.aholo3d.cnUse https://api.aholo3d.cn or https://api.aholo3d.com. The matching server API key environment variable is used.
imageoptSTRING,IMAGEOptional public HTTP(S) URL or connected IMAGE/STRING; provide image, prompt, or both.
promptoptSTRINGOptional generation or redraw instructions; provide image, prompt, or both.

Outputs (2)

NameTypeDescription
task_idSTRING
image_urlSTRING