Aholo World Wait
Aholo World Wait
- world_id
- name
- cover
- scene
- status
- progress
- pano_url
- spz_url
- ply_url
- lod_meta_url
- up_axis
- create_time
- update_time
Aholo World Wait does exactly one thing, and it's the thing that makes the whole pack usable: it takes the world_id from Aholo World Generate, polls the cloud until the 3D scene is actually built, and then hands you the URLs. Without it you'd have an async task ID and no idea when - or whether - your world finished. With it, text-to-3D becomes a block in your graph that resolves into downloadable assets.
Here's the mechanism. Building an explorable 3D space takes real compute, so Aholo's API is asynchronous: Generate submits the job and returns immediately; Wait sits in a loop hitting GET /world/v1/{worldId} every few seconds, watching the status crawl through PENDING → PREPROCESSING → RUNNING until it lands on a terminal state - SUCCEEDED, or the failure quartet FAILED / CANCELED / TIMEOUT / REJECTED. On success it sanity-checks that the required asset fields actually came back, then raises if they didn't. The defaults in the source: poll every 3 seconds, give up after 1800 seconds (30 minutes). The node is marked not_idempotent - every run is a fresh poll, so re-executing a graph genuinely waits again instead of faking a cached answer.
The inputs worth setting
Three of the five are plumbing you set once and match to the Generate node:
- world_id - comes straight from Generate's output. If you bypass Generate and paste in an old ID, it still works; this node doesn't care who created the job.
- region - must match what Generate used (
cnvscom). Mismatch here is a classic "it worked before, now it 401s" moment. - api_key - same env-var fallback as its sibling: leave empty and it reads
AHOLO_API_KEY. - timeout_seconds - 60 to 3600, default 1800. When a big, detailed world is cooking, 30 minutes isn't overkill. If your scene fails on the regular, this is where you'll notice.
- poll_interval_seconds - 1 to 30, default 3. Lower it if you're impatient and want a faster fail; there's little point below ~2.
The outputs that matter
Thirteen outputs, but you'll live in a handful. The three you actually want are the asset URLs:
- pano_url - a 360 panorama of the scene. The instant preview.
- spz_url - the compressed gaussian-splat file, the format most splat viewers (SuperSplat and friends) load happily.
- ply_url - the raw
.plygaussian splat dump, for splat-heavy pipelines or conversion.
Gaussian splatting is the right representation for a whole scene - that's the whole reason this pack exists, per the KB's 3D-gen coverage: splats render a set photorealistically from any angle, and you should not force them into a mesh unless you know why you need one. The supporting cast: cover (a thumbnail), scene (usually ai_gen), status (expect SUCCEEDED), progress (0.0–1.0), up_axis (Y or Z - handy when you're importing into a 3D tool), and lod_meta_url, which is empty until LOD post-processing finishes - an empty string there is normal, not an error. world_id, name, create_time, and update_time are bookkeeping.
One ComfyUI gotcha: string outputs don't render on the node, so you won't see the URLs on canvas. After a success the node shows a text preview (status, world_id, and all four URLs), but to actually use them, wire pano_url / spz_url / ply_url into a text display or save node, or feed them downstream for download and viewing.
Installation and trouble
Same story as Generate - one clone, one requirements.txt, ComfyUI Manager search "Aholo World Generate", and you need ComfyUI >= 0.3.0:
cd ComfyUI/custom_nodes
git clone https://github.com/manycoretech/ComfyUI-Aholo-World-Generate.git
pip install -r requirements.txt
The friction is the key, not the node: an Aholo API key from labs.aholo3d.cn/api-keys or labs.aholo3d.com/api-keys, set in the field or as AHOLO_API_KEY. If it errors with a SUCCEEDED but missing asset fields message, that's Aholo's side slipping up - retry the run. And the honest warning from the API-wrapper playbook: this whole pack is a paid cloud call with your key inside, so your data leaves the machine and every successful scene costs credits. Watch a scene render, grab the splat, and decide whether the convenience beats the bill - that's the tradeoff the entire category sits on.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| world_id | STRING | WorldAsyncOperation.worldId | |
| region | COMBO | cn | 2 options: cn, com |
| api_key | STRING | Aholo API Key;留空则读取环境变量 AHOLO_API_KEY。申请:https://labs.aholo3d.cn/api-keys (国内)或 https://labs.aholo3d.com/api-keys (海外) | |
| timeout_seconds | INT | 180060–3600 | 轮询超时(秒) |
| poll_interval_seconds | FLOAT | 3.01–30 | 轮询间隔(秒) |
Outputs (13)
| Name | Type | Description |
|---|---|---|
| world_id | STRING | WorldDetail.worldId |
| name | STRING | WorldDetail.name |
| cover | STRING | WorldDetail.cover |
| scene | STRING | WorldDetail.scene(Spatial Gen 成功示例为 ai_gen) |
| status | STRING | WorldOpenApiTaskStatus |
| progress | FLOAT | WorldDetail.progress [0.0, 1.0] |
| pano_url | STRING | assets.imagery.panoUrl |
| spz_url | STRING | assets.splats.urls.spzPath |
| ply_url | STRING | assets.splats.urls.plyPath |
| lod_meta_url | STRING | assets.splats.urls.lodMetaPath(LOD 后处理完成后才有,可为空) |
| up_axis | STRING | assets.semanticsMetadata.upAxis(Y 或 Z) |
| create_time | INT | WorldDetail.createTime,Unix 毫秒 |
| update_time | INT | WorldDetail.updateTime,Unix 毫秒 |