Nodes/VNTANA/VNTANA Upload 3D Model
ComfyUI Node

VNTANA Upload 3D Model

Push a 3D model into VNTANA and let its pipeline do the optimization

By VNTANA-3D·Created 8 months ago·Updated 8 months ago· 0
VNTANA Upload 3D Model
  • credentials
  • success
  • product_uuid
  • conversion_status
◄file_path►
◄name►
◄pipeline_uuid►
◄workspace_uuid►
◄optimization_presetwebOptimized►
◄description►
◄statusDRAFT►

The reverse of VNTANADownloadModel, and arguably the most interesting node in this pack: VNTANAUpload3DModel takes a model file from your disk, creates a brand-new product entry in VNTANA, uploads the geometry, and hands the result to VNTANA's optimization pipeline - the server-side machinery that produces web-ready, mobile-ready, and high-quality variants of the same asset. If you're generating 3D content (Hunyuan3D, TRELLIS, TripoSR - the whole image-to-3D scene) and want it to land in a real product catalog, this is the handoff.

How it works

Three steps, and they're worth knowing because they explain the outputs:

  1. Create the product - the node POSTs a new product with the name you gave it, in the workspace you're targeting, at the status you picked.
  2. Get a signed upload URL - same GCS signed-URL pattern as UploadRender.
  3. PUT the model file - bytes go straight to cloud storage.

Outputs: success (BOOLEAN), product_uuid (the new product's ID - save this, it's how you reference the product later), and conversion_status (which is "PENDING" - the node returns immediately after upload, and the actual optimization runs async on VNTANA's side).

The file handling is genuinely careful: it rejects symlinks, caps at 30GB, verifies magic bytes for known formats, and only accepts real regular files. The supported extensions are .glb, .gltf, .usdz, .fbx, .obj, .step, .stp.

Inputs that matter

  • file_path and name - required. The file must exist; the name becomes the product name.
  • pipeline_uuid - required, and the easy miss. This is the optimization pipeline VNTANA runs the model through, and you get it from VNTANAListPipelines. No pipeline, no upload.
  • optimization_preset - webOptimized (default), highQuality, mobile, preserveOriginal.
  • status - DRAFT (default), LIVE_INTERNAL, LIVE_PUBLIC. Default to DRAFT first; review on the platform, then promote.

The preset reality check

The README sells these presets hard - Draco compression, 50K polygons, 2K textures, the works. Here's the thing the README doesn't tell you: in the current code, all four presets send the exact same parameter - {"desiredOutput": "AUTO"}. The dropdown is effectively a label; the real optimization decisions come from the pipeline_uuid you pass, which is where VNTANA's actual preset logic lives server-side. So don't over-index on choosing the "right" preset - it's currently a request, not a spec, and the pipeline is the thing that matters.

Install

Standard for this pack - light client, no models:

cd ComfyUI/custom_nodes
git clone https://github.com/VNTANA-3D/vntana-comfyui-node
cd vntana-comfyui-node
pip install -e .

Restart ComfyUI, or install from Manager via "vntana-comfyui-node".

Troubleshooting

  • "File not found" - file_path is relative to where ComfyUI runs, not where your browser is. Use an absolute path.
  • "Invalid file type" / magic-byte errors - the file extension and content disagree. A .glb renamed to .obj will get rejected when the bytes don't match the claimed type.
  • "Invalid pipeline" - grab a real one from VNTANAListPipelines; the node validates the UUID format before calling out.
  • Upload succeeded but nothing optimized - conversion_status is PENDING by design. Optimization is async; check the product on the VNTANA platform after a bit.

The pipeline-centric design is the takeaway: this node is a clean API client, and the intelligence (the actual optimization presets) lives in your VNTANA workspace, configured through the pipeline you reference.

CategoryVNTANA

Inputs (8)

NameTypeDefaultDescription
credentialsVNTANA_CREDENTIALS—
file_pathSTRING—
nameSTRING—
pipeline_uuidSTRING—
workspace_uuidoptSTRING—
optimization_presetoptCOMBOwebOptimized4 options: webOptimized, highQuality, mobile, preserveOriginal
descriptionoptSTRING—
statusoptCOMBODRAFT3 options: DRAFT, LIVE_INTERNAL, LIVE_PUBLIC

Outputs (3)

NameTypeDescription
successBOOLEAN—
product_uuidSTRING—
conversion_statusSTRING—