VNTANA Upload Render
Send your generated image back to VNTANA as a product render
- credentials
- image
- success
- blob_id
VNTANADownloadRender gets the "in" half of the loop. This is the "out": take whatever image you generated in ComfyUI - a relit product shot, a new background, a batch of variations - and push it back into VNTANA as a render on a specific product. This is the node that closes the loop for teams doing AI-driven product photography on a 3D catalog.
What it does
It converts a ComfyUI IMAGE tensor to PNG or JPEG bytes, and uploads those bytes as a RENDER attachment on the product you point it at. The upload isn't a simple POST - it's the signed-URL pattern: the node asks the VNTANA API for a Google Cloud Storage upload URL, then PUTs the image bytes straight to GCS. It's the same architecture every real upload service uses, and it's why this node can move multi-megabyte renders without tying up the API.
Outputs are two: success (a BOOLEAN you can use to gate downstream nodes) and blob_id (the ID of the uploaded attachment, handy for tracking or wiring into reporting).
Inputs that matter
- credentials and product_uuid - required. The product UUID comes from
VNTANASearchProducts(or hardcoded, once you know it). - image - required, the tensor you generated. Standard
IMAGE, so wire it straight out of your sampler or VAE decode. - filename - default
"render", without the extension; the node sanitizes it and appends.pngor.jpgfor you. Watch this if you're uploading multiple versions - same filename, later upload may not overwrite, and you'll end up with a pile ofrenderfiles. - format -
PNGorJPEG(default PNG). PNG for transparency and lossless quality, JPEG when size matters.
Two honest gotchas
First, batches get truncated. The node converts the tensor to a PIL image and takes tensor[0] - the first frame of a batch. Generate four variations in one batch and only the first one gets uploaded. If you want all four, split them into separate uploads.
Second, this node needs a workspace, like everything else in the pack. Set default_workspace_uuid on the Credentials node and forget about it, or pass workspace_uuid here.
Install
Same pack, same drill - clone into custom_nodes, pip install, restart. No models, no heavy deps.
cd ComfyUI/custom_nodes
git clone https://github.com/VNTANA-3D/vntana-comfyui-node
cd vntana-comfyui-node
pip install -e .
Or grab it from ComfyUI Manager by searching "vntana-comfyui-node".
Troubleshooting
successis false / "Upload failed" - first suspect is the signed URL domain. The node only uploads tostorage.googleapis.comorstorage.cloud.google.com(SSRF protection), so if the API ever starts handing back a different host, uploads die. That's a platform-side thing, not something you can fix in the workflow.- Wrong product? - you fed it the wrong
product_uuid, or the product is in a different workspace than your default. Double-check what Search returned. - File too large - the 30GB cap that validation enforces is generous for images, so if you hit it, something's genuinely wrong upstream.
For the batch of four variations you wanted but only got one of - that's the tensor-truncation gotcha above. It's a small node with a clear job, and the first-frame behavior is the one thing that actually surprises people.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| credentials | VNTANA_CREDENTIALS | — | |
| product_uuid | STRING | — | |
| image | IMAGE | — | |
| workspace_uuidopt | STRING | — | |
| filenameopt | STRING | render | — |
| formatopt | COMBO | PNG | 2 options: PNG, JPEG |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| success | BOOLEAN | — |
| blob_id | STRING | — |