Meshy - Image to 3D
Meshy Image-to-3D, Right Inside Your Graph
- api_key
- image
- thumbnail
- base_color
- normal
- metallic_roughness
- model_path
You've got an image in your graph - a render, a sketch, a photo of a toy, whatever - and you want a mesh out of it. MeshyImageTo3D is the node that makes that happen: it ships your image to Meshy's image-to-3D API and comes back with a 3D model plus its texture maps, all without your GPU doing a single bit of generation work. It's the pack's answer to "I have a picture, I want a model I can spin around."
How it works
The mechanism is worth knowing because it explains the node's limits. The node takes the IMAGE tensor, encodes it to a base64 PNG data URL, and posts that directly to Meshy's image-to-3D endpoint (note: the image path uses Meshy's v1 API, while the text nodes use v2 - they're different services under the hood). Then it's the familiar song and dance: poll every five seconds, progress bar, up to a ten-minute window, download the result. It's a big base64 blob riding over HTTPS, so don't feed it a 4K render and expect snappy uploads.
The inputs that matter
- image - required
IMAGEinput. Any image in your workflow. - ai_model -
meshy-4,meshy-5, orlatest(default). Leave it onlatest. - topology -
triangle(default) orquad; for game engines and sculpting tools you often want quads, but triangle is the safe default. - target_polycount - 100 to 300,000, default 30,000. Lower is lighter, cheaper, and friendlier to engines; higher holds more detail.
- should_remesh - default on. Cleans up the topology into something usable rather than raw photogrammetry-style soup. Keep it on unless you know why you're turning it off.
- should_texture - default on. Generates the texture pass. Turn it off and you get an untextured model, and the
base_color/normal/metallic_roughnessoutputs become red error placeholders, because there's nothing to download. - enable_pbr - default off here, unlike the text-to-3D node where it's on. Flick it on if the model's headed into a PBR-capable renderer or engine.
The outputs
Five of them: thumbnail (the model render), base_color, normal, metallic_roughness (the PBR texture maps as IMAGE tensors - previewable and saveable right in the graph), and model_path, the string path to the downloaded .glb. The download step also grabs any other formats Meshy returns (FBX, OBJ, STL, USDZ) into the same meshy_<timestamp>_<short-task-id>/ output folder, so even though model_path points at the GLB, your STL for a slicer is usually sitting right next to it.
Where people get burned
Two things. First, the batch trap: if you feed this node a batched image - say, the output of a video or multi-frame node - the code silently takes only the first frame. You get one model, not a stack. Don't assume it processes a batch.
Second, the texture/print mismatch. Community reports comparing Meshy results from ComfyUI against the same prompt on meshy.ai's website note that the ComfyUI path hands over PBR textures as-is, so models can come back glossy and shiny, and users chasing 3D-print files find the result looks like a "beat up bumpy mess" once a slicer repair pass mangles those textures. If your target is printing, turn enable_pbr off and should_remesh on, and don't expect a watertight, texture-free engineering file - image-to-3D gives you an art asset, not a CAD part. There's no direct "export STL" toggle; you take whatever formats Meshy returns from the output folder.
Installing
Standard for this pack, and there are no model downloads - it's pure API. ComfyUI Manager, search "ComfyUI-Meshy", or:
cd ComfyUI/custom_nodes
git clone https://github.com/Kazama-Suichiku/ComfyUI-Meshy
pip install -r ComfyUI-Meshy/requirements.txt
then restart. Dependencies: numpy, Pillow, requests, torch, pyhocon. You'll need a Meshy API key and credits - image-to-3D pricing varies by model and is generally pricier than the text previews. The pack is brand new (single commit, late 2025), so if Manager doesn't find it, clone manually. As with the rest of the pack, failures surface as red placeholder images with the reason in the console: 401 for a bad key, content filters on the image, empty credits, or a task exceeding the ten-minute poll window.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| api_key | APIKEY | — | |
| image | IMAGE | Input image to convert to 3D model | |
| ai_modelopt | COMBO | latest | AI model version to use (latest recommended) |
| topologyopt | COMBO | triangle | Mesh topology type |
| target_polycountopt | INT | 30000100–300000 | Target polygon count (100-300,000) |
| enable_pbropt | BOOLEAN | false | Enable PBR textures |
| should_remeshopt | BOOLEAN | true | Enable remeshing for better topology |
| should_textureopt | BOOLEAN | true | Generate textures for the model |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| thumbnail | IMAGE | — |
| base_color | IMAGE | — |
| normal | IMAGE | — |
| metallic_roughness | IMAGE | — |
| model_path | STRING | — |