lux3d

Use the Lux3D Global environment to generate 3D from image URLs or text, transfer materials onto an existing model, complete additional viewpoints from one object image, export mod…

ManycoreTech

@violalulu

Install

$ openclaw skills install @violalulu/lux3d

Lux3D Global

Use lux3d_client.py in this directory to call the public Lux3D API. Before running a command, change to this Skill directory or replace the script name in the examples with its absolute path. This package defaults to the Global environment:

https://api.aholo3d.com/global

Use only the public endpoints and fields listed here. Do not add business-type fields or internal versions.

Before Calling

  1. Apply for a key on the Global API Key page.

  2. Set the environment:

    export LUX3D_API_KEY="your_api_key"
    export LUX3D_REGION="international"
    
  3. img, imgs, meshUrl, and modelUrl must be HTTP(S) URLs accessible to Lux3D. For a local file, upload it first with the Asset upload APIs, then use the returned URL.

  4. Global and China API Keys are not interchangeable. This Skill defaults to Global; do not mix it with the China endpoint.

  5. Pass the API Key directly in the authentication header, without a Bearer prefix:

    Authorization: <API Key>
    

Install the dependency:

pip install requests

Choose a Capability

Select one creation endpoint for the request:

NeedCapability
One or more object images and a 3D modelImage-to-3D
A text description, optionally with one reference imageText-to-3D
An existing GLB that needs material transfer from an imageMaterial transfer
Optional multi-view completion before a G1-Turbo generation requestImage-to-four-view -> G1-Turbo image-to-3D
Additional formats from a Lux3D ZIP or GLBMulti-format export

For image-to-3D and text-to-3D, pass the input directly to G1 without assembling other capabilities around it. G1-Turbo can run as a lightweight atomic capability on its own; when the user wants more control through multi-view input, they may optionally complete viewpoints first and pass the results as imgs. If the user did not specify a version and the request does not distinguish them, ask before creating the task.

A create endpoint returns a taskid. Query that task afterward; poll every 10-15 seconds.

1. Image-to-3D

version is required. Pass img for a single image or imgs for multiple images, never both. imgs accepts 1-32 URLs of the same subject; put the clearest and most complete view first.

G1

Pass only these fields:

FieldRequiredHow to pass it
imgConditionalOne image URL; omit when using imgs
imgsConditional1-32 image URLs; omit when using img
versionYesPass G1
faceCountNoMesh face count in [10000, 300000]; default 200000; does not affect PLY
outputFormatNoA non-duplicated list of zip, glb, and ply. Omission, an empty list, or a list without ply returns ZIP + GLB; including ply returns ZIP + GLB + PLY
aiPredictSizeNoOmit or pass true to predict and scale size; pass false to disable

Do not pass enablePbr for G1. Output order is always ZIP, GLB, optional PLY. Even ["ply"] returns all three outputs.

python lux3d_client.py image \
  "https://example.com/object.jpg" \
  --version G1

Multiple images:

python lux3d_client.py image \
  "https://example.com/front.jpg" \
  --image-view "https://example.com/side.jpg" \
  --version G1 --format ply

G1-Turbo

Pass only these fields:

FieldRequiredHow to pass it
imgConditionalOne image URL; omit when using imgs
imgsConditional1-32 image URLs; omit when using img
versionYesPass G1-Turbo
faceCountNoMesh face count in [10000, 300000]; default 200000; does not affect PLY
outputFormatNoAny non-duplicated individual or combined zip, glb, and ply values; omission or an empty list is treated as ["zip"]
enablePbrNoFor ZIP/GLB, omit or pass true for a textured Mesh and false for a white Mesh; omit for PLY-only
aiPredictSizeNoOmit or pass true to predict and scale size; pass false to disable
python lux3d_client.py image \
  "https://example.com/object.jpg" \
  --version G1-Turbo --format glb --no-pbr

PLY-only:

python lux3d_client.py image \
  "https://example.com/object.jpg" \
  --version G1-Turbo --format ply

2. Text-to-3D

prompt and version are required. style is optional. For visual guidance, pass one img URL; do not pass imgs.

Supported style values:

photorealistic, cartoon, anime, hand_painted, cyberpunk, fantasy, glass

The default style is photorealistic.

G1

FieldRequiredHow to pass it
promptYesNon-empty text describing the subject, material, style, and key details
styleNoUse one value from the list above
imgNoOne accessible reference-image URL
versionYesPass G1
faceCountNoMesh face count in [10000, 300000]; default 200000; does not affect PLY
outputFormatNoA non-duplicated list of zip, glb, and ply. A list without ply returns ZIP + GLB; including ply appends PLY
aiPredictSizeNoOmit or pass true to predict and scale size; pass false to disable

Do not pass enablePbr.

python lux3d_client.py text \
  "A modern dining chair with visible wood grain" \
  --style photorealistic --version G1

G1-Turbo

FieldRequiredHow to pass it
promptYesNon-empty text describing the subject, material, style, and key details
styleNoUse one value from the list above
imgNoOne accessible reference-image URL
versionYesPass G1-Turbo
faceCountNoMesh face count in [10000, 300000]; default 200000; does not affect PLY
outputFormatNoAny non-duplicated individual or combined zip, glb, and ply values; omission or an empty list is treated as ["zip"]
enablePbrNoFor ZIP/GLB, omit or pass true for a textured Mesh and false for a white Mesh; omit for PLY-only
aiPredictSizeNoOmit or pass true to predict and scale size; pass false to disable
python lux3d_client.py text \
  "A futuristic desk lamp" \
  --image "https://example.com/reference.png" \
  --version G1-Turbo --format glb

3. Material Transfer

This endpoint uses only v3.0-standard:

FieldRequiredHow to pass it
imgYesMaterial reference-image URL
meshUrlYesURL of the GLB to retexture
versionYesPass v3.0-standard
outputFormatNoA non-duplicated list of zip, glb, usdz, obj_zip, and fbx_zip. Omission or an empty list returns ZIP + GLB; include other values when needed
aiPredictSizeNoPass true for automatic size prediction and omit customSize; pass false or omit to preserve size or set a height
customSizeNoModel height in millimetres, greater than 0; set aiPredictSize to false or omit it
python lux3d_client.py material \
  "https://example.com/material.png" \
  --mesh-url "https://example.com/model.glb" \
  --version v3.0-standard --format usdz

4. Image-to-Four-View

Pass one object image URL to complete additional viewpoints. This endpoint does not generate a 3D model and accepts only img.

python lux3d_client.py four-view "https://example.com/object.jpg"

On success, it returns four image URLs. The API stores them as a JSON-array string in one output item; the client parses that value into a list.

G1-Turbo accepts either one image or multiple images directly. Check the input first: when it has a plain background, or its background has been removed and it contains only the target object to generate, pass the single image directly as img. Viewpoints and structural details that are not visible in the image are inferred from the available information. Offer the following composition when the user wants to reduce that inference, gain more control over unseen viewpoints, or provide missing viewpoint information:

Single image -> Image-to-four-view -> Review and approve -> imgs -> G1-Turbo image-to-3D
from lux3d_client import generate_four_views

four_view_urls = generate_four_views("https://example.com/object.jpg")
print(four_view_urls)

Show the four images or their URLs to the user and confirm that the subject structure, orientation, and viewpoints match expectations. Do not create the G1-Turbo task until the user explicitly approves the results. After approval, continue with:

from lux3d_client import create_image_to_3d_task

task_id = create_image_to_3d_task(
    imgs=four_view_urls,
    version="G1-Turbo",
)

If the order needs adjustment, put the clearest and most complete view first in imgs.

This is only a recommended optional enhancement, not a prerequisite for G1-Turbo. If the user asks to call G1-Turbo directly, pass the single image as img; do not force multi-view completion or block the call because four-view results are absent. For G1, pass the original input directly and do not add a four-view task to the workflow.

5. Multi-Format Export

modelUrl must be an accessible .zip or .glb URL. A ZIP input must come from a Lux3D generation task.

InputoutputFormat rule
GLBPass at least one of usdz, obj_zip, or fbx_zip
ZIPOmit or pass an empty list to return GLB, or request one or more export formats above
python lux3d_client.py export \
  "https://example.com/model.glb" \
  --format usdz --format obj_zip

6. Query One Task

Query once:

python lux3d_client.py query 1256173

Poll from Python:

from lux3d_client import query_task_status

outputs = query_task_status("1256173")

Public statuses:

StatusMeaning
0Initialized
1Running
3Succeeded
4Failed
6Cancelled

After success, read results from d.outputs[].content. Result URLs expire after 2 hours, so save them promptly.

7. List Generation Tasks

python lux3d_client.py list \
  --page 1 --pagesize 20 --status 3 \
  --starttime 1786590000000 --endtime 1786600000000
  • page is one-based and defaults to 1
  • pagesize is 1-100 and defaults to 20
  • status may be 0, 1, 3, 4, or 6
  • Times are Unix milliseconds and use the interval [starttime, endtime)
  • Omit unused filters

Python Creation Functions

Use the functions in endpoint order:

from lux3d_client import (
    create_image_to_3d_task,
    create_text_to_3d_task,
    create_material_transfer_task,
    create_image_to_four_view_task,
    create_multi_format_export_task,
    get_task,
    list_tasks,
)

Pass only the fields listed for the selected version. For example:

task_id = create_image_to_3d_task(
    img="https://example.com/object.jpg",
    version="G1",
    outputFormat=["ply"],
)

Tasks and Credits

Image-to-3D, text-to-3D, and material transfer share the account concurrency limit:

AccountConcurrent in-progress tasks
Free2
Pro5

If the API returns GENERATION_CONCURRENCY_LIMIT_EXCEEDED, wait for an existing task to finish before retrying. The rejected request does not create a task or consume credits. See Lux3D Pricing for plans and credits.

References

Top skills in this category