Install
openclaw skills install aholo-3dgs-recon-globalAholo OpenAPI v1 global 3D tasks (reconstruction/generation): upload assets, create task (WorldAsyncOperation / worldId), poll status and fetch PLY/SPZ/SOG; gateway api.aholo3d.com, world APIs under /global/world/v1. One POST create per user task round. Not for 2D image output.
openclaw skills install aholo-3dgs-recon-globalScope: Aholo global Open Platform (
api.aholo3d.com) 3D tasks — not 2D text-to-image.
worldId, online preview, PLY / SPZ / SOG downloads)worldId status or keep pollingWhen the user says something like “generate a room in this style from a reference image”, ask:
Which do you want?
1) 2D room render (single image)
2) 3D room task (returns worldId and can be polled)
Enter this skill’s flow only after the user clearly picks 2).
Upload images or video and create 3D tasks:
When complete, model download URLs (PLY / SPZ / SOG) may be returned.
Environment variable:
AHOLO_API_KEY — API Key from labs.aholo3d.com/api-keysAuth header: Authorization: <API Key> (no Bearer prefix).
AHOLO_API_KEY is missing (agent behavior)AHOLO_API_KEY in the terminal or system environment, then reply “continue” or describe the same 3D task again.python ... aholo_reconstruct.py as the main path; the agent runs the script by default.CERTIFICATE_VERIFY_FAILED on corporate/self-signed networks.AHOLO_FORCE_SSL_VERIFY=1 to force verification on.AHOLO_INSECURE_SKIP_VERIFY still skips verify unless explicitly 0 / false / no / off.https://api.aholo3d.comGET /global/world/v1/asset/token → globalDomain (OUS direct upload; response uses OUS V2 c / m / d envelope)globalDomain example: https://ous-sg.kujiale.com (always use the token response value)| Method | Path | Success body |
|---|---|---|
| GET | /global/world/v1/asset/token | ousToken, globalDomain, blockSize |
| POST | /global/world/v1/reconstructions | WorldAsyncOperation: {"worldId":"<encrypted id>"} |
| POST | /global/world/v1/generations | Same as above |
| GET | /global/world/v1/{worldId} | World detail (status, assets, etc.) |
| POST | /global/world/v1/list | Paginated list (not wrapped in script) |
OUS upload paths remain /ous/api/... (no /global prefix on OUS).
c / m / d).
WorldAsyncOperation with field worldId only. Script also accepts legacy plain-text worldId if present.ApiError: code, message, status, details.metaData.bizCode (e.g. auth 401, bizCode 10004).| Action | Purpose |
|---|---|
create | Unified entry; set workflow to reconstruction or generation |
create-reconstruction | Reconstruction only |
create-generation | Generation only |
poll | Poll by worldId until terminal state (recommended) |
status | Single status query |
scene and taskQuality → no create.scene: model or spacetaskQuality: low / normal / highmodel or high) without user choice.worldId, ask whether to wait for polling:
poll in-session until doneworldId and viewer link onlyimageDir so all images upload — never upload only a subset (e.g. first 20).POST /global/world/v1/reconstructions or POST /global/world/v1/generations per user’s stated order in this conversation round.worldId locally, do not create again unless the user explicitly starts a new order.worldId is missing: guide the user to the platform task list or use status / list — not another create.forbidCreate: true or skip create actions.projectName: omit unless the user explicitly requests a project name.AskQuestion for scene × taskQuality (six combinations).| Option | scene | taskQuality | Note |
|---|---|---|---|
| 1 | model | low | Object, faster |
| 2 | model | normal | Object, balanced |
| 3 | model | high | Object, recommended |
| 4 | space | low | Scene, faster |
| 5 | space | normal | Scene, balanced |
| 6 | space | high | Scene, recommended |
After create — ask whether to wait:
Task created, worldId: {worldId}
When complete, view at: https://www.aholo3d.com/3dgs-model/{worldId}
(Link may not work until the task finishes.)
Reconstruction usually takes minutes to tens of minutes.
Wait until complete?
- "wait" / "yes" — I poll in this session until done
- "no" — use the link later or ask me to poll/status
reconstruction vs generation.scene, taskQuality.worldId; ask whether to poll.poll / status / list unless the user starts a new task.Each step should log: start, end, duration (seconds). Suggested steps: token, upload, create, status, each poll tick.
After worldId, ask before polling.
User will wait — synchronous poll (use -u):
python -u aholo_reconstruct.py '{"action":"poll","worldId":"xxx","intervalSeconds":60,"timeoutSeconds":14400}'
User will not wait — return worldId and https://www.aholo3d.com/3dgs-model/{worldId}.
Suggested: intervalSeconds=60, timeoutSeconds=14400.
Forbidden: background poll with a promise to notify later; polling without asking.
videoPaths or imagePaths / imageDir (one of)videoPaths: 1–3 filesimagePaths / imageDir: at least 20 imagesscene (model / space), taskQuality (low / normal / high)imagePaths only, at most 1 imageprompt and imagePaths cannot both be emptyvideoPaths| Parameter | Type | Description |
|---|---|---|
action | enum | create / create-reconstruction / create-generation / status / poll |
workflow | enum | For create only: reconstruction or generation |
projectName | string | Optional → request name; omit unless user asked |
coverPath | string | Local cover image (optional) |
cover | string | Existing cover URL (optional) |
worldId | string | Required for status / poll |
forbidCreate | bool | If true, block any create* in this run |
| Parameter | Type | Rule |
|---|---|---|
videoPaths | string[] | 1–3 video paths |
imagePaths | string[] | ≥20 image paths |
imageDir | string | Preferred for folders — scans all images |
scene | enum | model / space (required) |
taskQuality | enum | low / normal / high (required) |
| Parameter | Type | Rule |
|---|---|---|
imagePaths | string[] | At most 1 |
prompt | string | Optional; cannot be empty together with images |
Agent should run the script; users only need AHOLO_API_KEY set.
python -u .cursor/skills/aholo-3dgs-reconstruction-global/aholo_reconstruct.py '{
"action": "create",
"workflow": "reconstruction",
"imageDir": "D:/images",
"scene": "space",
"taskQuality": "high"
}'
python -u .cursor/skills/aholo-3dgs-reconstruction-global/aholo_reconstruct.py '{
"action": "create-reconstruction",
"videoPaths": ["D:/videos/angle1.mp4"],
"scene": "model",
"taskQuality": "high"
}'
python -u .cursor/skills/aholo-3dgs-reconstruction-global/aholo_reconstruct.py '{
"action": "create-generation",
"imagePaths": ["D:/images/seed.jpg"],
"prompt": "modern minimal interior"
}'
python -u .cursor/skills/aholo-3dgs-reconstruction-global/aholo_reconstruct.py '{
"action": "status",
"worldId": "A1b2C3d4E5"
}'
python -u .cursor/skills/aholo-3dgs-reconstruction-global/aholo_reconstruct.py '{
"action": "poll",
"worldId": "A1b2C3d4E5",
"intervalSeconds": 60,
"timeoutSeconds": 14400
}'
$env:AHOLO_API_KEY="your_api_key"
$env:AHOLO_FORCE_SSL_VERIFY="1"
SUCCEEDED | FAILED | CANCELED | TIMEOUT | REJECTED
https://www.aholo3d.com/3dgs-model/{worldId}