3D generative model
Shap-E local deployment: 315M parameters, 1.33GB of fp16 weights, one 24GB card for the full text-to-3D pipeline
OpenAI's Shap-E does not emit point clouds or voxels. It diffuses the parameters of an implicit function directly, so a single latent renders as a NeRF or marching-cubes out as a vertex-coloured mesh. The weights are tiny. All the memory pressure sits in the render step.
Shap-E · self-hosted
Shap-E is a two-stage system. Stage one is the transmitter: a PointCloudPerceiverChannelsEncoder (12 layers, width 1024, fed point clouds plus multi-view point clouds) that deterministically maps a 3D asset into implicit-function parameters. Stage two is a conditional diffusion model trained over that 1,048,576-dimensional latent space — the latent is shaped 1024x1024 and the prior is a 24-layer, 16-head, width-1024 transformer that works out to exactly 315M parameters, which is why OpenAI calls it text300M. Sampling uses HeunDiscreteScheduler with 1024 training timesteps, an exp beta schedule, a prediction target of x_start rather than the usual epsilon, and Karras sigmas (sigma_min=1e-3, sigma_max=160). A 64-step Shap-E sample means something completely different from a 64-step Stable Diffusion sample, so do not carry over your scheduler intuitions.
The resource picture is counterintuitive: the weights are not the constraint. The openai/shap-e repo on Hugging Face is 4.9GB, but that is fp32 and fp16 copies sitting side by side. What you actually load in half precision is prior 631.4MB, renderer 452.6MB and the CLIP ViT-L/14 text tower 247.3MB — about 1.33GB total. The image-conditioned repo, openai/shap-e-img2img, swaps the text tower for a 606.4MB CLIP vision tower, roughly 1.69GB in fp16. The original .pt checkpoints are small too: transmitter.pt 1.78GB, text_cond.pt 1.26GB, image_cond.pt 1.26GB, vector_decoder.pt 905MB. The VRAM goes to rendering. create_pan_cameras spins a 20-frame orbit by default, and the NeRSTF renderer takes 64 coarse plus 128 fine samples per ray, so memory scales as frame_size squared times 20 frames times 192 samples times batch_size. The official notebook defaults to batch_size=4, and issue #42 in the repo is an RTX 2060 Super 8GB dying at exactly that step.
One more piece of reality. The openai/shap-e repository has 14 commits total and the last one landed in November 2023 (a normalize_scene bug fix), so upstream is effectively frozen. The quality ceiling is written into the config as well: the transmitter's renderer block sets grid_size: 128, meaning STF mesh extraction is permanently 128-cubed marching cubes, and CLIP's 77-token prompt limit caps how much description you can push in. You will not prompt your way to Hunyuan3D-2.1 (a 3.0B shape DiT plus a 1.3B texture model) or TRELLIS detail. But Shap-E remains the fastest, cheapest, most legible implicit-3D baseline there is: MIT licensed, 1.33GB of weights, latents in seconds, and ShapEPipeline still maintained on the diffusers main branch. On NexGPU an RTX 3090 24GB is $0.193/GPU-hour, metered per second and stopped when you stop the instance — far cheaper than fighting your local CUDA install.
01 —
Four checkpoints and two pipelines
Real on-disk sizes for the official .pt files and the diffusers pipelines, verified byte for byte
| Version | Parameters | VRAM | Context | Notes |
|---|---|---|---|---|
| text300M (text_cond.pt) | 315M | fp32 checkpoint 1.26GB / fp16 ~631MB | 77-token prompt (CLIP ViT-L/14) | The text-conditioned diffusion prior: 24 layers, 16 heads, width 1024, emitting a 1024x1024 latent. |
| image300M (image_cond.pt) | 316M | fp32 checkpoint 1.26GB, plus a 606MB fp16 CLIP vision tower | One reference image, background removal recommended | The image-to-3D variant; conditioning moves from text to CLIP image embeddings and the official guidance_scale is 3.0, not 15.0. |
| transmitter (transmitter.pt) | 444M | fp32 checkpoint 1.78GB | 1,048,576-dim latent (1024x1024) | Encoder and decoder fused; you only need it to encode your own 3D assets into the latent space, and that path additionally requires Blender 3.3.1+ with BLENDER_PATH set. |
| vector_decoder (decoder.pt) | 226M | fp32 checkpoint 905MB / fp16 452.6MB | grid_size 128, 64 coarse + 128 fine samples | Inference-only needs just this: latent to NeRSTF implicit field, then NeRF render or STF mesh extraction. |
| diffusers openai/shap-e | 315M prior + 124M CLIP text tower | ~1.33GB across three fp16 files (4.9GB whole repo) | frame_size 64-256, 20-frame orbit | The best-maintained path: three lines of ShapEPipeline, and output_type="mesh" gets you geometry directly. |
| diffusers openai/shap-e-img2img | 316M prior + 303M CLIP vision tower | ~1.69GB in fp16 (6.0GB whole repo) | Reference image resized to 256x256 | ShapEImg2ImgPipeline; the common community pattern is generating the image with Kandinsky or SDXL first, then lifting it to 3D. |
02 —
Which GPU to rent for Shap-E
With 1.33GB of weights, the real sizing question is render throughput and batch size
Cheapest way to run text-to-3D end to end: fp16, batch 1, frame_size 64 then 256
RTX 3090 24GB$0.193/GPU-hour
Ampere gives you bf16, and 24GB comfortably absorbs the default batch_size=4 orbit render at frame_size 256, at the lowest rate on the fleet.
Interactive prompt iteration with repeated 20-frame 256px orbits and STF mesh exports
RTX 4090 24GB$0.540/GPU-hour
The bottleneck is per-sample MLP evaluation inside NeRSTF, and the 4090's compute density shortens every iteration of the tuning loop.
Batch-generating hundreds of prompts into an asset library with batch_size 8-16
A100 PCIE 80GB$0.824/GPU-hour
Render memory scales linearly with batch_size, so 80GB lets you render a whole sweep in parallel and export once instead of reloading weights repeatedly.
Using Shap-E as a baseline while benchmarking Hunyuan3D-2.1 on the same box (6GB for shape, 16GB for shape plus texture)
RTX 5090 32GB$0.723/GPU-hour
32GB holds Shap-E's 1.33GB alongside Hunyuan3D's full shape-and-texture stack, so the comparison never needs a second instance.
03 —
Four steps to a running Shap-E
From a NexGPU PyTorch image to a glb you can drop into Blender
- 01
Start the instance and install dependencies
Pick an RTX 3090 24GB and a PyTorch prebuilt image in the NexGPU console, then connect over SSH or Jupyter. Shap-E's dependency footprint is unusually light — nothing here compiles a CUDA extension.
pip install diffusers transformers accelerate trimesh - 02
Pull fp16 weights and run your first prompt
Pass variant="fp16" so you fetch only the half-precision shards instead of dragging down the full 4.9GB repo. The official guidance_scale is 15.0, use 64 inference steps, and start at frame_size 64 to confirm the pipeline works before going to 256.
python -c "import torch; from diffusers import ShapEPipeline; from diffusers.utils import export_to_gif; p=ShapEPipeline.from_pretrained('openai/shap-e', torch_dtype=torch.float16, variant='fp16').to('cuda'); export_to_gif(p('a shark', guidance_scale=15.0, num_inference_steps=64, frame_size=256).images[0], 'shark.gif')" - 03
Extract the mesh and fix its orientation
Setting output_type to "mesh" takes the STF branch and gives you a 128-cubed marching-cubes surface, which export_to_ply writes out. Shap-E meshes are posed from a bottom viewpoint by default, so rotate -90 degrees about X before importing into Blender or Unreal or your model will be lying on its side.
python -c "import trimesh, numpy as np; m=trimesh.load('3d_cake.ply'); m.apply_transform(trimesh.transformations.rotation_matrix(-np.pi/2,[1,0,0])); m.export('3d_cake.glb', file_type='glb')" - 04
Install the original repo only if you need it
You only need the upstream clone for native image300M sampling or for encode_model.ipynb, which encodes your own assets into the latent space. Note that setup.py carries a git dependency on OpenAI's CLIP, and the encode path additionally requires Blender 3.3.1+ with BLENDER_PATH exported.
git clone https://github.com/openai/shap-e && cd shap-e && pip install -e . && pip install git+https://github.com/openai/CLIP.git
What one asset-generation run actually costs
Price it on an RTX 3090 24GB at $0.193/GPU-hour. Boot, install diffusers, pull the fp16 shards of openai/shap-e (about 1.33GB) — ten minutes, so 0.167h x $0.193 = $0.03. Then sweep 200 prompts, each at batch_size=4 with frame_size=64 for candidates and a frame_size=256 re-render for the keepers, plus ply and obj export: call it 3 hours of GPU, 3 x $0.193 = $0.58. Weights plus eight hundred-odd mesh files occupy 30GB; destroy the instance the same day and storage at $0.414/GB-month prorates to 30 x $0.414 / 30 = $0.41 for that day. Pulling roughly 4GB of glb files back down costs 4 x $0.0081 = $0.03. Total: a shade over $1.05. Want the 20-frame 256px renders to finish noticeably faster? The same 3 hours on an RTX 4090 24GB is 3 x $0.540 = $1.62. As for the H100 SXM 80GB at $3.582/GPU-hour — a 315M-parameter prior cannot come close to saturating it; save that budget for Hunyuan3D or for training. NexGPU meters per second and prices per hour, with no minimum, no setup fee and no quota request, and compute billing stops the moment the instance stops.
04 —
FAQ
How much VRAM does Shap-E actually need? Is an 8GB card enough?
Is Shap-E obsolete? Is it still worth deploying?
Can Shap-E output go straight into Blender or Unreal?
Why do my results look so much worse than the demos?
Can I run Shap-E on cheap cards like T4, V100 or P40?
How much do I have to download, and what are the known install gotchas?
Start building on NexGPU
Enterprise R&D team or solo developer — either way, your first job can be running in minutes.
Sign up to browse live network pricing. No payment method required.
