How to run InstantMesh image-to-3D on a cloud GPU

Rent a GPU on Deploy, then open a terminal in JupyterLab or over SSH. Install InstantMesh from the official TencentARC/InstantMesh repository the way the README prints, then run python run.py or python app.py. Copy the obj, glb, and mp4 off the instance before you destroy it, because destroying the instance deletes its disk.

TRELLIS’s README says at least 16GB is necessary: How to run TRELLIS image-to-3D on a cloud GPU. Hunyuan3D-2.1’s README publishes 10 GB, 21 GB, and 29 GB: How to run Hunyuan3D on a cloud GPU. Rendering a .blend file is How to render a Blender scene on a cloud GPU. app.py launches on 0.0.0.0 port 43839. The tunnel page is How to use SSH port forwarding on a cloud GPU. If the process runs out of memory: How to fix CUDA out of memory on a cloud GPU.

The repository LICENSE file is the Apache License, Version 2.0, January 2004. The appendix copyright line is the unfilled example Copyright [yyyy] [name of copyright owner]. The GitHub license field on 2026-11-13 was Apache-2.0. The model card for TencentARC/InstantMesh that day had cardData.license apache-2.0 and gated false, lastModified 2024-04-11T02:56:23.000Z. run.py and app.py also load sudo-ai/zero123plus-v1.2. That card’s license field was null on 2026-11-13, lastModified 2024-02-01T11:30:40.000Z. Read LICENSE before you redistribute the program or the weights.

The commands below are copied from the upstream files named in each step. They were not run on a CloudGPU instance for this page. Anything this page adds around them is marked.

What the README says about memory

README.md (commit 08822c52fdc399b93ea00e4fa9e596344ed52ccc, 2025-01-03), app.py, and run.py print no GPU GB figure. This page does not invent one. The README says that if the machine has multiple GPUs, the demo runs on two GPUs to save memory, and that CUDA_VISIBLE_DEVICES=0 python app.py forces a single GPU. app.py sets device0 and device1 to cuda:0 and cuda:1 when torch.cuda.device_count() is at least 2, and otherwise sets both to the same device. The training commands pass --gpus 0,1,2,3,4,5,6,7. This page does not copy the training commands.

GET /v1/public/compute-capabilities does not list GPUs. It returns feature flags. The memory column is vram_gb from gpu-prices.json, updated_at 2026-11-13T14:01:30.465Z. GET /v1/public/gpu-catalog the same day (generated_at 2026-11-13T14:01:31.438Z) listed the same names and the same vram_gb values, plus Ascend 910B at 64, which is not in gpu-prices.json and is not listed here. The catalog response also includes an availability field. This page does not copy it. Every prices row has gpu_count 1. Every catalog row has min_gpu_count 1. The two-GPU branch in app.py needs device_count of at least 2. This page does not claim a listing with two GPUs, and it does not mark a row as enough. Which listing you can start is on Deploy.

The catalog template list had no InstantMesh template.

Catalog name vram_gb
RTX 2080 8
RTX 3080 10
RTX 2080 Ti 11
RTX 3080 Ti 12
V100 16G 16
A30 24
RTX 3090 24
RTX 4090 24
RTX 4090D 24
RTX 4080 SUPER 32G 32
RTX 5090 32
RTX 5090D 32
V100 32G 32
A100 40G 40
A800 40G 40
A40 48
RTX 4090 48G 48
RTX 4090D 48G 48
RTX A6000 48
NVIDIA RTX PRO 5000 72G 72
RTX PRO 5000 72G 72
A100 80G 80
A800 80G 80
H800 80
RTX 6000D 83
H20 96G 96
RTX PRO 6000 96G 96
RTX PRO 6000 Max-Q 96
H20-3e 141G 141

Install

On Deploy, choose Raw GPU. The README says it recommends Python>=3.10, PyTorch>=2.1.0, and CUDA>=12.1. The README install block does not print git clone. requirements.txt, run.py, app.py, and configs/instant-mesh-large.yaml are files in that repository, and the last line of the install block is pip install -r requirements.txt. The clone below is this page’s, and it comes first so that file exists. It was not run.

# The README install block does not print a clone. These two lines are this page's. They were not run.
git clone https://github.com/TencentARC/InstantMesh.git
cd InstantMesh

The install block, copied. A conda environment is the first command in that block: How to set up a conda environment on a cloud GPU.

conda create --name instantmesh python=3.10
conda activate instantmesh
pip install -U pip
conda install Ninja
conda install cuda -c nvidia/label/cuda-12.1.0
pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu121
pip install xformers==0.0.22.post7
pip install -r requirements.txt

requirements.txt pins pytorch-lightning==2.1.2, gradio==3.41.2, transformers==4.34.1, and diffusers==0.20.2. requirements.txt was commit f8af69954e0032e2d57d37b6dea175576213b5fd, committed 2024-04-16T13:17:36Z. This page did not run pip.

The RTX 5090 guide says that card is compute capability 12.0 (sm_120) and that PyTorch 2.7 and later, on a build for CUDA 12.8 or newer, is the line that announced support. The README pins torch==2.1.0 from the cu121 index. This page did not re-test InstantMesh on an RTX 5090. Catalog RTX 5090 and RTX 5090D are 32. That is the catalog number only.

Weights

The README says the inference script downloads the models, and that you can instead download them and put them under ckpts/. It says the default reconstruction variant is instant-mesh-large. The model card it links is TencentARC/InstantMesh.

run.py loads DiffusionPipeline.from_pretrained("sudo-ai/zero123plus-v1.2", custom_pipeline="zero123plus", torch_dtype=torch.float16). If infer_config.unet_path is not an existing file, it downloads diffusion_pytorch_model.bin from TencentARC/InstantMesh. If infer_config.model_path is not an existing file, it downloads {config_name with hyphens replaced by underscores}.ckpt from the same repo. For configs/instant-mesh-large.yaml, that config name is instant-mesh-large, so the checkpoint filename the f-string builds is instant_mesh_large.ckpt. app.py uses configs/instant-mesh-large.yaml, cache directory ./ckpts/, and downloads diffusion_pytorch_model.bin and instant_mesh_large.ckpt from TencentARC/InstantMesh when it takes the download branch. run.py was commit e17ac11d9ec09d0dfce6e3264c2c2699130c6134, committed 2024-04-12T04:09:23Z. app.py was commit f71a756b3534183b344cf66567008cf92a41fc91, committed 2024-05-05T09:14:27Z. This page did not run the download.

Command line

The README’s command-line block, copied. --save_video is in the command. The README says the default export is a .obj mesh with vertex colors. --export_texmap exports a texture map instead. The README says that flag will cost longer time. --no_rembg skips foreground segmentation when the input already has an alpha mask. A NeRF variant uses configs/instant-nerf-large.yaml in the same command shape. The README says --export_texmap with a NeRF variant may cost a long time because the default iso-surface extraction resolution is 256. This page does not turn those words into a duration, and it does not copy the training commands.

python run.py configs/instant-mesh-large.yaml examples/hatsune_miku.png --save_video
python run.py configs/instant-mesh-large.yaml examples/hatsune_miku.png --save_video --no_rembg
python run.py configs/instant-mesh-large.yaml examples/hatsune_miku.png --save_video --export_texmap

run.py defaults --output_path to outputs/. It joins that directory, the config basename without .yaml, and images, meshes, or videos. The input basename is the file name without the extension. For the command above, the config basename is instant-mesh-large and the input basename is hatsune_miku. The script writes outputs/instant-mesh-large/images/hatsune_miku.png, outputs/instant-mesh-large/meshes/hatsune_miku.obj, and, because --save_video is set, outputs/instant-mesh-large/videos/hatsune_miku.mp4. When --export_texmap is set it calls save_obj_with_mtl instead of save_obj. The documented commands do not pass --output_path. This page did not run them.

Gradio

The README’s demo commands, copied.

python app.py
CUDA_VISIBLE_DEVICES=0 python app.py

app.py calls demo.launch(server_name="0.0.0.0", server_port=43839). The README commands do not pass a host or a port. Forward port 43839 with how to use SSH port forwarding on a cloud GPU. The demo text says the app can export an .obj with vertex colors or a .glb, and that a texture-map .obj is the command-line flag above. A later note says a downloaded .obj will be flipped, and to export .glb or flip it before use.

make3d builds the obj path with tempfile.NamedTemporaryFile(suffix=".obj", delete=False). The mp4 and the glb use that file’s directory and basename: {basename}.mp4 and {basename}.glb. This page does not name the temporary directory, because NamedTemporaryFile picks it. This page did not start the app.

The docker README, commit 082aeabaa27b922f517c71748d05a6c3cdba14bb, prints these commands. Its sentence about the next container start is not copied here.

docker build -t instantmesh -f docker/Dockerfile .
docker run -it -p 43839:43839 --platform=linux/amd64 --gpus all -v $MODEL_DIR:/workspace/instantmesh/models instantmesh

The docker README says to open http://localhost:43839. On a rented GPU that port is on the instance. The same file’s two-GPU example passes --gpus '"device=0,1"'. Every catalog row has min_gpu_count 1. This page does not claim that listing.

ComfyUI

The README badge and the acknowledgements line link jtydhr88/ComfyUI-InstantMesh. This page does not copy that repository’s install. The ComfyUI examples top-level directory list on 2026-11-13 had no directory named instantmesh. Examples HEAD was f9431bb000ce792094ff345446e22cac1ea6cef3, committed 2025-11-26T20:33:58Z. Installing ComfyUI itself is How to install ComfyUI and ComfyUI-Manager on a cloud GPU.

When it fails

CUDA out of memory. The README, app.py, and run.py print no GPU GB figure. The README’s single-GPU command is CUDA_VISIBLE_DEVICES=0 python app.py. If the process raises that error, use how to fix CUDA out of memory on a cloud GPU.

“CUDA error: no kernel image is available for execution on the device” on an RTX 5090. See the install section. This page did not re-test the pinned torch build on that card.

The checkpoint name does not match. run.py builds the checkpoint filename from the config basename, with hyphens replaced by underscores. app.py downloads instant_mesh_large.ckpt for configs/instant-mesh-large.yaml. This page did not run either download.

Save the mesh, then destroy

Copy outputs/instant-mesh-large/meshes/, outputs/instant-mesh-large/videos/, and outputs/instant-mesh-large/images/ from the documented run.py command, and the obj, glb, and mp4 that app.py prints, before you destroy the instance. Save your work before you destroy a cloud GPU is the checklist. The terms say data on local instance storage is permanently deleted when the instance is destroyed.

The pricing page FAQ states the billing rule in these words:

Per-minute options have a 1-minute minimum; unused prepaid minutes are refunded when you destroy the instance. Some configurations use whole-hour billing with a 1-hour minimum; unused time within a charged hour is not refunded on voluntary stop. The billing period, minimum charge and initial prepayment are shown before confirmation. No subscription.

Frequently asked questions

What GPU memory figure does the InstantMesh README print?

The README, app.py, and run.py print no GPU GB figure. This page does not invent one. The smallest vram_gb in gpu-prices.json (updated_at 2026-11-13T14:01:30.465Z) is 8, on RTX 2080. This page did not run InstantMesh and does not mark a row as enough. Which listing you can start is on https://cloudgpu.app/deploy.

Where do the mesh and the video go?

run.py defaults --output_path to outputs/. It joins that directory, the config file name without .yaml, and images, meshes, or videos. The documented command uses configs/instant-mesh-large.yaml and examples/hatsune_miku.png, so those joins are outputs/instant-mesh-large/images/hatsune_miku.png, outputs/instant-mesh-large/meshes/hatsune_miku.obj, and, when --save_video is set, outputs/instant-mesh-large/videos/hatsune_miku.mp4. app.py writes the obj, the glb, and the mp4 under the directory of a NamedTemporaryFile. This page did not run the commands.

Which port does the Gradio app use, and does the README document ComfyUI?

app.py calls demo.launch with server_name 0.0.0.0 and server_port 43839. The docker README publishes 43839 and says to open http://localhost:43839. The README thanks a contributor for jtydhr88/ComfyUI-InstantMesh. This page does not copy that repository install. The ComfyUI examples top-level directory list on 2026-11-13 had no instantmesh directory. This page did not start the app.

Which license covers the code and the weights?

The repository LICENSE file is the Apache License, Version 2.0, and the appendix copyright line is the unfilled example. The GitHub license field on 2026-11-13 was Apache-2.0. The card TencentARC/InstantMesh had cardData.license apache-2.0 and gated false. run.py and app.py load sudo-ai/zero123plus-v1.2. That card returned a null license field on 2026-11-13. Section 2 of the Apache file grants a no-charge, royalty-free copyright license. That wording is the upstream license, not a CloudGPU price and not a storage allowance.

Sources (read 2026-11-13, Asia/Shanghai)

  • InstantMesh README (Python >= 3.10, PyTorch >= 2.1.0, CUDA >= 12.1, the conda and pip block, python app.py, CUDA_VISIBLE_DEVICES=0, the run.py commands, two-GPU sentence, jtydhr88/ComfyUI-InstantMesh): https://github.com/TencentARC/InstantMesh/blob/main/README.md commit 08822c52fdc399b93ea00e4fa9e596344ed52ccc. Repository HEAD is that commit, committed 2025-01-03T09:09:13Z
  • requirements.txt (pytorch-lightning==2.1.2, gradio==3.41.2, transformers==4.34.1, diffusers==0.20.2): commit f8af69954e0032e2d57d37b6dea175576213b5fd
  • run.py (sudo-ai/zero123plus-v1.2, TencentARC/InstantMesh downloads, --output_path default outputs/, mesh and video joins): commit e17ac11d9ec09d0dfce6e3264c2c2699130c6134
  • app.py (demo.launch(server_name="0.0.0.0", server_port=43839), NamedTemporaryFile obj, two-GPU branch, instant_mesh_large.ckpt): commit f71a756b3534183b344cf66567008cf92a41fc91
  • docker/README.md (docker build, docker run -p 43839:43839, http://localhost:43839): commit 082aeabaa27b922f517c71748d05a6c3cdba14bb
  • LICENSE (Apache 2.0, unfilled appendix copyright line): commit 2924b10394347354ce4016a332818bc5d847d0aa. GitHub license field Apache-2.0
  • Model card TencentARC/InstantMesh (cardData.license apache-2.0, gated false) and sudo-ai/zero123plus-v1.2 (license field null), read 2026-11-13
  • ComfyUI examples top-level directories (no instantmesh directory): https://github.com/comfyanonymous/ComfyUI_examples commit f9431bb000ce792094ff345446e22cac1ea6cef3
  • Public GPU memory: https://cloudgpu.app/gpu-prices.json (updated_at 2026-11-13T14:01:30.465Z) and https://cloudgpu.app/v1/public/gpu-catalog (generated_at 2026-11-13T14:01:31.438Z). GET /v1/public/compute-capabilities returned feature flags and no GPU list. The catalog had no InstantMesh template

Cards you can start are on the Deploy page. Prices are on https://cloudgpu.app/pricing and are not repeated here.

Last updated: 2026-11-13 (Asia/Shanghai).