Generate a mesh locally
asset_io with action="generate" runs optional image-to-3D inference and writes a new workspace .glb. It does not change the open scene and does not need a lease.
The MCP process does not import PyTorch, download weights or send images to a remote service. The worker runs in a separate Python 3.11 environment with local weights.
Prepare the worker
uv venv --python 3.11 /path/to/neural-env
uv pip install --python /path/to/neural-env/bin/python -r requirements-neural.txtCheck out upstream TripoSR at commit 107cefdc244c39106fa830359024f6a2f1c78871.
Download these files into one weights directory:
config.yamlandmodel.ckptfrom the publicstabilityai/TripoSRmodel at
revision 5b521936b01fbe1890f6f9baed0254ab6351c04a
facebook/dino-vitb16/config.json, saved asdino-config.json
Configure absolute local paths in the MCP server environment:
CAVI_TRIPOSR_PYTHON=/path/to/neural-env/bin/python
CAVI_TRIPOSR_SOURCE=/path/to/TripoSR
CAVI_TRIPOSR_WEIGHTS=/path/to/weightsRun
Put an image of one isolated object on white or transparency inside the workspace, then call:
{
"action": "generate",
"image": "references/prop.png",
"path": "generated/prop.glb",
"resolution": 128
}Resolution is bounded to 64–192. Input images are at most 16 MiB and 4096 pixels per side. Generation runs offline on CPU with four threads, chunked field queries and a 180-second timeout. The output is published without replacing an existing file.
The result includes object counts, the input SHA-256 and the output path.
Continue
Import the generated GLB with asset_io:
{
"action": "import",
"path": "generated/prop.glb",
"name": "Prop",
"lease_id": "<lease_id>"
}Generated surfaces still need inspection, retopology, UV work, rigging and game import validation.