Meshy V7.1 Multi Image To 3d API Documentation
Playground
Try it on WaveSpeedAI!Meshy 7.1 Multi-Image-to-3D reconstructs textured, PBR-ready 3D models from one to four views of the same object, with 2K geometry resolution for finer detail and configurable topology, rigging, and animation for game assets, product visualization, and production workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Features
Meshy 7.1 Multi-Image to 3D reconstructs a textured 3D mesh from one to four images of the same object taken from different angles. Meshy 7.1 focuses on geometric detail: set geometry_resolution to 2k for finer surfaces and sharper silhouettes. It returns a GLB model, plus separate rigged and animated GLB files when rigging is enabled.
Why Choose This?
-
Finer geometric detail
geometry_resolutiongoes up to2k, capturing small surface details and cleaner silhouettes — useful for close-up renders and 3D printing. -
Texture control Generate textured models, enable PBR maps, or guide textures with a prompt or reference image.
-
Production geometry controls Adjust topology, target polygon count, symmetry, and remeshing.
-
Optional rigging and animation Rig humanoid characters and apply animation presets in the same request.
-
Rigged and animated GLB files With rigging enabled, the rigged character and its walking, running and preset animations come back as separate GLB files.
Parameters
| Parameter | Required | Description |
|---|---|---|
| images | Yes | One to four images of the same object from different angles. |
| topology | No | Mesh topology: quad or triangle. Default: triangle. |
| target_polycount | No | Target polygon count. Range: 100–300000. Default: 30000. |
| symmetry_mode | No | off, auto, or on. Default: auto. |
| should_remesh | No | Enable remeshing for cleaner topology. Default: true. |
| should_texture | No | Generate textures. Default: true. |
| enable_pbr | No | Generate metallic, roughness, and normal maps. Default: false. |
| geometry_resolution | No | standard or 2k. 2k generates finer geometric detail. Default: standard. |
| pose_mode | No | Optional humanoid pose: a-pose or t-pose. Leave unselected for no specific pose. |
| texture_prompt | No | Optional text guidance for texture generation. Maximum length: 600 characters. |
| texture_image | No | Optional image used to guide texture generation. |
| enable_rigging | No | Automatically rig a humanoid character. Default: false. |
| rigging_height_meters | No | Approximate character height in meters when rigging is enabled. Default: 1.7. |
| enable_animation | No | Apply an animation preset. Requires enable_rigging. Default: false. |
| animation_action_id | No | Animation preset ID. Range: 0–696. Default: 92. |
Output
outputs is a list of GLB file URLs in this order:
| # | File | Returned when |
|---|---|---|
| 1 | 3D model | Always |
| 2 | Rigged character | enable_rigging is true |
| 3 | Walking animation | enable_rigging is true |
| 4 | Running animation | enable_rigging is true |
| 5 | Animation preset from animation_action_id | enable_animation is true |
Pricing
| Configuration | Cost |
|---|---|
Untextured mesh (should_texture: false) | $0.96 |
| Textured mesh | $1.44 |
2k geometry resolution | +$0.24 |
| Auto-rigging | +$0.24 |
| Animation preset | +$0.144 |
Example Costs
| Configuration | Cost |
|---|---|
Untextured mesh (should_texture: false) | $0.96 |
| Textured mesh | $1.44 |
| Textured mesh + 2K geometry | $1.68 |
| Textured mesh + auto-rigging | $1.68 |
| Textured mesh + 2K geometry + auto-rigging + animation | $2.064 |
Other parameters do not add separate charges.
Pro Tips
- Use
2kgeometry for hero assets, close-up renders, and 3D printing; usestandardfor quick iteration. - Higher geometry resolution applies to
standardgeometry. - Use
texture_promptto describe materials such as metal, leather, ceramic, fabric, or plastic. - Enable rigging only for humanoid characters; animation requires rigging.
- Use consistent views of the same object with matching lighting and scale.
Related Models
- Meshy 7.1 Image to 3D — Generate from a single reference image, with up to 4K geometry.
- Meshy 7.1 Text to 3D — Generate a 3D model from a text prompt.
Authentication
For authentication details, please refer to the Authentication Guide.
API Endpoints
Submit Task & Query Result
set -euo pipefail
export WAVESPEED_API_KEY="your-api-key"
REQUEST_BODY=$(cat <<'JSON'
{
"images": [
"https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg"
],
"topology": "triangle",
"target_polycount": 30000,
"symmetry_mode": "auto",
"should_remesh": true,
"should_texture": true,
"enable_pbr": false,
"geometry_resolution": "standard",
"pose_mode": "a-pose",
"enable_rigging": false,
"rigging_height_meters": 1.7,
"enable_animation": false,
"animation_action_id": 92
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/meshy/v7.1/multi-image-to-3d" \
-H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
-H "Content-Type: application/json" \
-d "${REQUEST_BODY}")
TASK=$(printf '%s' "${SUBMIT_RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "${TASK}" | jq -r '.id // empty')
if [ -z "${PREDICTION_ID}" ]; then
printf 'Submission response did not contain a prediction id
' >&2
exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"
# 2. Poll until the prediction finishes.
while true; do
RESPONSE=$(curl --silent --show-error --fail-with-body \
"${RESULT_URL}" \
-H "Authorization: Bearer ${WAVESPEED_API_KEY}")
RESULT=$(printf '%s' "${RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')
case "${STATUS}" in
completed) printf '%s\n' "${RESULT}" | jq '.outputs'; break ;;
failed|cancelled|timeout|deleted) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
*) sleep 2 ;;
esac
doneParameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| images | array<string> | Yes | - | 1 ~ 4 items · each item: 1 ~ unlimited characters | One to four images of the same object from different angles. |
| topology | string | No | triangle | quad, triangle | Mesh topology for the generated model. |
| target_polycount | integer | No | 30000 | 100 ~ 300000 | Target number of polygons for remeshed output. |
| symmetry_mode | string | No | auto | off, auto, on | Controls symmetry during model generation. |
| should_remesh | boolean | No | true | - | Enable remeshing for cleaner topology. |
| should_texture | boolean | No | true | - | Generate textures for the 3D model. |
| enable_pbr | boolean | No | false | - | Generate PBR maps in addition to the base color texture. |
| geometry_resolution | string | No | standard | standard, 2k | Geometry resolution. `standard` is the default; `2k` generate denser, finer surface detail (up to 2K) at extra cost. Only applies to `standard` geometry. |
| pose_mode | string | No | - | a-pose, t-pose | Optional humanoid pose. Leave unselected for no specific pose. |
| texture_prompt | string | No | - | - | Optional text guidance for texture generation. |
| texture_image | string | No | - | - | Optional image to guide texture generation. |
| enable_rigging | boolean | No | false | - | Automatically rig a humanoid character, including basic walking and running animations. |
| rigging_height_meters | number | No | 1.7 | 0.01 ~ ∞ | Approximate character height in meters when rigging is enabled. |
| enable_animation | boolean | No | false | - | Apply an animation preset. Requires enable_rigging. |
| animation_action_id | integer | No | 92 | 0 ~ 696 | Meshy animation preset ID, used only when animation is enabled. |
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data.id | string | Unique identifier for the prediction, Task Id |
| data.model | string | Model ID used for the prediction |
| data.outputs | array | Output values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed) |
| data.urls | object | Object containing related API endpoints |
| data.status | string | Task status. completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses. |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |
Result Request Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | Yes | - | Task ID |
Result Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data | object | The prediction data object containing all details |
| data.id | string | Unique identifier for the prediction |
| data.model | string | Model ID used for the prediction |
| data.outputs | array<string | object> | Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model. |
| data.urls | object | Object containing related API endpoints |
| data.status | string | Status: completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses |
| data.created_at | string | ISO timestamp of when the request was created |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |