Dustin Marble Upload Video
Get a video onto Marble's servers so it can become a world
- media_asset_id
Before Marble can turn a local video into a 3D world, that video has to exist somewhere the API can reach. Public URLs work - that's what the video_url path in Generate Video World is for. But if your footage is sitting on your hard drive, you need the upload step first, and that's the entire job of this node. It takes a path to a video file, pushes it to Marble's storage through the media-assets:prepare_upload endpoint, and hands you back a media_asset_id - a token that references your file on their servers.
What it does, precisely
Two inputs, one output, no drama. video_path is the absolute or relative path to your file - mp4, mov, mkv, anything Marble accepts. api_key is your key, or export WLT_API_KEY and leave the field blank. The node reads the file, calls prepare_upload to get a signed upload URL and headers, PUTs the bytes up, and returns the media_asset_id string. That string is what you wire into Generate Video World's media_asset_id input (with video_mode set to video_file).
The gotchas
- The path must resolve. If the file isn't found, you get "File not found: <path>" - check that ComfyUI's process can actually see the path you typed. Relative paths resolve against wherever ComfyUI is running from, which trips people up more than it should. An absolute path is the reliable choice.
- File-not-found beats silent failure. It errors loudly rather than uploading nothing, which is the right behavior for a node whose only job is "get this file there."
- Your footage leaves the machine. This is the API-wrapper reality from the KB: the moment this node runs, your video is on World Labs' servers. If that's a privacy problem for the footage, the whole video-to-world path is off the table - the node is the point where the data leaves, not a bug.
- Big files, slow uploads. The underlying upload call has a generous 300-second timeout, which is a hint that videos can be chunky. A long clip will make this node sit there a while. That's normal.
Why a separate upload node at all?
You could have Generate Video World upload the file inline - and honestly, for video_file mode it can, if you give it a video_path directly. The reason the split exists is composability and cost: upload once, then reuse the media_asset_id across multiple generation attempts with different prompts, models, or seeds without re-uploading the footage every time. Videos are the biggest payload in this pack, so uploading once and iterating is a real saving. If you're doing a single shot and don't care, skip this node and let Generate Video World handle the file. If you're iterating, upload once and fan the ID out.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/zihualiu1997/dustin-comfyui-nodes
Restart ComfyUI; or install "dustin-comfyui-nodes" from ComfyUI Manager. It needs requests and a World Labs API key - that's the full dependency story. No models, no local GPU, just a pipe from your disk to Marble's storage.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | STRING | — | |
| video_path | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| media_asset_id | STRING | — |