Meshy V7 Multi Image To 3d API Documentation

Meshy V7 Multi Image To 3d API Documentation

Playground

Try it on WaveSpeedAI!

Meshy V7 Multi-Image-to-3D reconstructs textured, PBR-ready 3D models from one to four views of the same object, with configurable topology, rigging, and animation options for game assets, product visualization, 3D design, and production workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Features

Meshy V7 Multi-Image to 3D reconstructs a textured 3D mesh from one to four images of the same object taken from different angles. It generates a GLB model and provides additional export formats such as FBX, OBJ, and USDZ when available.


Why Choose This?

  • Multi-image 3D reconstruction
    Generate a 3D model from one to four reference images of the same object.

  • Better shape consistency
    Use multiple views to improve object structure, silhouette, and spatial accuracy compared with single-image generation.

  • Texture generation
    Generate textured 3D models with optional PBR material output.

  • Geometry controls
    Adjust topology, target polygon count, symmetry mode, and remeshing behavior for different production needs.

  • Optional rigging and animation
    Enable humanoid auto-rigging and animation presets when supported by the input object.

  • Multiple export formats
    Receive GLB output with available FBX, OBJ, and USDZ exports.


Parameters

ParameterRequiredDescription
imagesYesOne to four images of the same object from different angles.
topologyNoGeometry topology setting for the generated model.
target_polycountNoTarget polygon count for remeshed geometry.
symmetry_modeNoSymmetry setting used to guide geometry reconstruction.
should_remeshNoWhether to remesh the generated model.
should_textureNoWhether to generate textures for the 3D model.
enable_pbrNoEnable PBR material output when texture generation is used.
pose_modeNoOptional humanoid pose mode.
texture_promptNoText prompt describing the desired texture style or material details.
texture_image_urlNoReference image used to guide texture appearance.
enable_riggingNoEnable humanoid auto-rigging when supported.
rigging_height_metersNoApproximate character height in meters when rigging is enabled.
enable_animationNoEnable an animation preset. Animation requires rigging.
animation_action_idNoAnimation preset ID used when animation is enabled.

How to Use

  1. Upload reference images — Provide one to four images of the same object from different angles.
  2. Configure geometry — Adjust topology, target polygon count, symmetry mode, or remeshing when needed.
  3. Configure textures — Use should_texture, enable_pbr, texture_prompt, or texture_image_url to control material output.
  4. Enable rigging — Use enable_rigging for suitable humanoid characters and optionally specify rigging_height_meters.
  5. Enable animation — Use enable_animation and select an animation_action_id when an animation preset is needed. Rigging must also be enabled.
  6. Submit — Generate the 3D model and download the available exports.

Pricing

ConfigurationFinal Price
Multi-image 3D model$1.32
Multi-image 3D model with auto-rigging$1.54
Multi-image 3D model with auto-rigging and animation$1.672

Example Costs

ConfigurationFinal Price
Standard textured model$1.32
Textured model with auto-rigging$1.54
Textured model with auto-rigging and animation$1.672

Best Use Cases

  • Multi-view object reconstruction — Build 3D models from front, side, rear, or angled object views.
  • Product 3D assets — Convert product photos into textured 3D models for previews and visualization.
  • E-commerce workflows — Create 3D assets for interactive product display.
  • Game and real-time assets — Generate usable 3D models with geometry and remeshing controls.
  • Character workflows — Generate textured character models with optional rigging and animation.
  • Prototype modeling — Turn multiple concept views into a 3D asset for iteration.

Pro Tips

  • Use clear, consistent photos of the same object.
  • Provide front, side, and rear views when possible.
  • Keep lighting, background, and object scale consistent across images.
  • Do not mix different objects or different versions of the same object.
  • Avoid strong reflections, motion blur, occlusion, or heavy shadows.
  • Use texture_prompt to describe material details such as metal, fabric, leather, ceramic, or plastic.
  • Enable rigging only for suitable humanoid characters.
  • Use Meshy V7 Image to 3D when you only have one reference image.

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,
  "pose_mode": "",
  "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/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=$(printf '%s' "${TASK}" | jq -r '.urls.get // empty')
if [ -z "${RESULT_URL}" ]; then RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"; fi

# 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) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
    created|processing) sleep 2 ;;
    *) printf 'Unexpected status: %s
' "${STATUS}" >&2; exit 1 ;;
  esac
done

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
imagesarray<string>Yes-1 ~ 4 itemsOne to four images of the same object from different angles.
topologystringNotrianglequad, triangleMesh topology for the generated model.
target_polycountintegerNo30000100 ~ 300000Target number of polygons for remeshed output.
symmetry_modestringNoautooff, auto, onControls symmetry during model generation.
should_remeshbooleanNotrue-Enable remeshing for cleaner topology.
should_texturebooleanNotrue-Generate textures for the 3D model.
enable_pbrbooleanNofalse-Generate PBR maps in addition to the base color texture.
pose_modestringNo-Optional humanoid pose mode. Leave empty for the provider default.
texture_promptstringNo--Optional text guidance for texture generation.
texture_image_urlstringNo--Optional image to guide texture generation.
enable_riggingbooleanNofalse-Automatically rig a humanoid character, including basic walking and running animations.
rigging_height_metersnumberNo1.70.01 ~ ∞Approximate character height in meters when rigging is enabled.
enable_animationbooleanNofalse-Apply an animation preset. Requires enable_rigging.
animation_action_idintegerNo920 ~ 696Meshy animation preset ID, used only when animation is enabled.

Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
data.idstringUnique identifier for the prediction, Task Id
data.modelstringModel ID used for the prediction
data.outputsarrayOutput values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed)
data.urlsobjectObject containing related API endpoints
data.urls.getstringURL to retrieve the prediction result
data.statusstringStatus of the task: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”)
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds

Result Request Parameters

ParameterTypeRequiredDefaultDescription
idstringYes-Task ID

Result Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
dataobjectThe prediction data object containing all details
data.idstringUnique identifier for the prediction
data.modelstringModel ID used for the prediction
data.outputsarray<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.urlsobjectObject containing related API endpoints
data.urls.getstringURL to poll for the prediction result
data.statusstringStatus: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds
© 2026 WaveSpeedAI. All rights reserved.