Trellis 2 Image To 3d API Documentation

Trellis 2 Image To 3d API Documentation

Playground

Try it on WaveSpeedAI!

TRELLIS.2 Image-to-3D turns a single reference image into a textured 3D GLB model with PBR materials for game assets, product visualization, 3D design, and production workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Features

TRELLIS.2 Image to 3D turns a single input image into a textured 3D GLB model with PBR materials. Upload a clear image of one object, choose generation resolution, texture size, face-count target, and background handling, then generate a 3D asset for visualization, games, prototyping, or further editing.


Why Choose This?

  • Single-image 3D generation
    Create a textured 3D model from one input image.

  • PBR material output
    Generate GLB assets with embedded UVs, base-color textures, and metallic/roughness materials.

  • Resolution control
    Choose 512, 1024, or 1536 depending on cost, speed, and detail needs.

  • Texture-size options
    Select 1024, 2048, or 4096 texture size for different asset-quality requirements.

  • Face-count control
    Set a target face count to guide mesh simplification for downstream workflows.

  • Background removal option
    Use remove_background to clean the input before 3D generation.


Parameters

ParameterRequiredDescription
imageYesInput image URL, data URI, or Base64 image. Use one clear image of a single object.
resolutionNoGeneration resolution: 512, 1024, or 1536. Default: 1024.
texture_sizeNoTexture size: 1024, 2048, or 4096. Default: 2048.
target_face_countNoApproximate mesh simplification target. Range: 10000–1000000. Default: 200000.
remove_backgroundNoRemove the image background before generation. Default: true.
seedNoRandom seed for reproducible results. Use -1 for a random seed.

How to Use

  1. Upload one image — Provide a clear image of a single object.
  2. Choose resolution — Use 512 for lower-cost drafts, 1024 for standard generation, or 1536 for higher-detail output.
  3. Choose texture size — Use 1024 or 2048 for standard textures, or 4096 when higher texture detail is needed.
  4. Set face count optional — Adjust target_face_count based on your geometry-detail or optimization needs.
  5. Configure background removal optional — Keep remove_background enabled when the object should be separated from its background.
  6. Set seed optional — Use a fixed seed for reproducible results, or -1 for random generation.
  7. Submit — Generate the 3D model and retrieve the GLB output.

Pricing

Pricing is based on selected resolution and whether texture_size is set to 4096.

ResolutionBase CostWith 4096 Texture
512$0.10$0.15
1024$0.20$0.25
1536$0.40$0.45

texture_size values of 1024 and 2048 do not add a separate charge. Selecting 4096 adds $0.05.

target_face_count, remove_background, and seed do not add separate charges.


Best Use Cases

  • Image-to-3D asset creation — Convert a single object image into a textured 3D model.
  • Game and real-time assets — Generate starting meshes for downstream optimization or editing.
  • Product visualization — Turn product images into 3D assets for previews and presentations.
  • Creative prototyping — Explore object forms and 3D concepts from image references.
  • Design workflows — Generate editable GLB assets for 3D applications and viewers.

Pro Tips

  • Use a clear, well-lit image with one main object.
  • Avoid cluttered backgrounds, heavy shadows, reflections, occlusion, or motion blur.
  • Keep remove_background enabled when the object should be isolated before generation.
  • Use 512 for quick tests and 1536 when higher detail matters.
  • Use 4096 texture size when the model needs more detailed surface appearance.
  • Lower target_face_count for lighter assets and higher values when detail preservation matters.
  • Inspect the GLB from multiple angles before using it in production.

Notes

  • image is required.
  • This endpoint supports single-image input only.
  • Text-only generation and multi-view image input are not supported.
  • The output is a generated 3D interpretation, not an exact 3D scan.
  • The mesh is not guaranteed to be watertight.
  • Higher resolution and larger texture size may take longer to generate.

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'
{
  "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
  "resolution": "1024",
  "texture_size": 2048,
  "target_face_count": 200000,
  "remove_background": true
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/trellis-2/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
done

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
imagestringYes-Single input image URL, data URI or base64 image.
resolutionstringNo1024512, 1024, 1536Geometry resolution. Higher resolution takes more time and memory.
texture_sizeintegerNo20481024, 2048, 4096PBR texture resolution in pixels.
target_face_countintegerNo20000010000 ~ 1000000Target mesh face count after simplification. The final count is approximate.
remove_backgroundbooleanNotrue-Remove the image background before generation. Disable to use existing image alpha.
seedintegerNo--Random seed. Use -1 for a random seed.

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.