Dustin Marble Generate World
Turn a prompt, photo, or video into a walkable 3D world — over an API, not your GPU
- image
- world_json
- world_id
- marble_url
- asset_urls_json
This is the flagship of the pack and the reason most people clone it. Dustin Marble Generate World calls the World Labs Marble API - the 3D world generator from Fei-Fei Li's World Labs, the $230M-funded outfit whose "step inside an image" demo blew up in late 2024 - and drops the result back into your ComfyUI graph as if a local model had made it. Give it a text prompt, a photo, a batch of photos, or a video, and out come a 3D Gaussian-splat scene (plus a mesh, a panorama, and a thumbnail) you can open in Marble or preview with the pack's viewer nodes.
Read the name right, though: this is an API-wrapper node, not a local generator - the KB's "when the model isn't on your machine" category. Nothing is downloaded, no VRAM is used, and nothing runs without a World Labs API key. Your prompt and images leave your machine, generation takes roughly five minutes server-side, and you're paying per call. If you're strictly local-only, this pack has nothing for you - skip to the install section for the caveats, then walk away.
How it works
The mechanism is plain from the source: it POSTs a world prompt to api.worldlabs.ai/marble/v1/worlds:generate, gets back an operation_id, then polls .../operations/{id} every poll_interval_seconds (default 15) until the job reports done, up to max_wait_seconds (default 600). Transient network errors get retried with backoff, and a completed operation yields the full world payload. The "~5 minutes" number in the README is real - you queue this node and it blocks that long, so plan your workflows around the wait.
The inputs that matter
prompt_typeis the master switch:text,image_url,image_tensor,multi_image_json,video_url,video_file. The neat part - if you leave it ontextbut wire in an image or video, the node auto-detects and switches modes for you, so you don't have to babysit the dropdown.api_key- your World Labs key. Leave it blank and set theWLT_API_KEYenvironment variable before starting ComfyUI, and it reads that instead. (Same env var the rest of the Marble nodes honor.)text_prompt- required for text mode, optional (but recommended) everywhere else. Default is "A mystical forest with glowing mushrooms," which is a fine prompt and a clear sign of a happy developer.model-marble-1.1(default),marble-1.1-plus,marble-1.0, ormarble-1.0-draft. The draft model is your cheap iteration path; use the full models when you're ready to commit.is_pano(image modes) - mark the input as an equirectangular panorama.reconstruct_images- multi-image reconstruction mode, up to 8 images.seed--1(default) omits the seed entirely; set a real number to reproduce a world.max_wait_seconds- the one you'll actually touch, because a five-minute generation sometimes takes seven.
The two polling controls (poll_interval_seconds, max_wait_seconds) are the honest "this is a long async job" tell. And disable_recaption - off by default - sends your prompt as-is instead of letting Marble auto-rewrite it.
The outputs
Four strings: world_json (the full completed world payload), world_id (the generated world's ID), marble_url (link to open it in Marble's web viewer), and asset_urls_json - the one you'll wire onward. It's a compact JSON with thumbnail_url, pano_url, collider_mesh_url, and spz_urls (the 100k/500k/full-res Gaussian splat downloads). That last output is what feeds the pack's thumbnail preview, panorama preview, and the interactive Pano 360 Viewer.
Troubleshooting
- "Missing API key" - you didn't set the node's
api_keyorWLT_API_KEY. It's the first error everyone hits. - Timed out after 600s - the job is still running server-side. Bump
max_wait_seconds(up to 3600) and re-run; the error even tells you the last knownworld_idso you can check the platform. - Recaptioning surprises - if the world doesn't match your prompt, Marble's default auto-recaption is rewriting it. Toggle
disable_recaption. - Network flakiness - the node retries transient failures five times with backoff; if it still dies, "check internet/VPN/proxy or retry later."
One more honest note from the external-API-node playbook: this is a third-party pack holding your key and calling the network by design - exactly the shape of node that's been abused before. The source is small and readable, which is your best audit. Read it once.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/zihualiu1997/dustin-comfyui-nodes
Then restart ComfyUI. Or install "dustin-comfyui-nodes" via ComfyUI Manager. The pack's one real dependency - requests - is auto-installed. No models to download; the model lives on World Labs' servers, which is the whole point.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | — | |
| prompt_type | COMBO | text | 6 options: text, image_url, image_tensor, multi_image_json, video_url, video_file |
| text_prompt | STRING | A mystical forest with glowing mushrooms | — |
| model | COMBO | marble-1.1 | 4 options: marble-1.1, marble-1.1-plus, marble-1.0, marble-1.0-draft |
| display_name | STRING | — | |
| seed | INT | -1-1–4294967295 | — |
| is_pano | BOOLEAN | false | — |
| disable_recaption | BOOLEAN | false | — |
| reconstruct_images | BOOLEAN | false | — |
| poll_interval_seconds | INT | 155–120 | — |
| max_wait_seconds | INT | 60060–3600 | — |
| image_urlopt | STRING | — | |
| imageopt | IMAGE | — | |
| multi_image_jsonopt | STRING | — | |
| video_urlopt | STRING | — | |
| video_pathopt | STRING | — | |
| media_asset_idopt | STRING | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| world_json | STRING | — |
| world_id | STRING | — |
| marble_url | STRING | — |
| asset_urls_json | STRING | — |