Tripo3d H3.0 Multiview To 3d API Documentation

Tripo3d H3.0 Multiview To 3d API Documentation

Playground

Try it on WaveSpeedAI!

Tripo3D H3.0 Multiview-to-3D turns 2 to 4 views of one object into a 3D model with Tripo’s previous-generation H3.0 model (up to 2 million faces), kept for consistency with earlier assets. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Features

Tripo3D H3.0 Multiview-to-3D generates a 3D model from multiple views of the same object. Provide 2–4 reference images from different sides, then configure geometry, textures, topology, and optional PBR materials for the final asset.


Why Choose This?

  • Multi-view reconstruction — Build a 3D model from multiple views of the same object.
  • Texture and PBR options — Generate untextured geometry, standard textures, detailed textures, or PBR materials.
  • Geometry control — Choose standard or detailed geometry and set optional face limits.
  • Topology options — Generate triangle meshes, quad meshes, or smart low-poly assets.
  • Editable parts — Generate separate untextured parts for downstream editing.
  • Texture controls — Choose texture quality, alignment, UV generation, and optional lighting cleanup.

Parameters

ParameterRequiredDescription
imagesYes2–4 views of the same object in front, left, back, right order. The front view is required.
textureNoGenerate texture maps. Disable both texture and pbr for an untextured model. Default: true.
pbrNoGenerate PBR materials. Enabling this also enables textures. Default: true.
texture_qualityNoTexture quality: standard, detailed, extreme, or fast. extreme uses 8K textures. fast requires texture version v3.5-20260815. Default: standard.
texture_versionNoTexture model version: v3.0-20250812 or v3.5-20260815. Default: v3.0-20250812.
delightNoReduce lighting baked into the source images during texturing. Applies only to texture version v3.5-20260815. Default: true.
geometry_qualityNoGeometry quality: standard or detailed. Default: standard.
quadNoGenerate a quad mesh in FBX format. If face_limit is omitted, the target is approximately 10,000 faces. Default: false.
smart_low_polyNoGenerate a low-poly mesh with simplified topology. Default: false.
generate_partsNoGenerate separate editable parts. Parts are untextured and use triangle meshes. Default: false.
face_limitNoRequested face limit. Omit for adaptive topology. Supports up to 1,000,000 faces for standard geometry, 2,000,000 for detailed geometry, 150,000 for quad meshes, or 500–20,000 with smart low-poly.
texture_alignmentNoTexture alignment priority: original_image or geometry. Default: original_image.
orientationNoModel orientation: default or align_image. align_image applies to textured models. Default: default.
enable_image_autofixNoApply image preprocessing before generation. Default: false.
auto_sizeNoEstimate real-world scale in meters. Requires a textured model. Default: false.
export_uvNoInclude UV unwrapping during generation. Default: true.
model_seedNoOptional seed for geometry generation.
texture_seedNoOptional seed for texture generation.

How to Use

  1. Add reference views — Provide 2–4 images of the same object, with the front view required.
  2. Choose materials — Keep textures and PBR enabled, or disable both for an untextured model.
  3. Choose quality — Select texture and geometry quality based on the level of detail you need.
  4. Configure topology optional — Use quad, smart low-poly, face limits, or separate parts when needed.
  5. Submit — Generate and retrieve the completed 3D model.

Pricing

Pricing is per generated model and depends on the selected options.

Base Price

ConfigurationPrice
Untextured model$0.24
Standard or fast textured model$0.36

Optional Add-ons

SettingAdditional Price
Detailed textures+$0.12
Extreme textures+$0.24
Detailed geometry+$0.24
Quad mesh+$0.06
Smart low-poly mesh+$0.12
Separate parts+$0.24

The default configuration costs $0.36 per model.

PBR does not add a separate charge beyond the textured model price.

detailed and extreme texture charges apply only when textures are generated.

When generate_parts=true, the model uses the untextured base price and the separate-parts add-on. Texture and quad charges do not apply.


Best Use Cases

  • Product reconstruction — Build 3D models from multiple product photos.
  • Game assets — Generate textured, low-poly, or quad-based assets for game workflows.
  • E-commerce 3D — Convert multi-angle product photography into reusable 3D assets.
  • Rendering assets — Generate textured models with optional PBR materials.
  • Editable models — Create separated parts for additional modeling and refinement.
  • High-detail assets — Combine detailed geometry with higher-quality textures for complex objects.

Pro Tips

  • Use images of the same object with consistent shape, appearance, and lighting.
  • Make sure the front view is clear and centered.
  • Keep the object’s scale and framing reasonably consistent across views.
  • Use detailed geometry only when additional mesh detail is needed.
  • Use fast textures for quicker iteration and extreme when 8K texture detail is required.
  • Use smart_low_poly for simpler objects that need lightweight topology.
  • Use generate_parts when individual components need to remain separately editable.

Notes

  • Provide 2–4 views of the same object.
  • The front view is required.
  • Disable both texture and pbr for an untextured model.
  • Enabling pbr also enables texture generation.
  • fast texture quality requires texture_version=v3.5-20260815.
  • delight applies only to texture version v3.5-20260815.
  • quad=true generates an FBX quad mesh and defaults to approximately 10,000 faces when face_limit is not specified.
  • generate_parts requires texture=false and pbr=false.
  • Do not combine generate_parts with quad or smart_low_poly.
  • Separate parts are generated as untextured triangle meshes.
  • auto_size requires a textured model and estimates real-world scale in meters.
  • orientation=align_image applies only to textured models.
  • Face limits depend on the selected geometry and topology settings.

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",
    "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg"
  ],
  "texture": true,
  "pbr": true,
  "texture_quality": "standard",
  "texture_version": "v3.0-20250812",
  "delight": true,
  "geometry_quality": "standard",
  "quad": false,
  "smart_low_poly": false,
  "generate_parts": false,
  "texture_alignment": "original_image",
  "orientation": "default",
  "enable_image_autofix": false,
  "auto_size": false,
  "export_uv": true
}
JSON
)

# 1. Submit the prediction once. Never retry this request automatically:
# a retry after an unclear failure can create a second, billed task.
CHECK='The task may already exist. Check History or the predictions list before submitting again.'
if ! SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  --connect-timeout 10 --max-time 60 \
  -X POST "https://api.wavespeed.ai/api/v3/tripo3d/h3.0/multiview-to-3d" \
  -H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
  -H "Content-Type: application/json" \
  -d "${REQUEST_BODY}"); then
  printf 'Submit failed. %s\n' "${CHECK}" >&2
  exit 1
fi

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. %s\n' "${CHECK}" >&2
  exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"

# 2. Poll until the prediction reaches a final status.
BODY_FILE=$(mktemp)
trap 'rm -f "${BODY_FILE}"' EXIT
while true; do
  # Transient errors (429, 5xx) are retried, honoring Retry-After.
  HTTP_CODE=$(curl --silent --show-error --fail-with-body \
    --connect-timeout 10 --max-time 60 --retry 5 --retry-delay 2 \
    --output "${BODY_FILE}" --write-out '%{http_code}' \
    "${RESULT_URL}" \
    -H "Authorization: Bearer ${WAVESPEED_API_KEY}" || true)
  case "${HTTP_CODE}" in
    2??) ;;
    000|429|5??)  # dropped connection or temporary error: keep polling
      printf 'Task %s: HTTP %s, polling again in 10s\n' "${PREDICTION_ID}" "${HTTP_CODE}" >&2
      sleep 10; continue ;;
    *) printf 'Task %s: HTTP %s\n' "${PREDICTION_ID}" "${HTTP_CODE}" >&2
      cat "${BODY_FILE}" >&2; exit 1 ;;
  esac
  RESULT=$(jq 'if type == "object" and has("data") then .data else . end' "${BODY_FILE}")
  STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')

  case "${STATUS}" in
    completed) printf '%s\n' "${RESULT}" | jq '.outputs'; break ;;
    failed|cancelled|timeout|deleted)
      printf 'Task %s ended with status %s\n' "${PREDICTION_ID}" "${STATUS}" >&2
      printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
    *) sleep 2 ;;
  esac
done

Retry temporary errors only while polling, never the submit request. Errors, retries and timeouts

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
imagesarray<string>Yes-2 ~ 4 items2 to 4 images of the same object, in the order front, left, back, right. The front view is required.
texturebooleanNotrue-Generate texture maps. Turn off (with pbr) for an untextured model at a lower price.
pbrbooleanNotrue-Generate PBR materials (base color, metallic, roughness, normal). Turning it on also turns on texture.
texture_qualitystringNostandardstandard, detailed, extreme, fastTexture quality: standard, detailed (high resolution), extreme (8K) or fast (same size as standard, quicker; uses texture model v3.5-20260815).
texture_versionstringNov3.0-20250812v3.0-20250812, v3.5-20260815Texture model. v3.5-20260815 is the newest; the fast quality and delight use it.
delightbooleanNotrue-Remove the lighting baked into the source before texturing (texture model v3.5-20260815 only).
geometry_qualitystringNostandardstandard, detailedGeometry quality: standard or detailed (Ultra, up to 2 million faces).
quadbooleanNofalse-Output a quad mesh (FBX). Without a face_limit it targets 10,000 faces.
smart_low_polybooleanNofalse-Generate a low-poly mesh with hand-crafted style topology. Best for simple objects.
generate_partsbooleanNofalse-Generate the model as separate editable parts. Parts are untextured and triangle-only.
face_limitintegerNo-48 ~ 2000000Maximum number of faces. Omit for adaptive. Up to 1,000,000 (2,000,000 with detailed geometry, 150,000 with quad; 500 to 20,000 with smart_low_poly).
texture_alignmentstringNooriginal_imageoriginal_image, geometryWhat the texture follows: the source image colors or the generated geometry.
orientationstringNodefaultdefault, align_imagealign_image rotates the model to the source image viewpoint (textured models only).
enable_image_autofixbooleanNofalse-Improve a low-quality source image before generation. Takes longer.
auto_sizebooleanNofalse-Scale the model to real-world size in meters. Needs a textured model.
export_uvbooleanNotrue-Unwrap UVs during generation. Turn off for faster generation and a smaller file.
model_seedintegerNo--Seed for the geometry: the same seed and input give the same mesh.
texture_seedintegerNo--Seed for the texture: keep model_seed and change texture_seed for new textures on the same mesh.

Every model also accepts the global request options enable_sync_mode and enable_base64_output; see their pages for details.

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.statusstringTask status. completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses.
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.statusstringStatus: completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses
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.