Dustin Marble Generate Video World
Turn a video clip into a navigable 3D world, one API call at a time
- world_json
- world_id
- marble_url
- asset_urls_json
Video-to-world is where Marble's whole pitch lands hardest: point a camera around a space, and the model reconstructs that space as a 3D world you can move through. Dustin Marble Generate Video World is the node that makes that happen from inside ComfyUI - it takes either a public video URL or a local file, starts a world generation against the World Labs Marble API, and polls until the ~5-minute job is done. It's the video-specific sibling of the pack's flagship Generate World node, slimmed down to the two video modes and none of the image baggage.
How it works
The video_mode dropdown is the whole shape of the node. video_url takes a publicly reachable URL (a direct link to an mp4/mov/mkv); video_file takes a local file - either via media_asset_id from the pack's Upload Video node, or via video_path directly, in which case the node uploads it inline for you. Either way it builds a type: video world prompt, POSTs it to worlds:generate, and polls the operation until it completes or max_wait_seconds runs out.
The inputs that matter
video_mode-video_url(default) orvideo_file. Your choice here decides which of the three optional inputs actually matters.video_url- fill this in for URL mode. The README's recommended formats:mp4,mov,mkv.media_asset_id- for file mode, from the Upload Video node. This is the wiring pattern: Upload Video → media_asset_id → this node.video_path- the inline-upload shortcut for file mode. Handy for one-offs; the separate upload node wins when you're iterating.text_prompt- optional guidance that rides alongside the footage.model-marble-1.1(default),marble-1.1-plus,marble-1.0,marble-1.0-draft.seed--1omits it.disable_recaption- off by default; flip it on to stop Marble auto-rewriting your prompt.max_wait_seconds- default 600, the thing to raise when five minutes isn't enough.
Same four outputs as every generate node in this pack: world_json, world_id, marble_url, and asset_urls_json - the last one feeding the thumbnail preview, panorama preview, and interactive 360 viewer.
Where it trips people up
The most common failure is mode confusion: you set video_mode to video_url, leave video_url empty, and get "video_url is required." Flip the mode or fill the field - it doesn't auto-detect between the two like Generate World does for its wider set. Second: for video_file with media_asset_id, that ID has to come from an upload that actually succeeded - if Upload Video errored, this will too. And the usual Marble caveats all apply: your footage leaves the machine, you're paying per generation, and the wait is minutes, not seconds. Run the draft model to iterate on prompts before spending full-model calls on a final world.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/zihualiu1997/dustin-comfyui-nodes
Restart ComfyUI, or install "dustin-comfyui-nodes" via ComfyUI Manager. The pack pulls in requests automatically; a World Labs API key is the only other requirement. No model downloads, no local GPU - the whole job happens on Marble's side, which is exactly the trade you're signing up for.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | — | |
| video_mode | COMBO | video_url | 2 options: video_url, video_file |
| text_prompt | STRING | — | |
| 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 | — |
| disable_recaption | BOOLEAN | false | — |
| poll_interval_seconds | INT | 155–120 | — |
| max_wait_seconds | INT | 60060–3600 | — |
| video_urlopt | STRING | — | |
| media_asset_idopt | STRING | — | |
| video_pathopt | STRING | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| world_json | STRING | — |
| world_id | STRING | — |
| marble_url | STRING | — |
| asset_urls_json | STRING | — |