WAN 3.0 is LIVE — 30s in one shot | Try in Video Generator →
Home/Explore/Meshy/V7/Text To 3d

meshy/

Meshy V7 Text-to-3D turns text prompts into textured, PBR-ready 3D models with configurable geometry, topology, rigging, and animation for game assets, product visualization, 3D design, and production workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

text-to-3d
Input

Idle

$1.32per run

ExamplesView all

3D model output

Open preview to inspect the generated asset.

A stylized low-detail bronze desk lamp with a round base, curved neck, and conical shade, clean product design

3D model output

Open preview to inspect the generated asset.

A full-body futuristic sci-fi warrior standing in a neutral A-pose, wearing sleek segmented titanium armor with glowing blue energy lines, a sealed tactical helmet, reinforced boots, mechanical gauntlets, and a compact power core on the chest. Symmetrical design, clean silhouette, realistic proportions, highly detailed hard-surface modeling, isolated character, no weapons, no cape, no base, no environment.

Related Models

README

Meshy V7 Text to 3D

Meshy V7 Text to 3D generates a 3D model directly from a text prompt. Describe the object you want to create, choose preview or full mode, configure geometry settings, and optionally enable PBR materials, Ultra Mode, and humanoid rigging.

Why Choose This?

  • Text-to-3D generation
    Create a 3D model from a written object description.

  • Preview and full modes
    Use preview for untextured geometry or full for a textured model.

  • Flexible geometry controls
    Configure topology, target polygon count, remeshing, symmetry, and model type.

  • Multiple model types
    Choose standard, lowpoly, or smart-topology depending on your downstream workflow.

  • Texture guidance in full mode
    Use texture_prompt or texture_image to guide texture appearance when generating a full textured model.

  • Optional PBR and rigging
    Generate PBR material maps in full mode and optionally rig suitable humanoid characters.

Parameters

ParameterRequiredDescription
promptYesDescribe the object to generate as a 3D model. Length: 1–600 characters.
modeNoGeneration mode: preview or full. preview returns untextured geometry; full returns a textured model. Default: full.
model_typeNoGeometry generation mode: standard, lowpoly, or smart-topology. Default: standard. smart-topology supports up to 15000 target polygons.
topologyNoMesh topology for remeshed output: quad or triangle. Default: triangle.
target_polycountNoTarget polygon count. Range: 100–300000. Default: 30000. smart-topology accepts at most 15000.
should_remeshNoEnable remeshing for cleaner topology. Default: true.
symmetry_modeNoControls symmetry during model generation: off, auto, or on. Default: auto.
enable_pbrNoGenerate metallic, roughness, and normal maps in full mode. Default: false.
pose_modeNoOptional humanoid pose: a-pose or t-pose. Leave unselected for no specific pose.
texture_promptNoOptional text guidance for texture generation in full mode. Maximum length: 600 characters.
texture_imageNoOptional image to guide texture generation in full mode.
ultra_modeNoEnable higher-fidelity standard geometry. Default: false. Cannot be combined with lowpoly or smart-topology.
enable_riggingNoAutomatically rig a suitable humanoid character. Default: false.
rigging_height_metersNoApproximate character height in meters when rigging is enabled. Minimum: 0.01. Default: 1.7.
seedNoRandom seed for reproducible results. Use -1 for a random seed. Default: -1.

How to Use

  1. Write your prompt — Describe the object, shape, material, style, and important visual details.
  2. Choose mode — Use preview for quick untextured geometry or full for textured output.
  3. Select model type — Choose standard, lowpoly, or smart-topology.
  4. Configure geometry optional — Adjust topology, polygon count, remeshing, and symmetry settings.
  5. Add texture guidance optional — Use texture_prompt or texture_image when generating in full mode.
  6. Enable PBR optional — Use enable_pbr when metallic, roughness, and normal maps are needed.
  7. Enable Ultra Mode optional — Use ultra_mode for higher-fidelity standard geometry.
  8. Enable rigging optional — Use enable_rigging for suitable humanoid characters.
  9. Set seed optional — Use a fixed seed for reproducible results, or -1 for random generation.
  10. Submit — Generate the 3D model and retrieve the output through the standard WaveSpeed prediction response.

Pricing

Pricing depends on selected mode, ultra_mode, and whether enable_rigging is enabled.

ConfigurationCost
Preview geometry$0.88
Full textured model$1.32
Full textured model with Ultra Mode$1.54
Auto-rigging+$0.22

Example Costs

ConfigurationCost
Preview geometry$0.88
Preview geometry + auto-rigging$1.10
Full textured model$1.32
Full textured model + auto-rigging$1.54
Full textured model with Ultra Mode$1.54
Full textured model with Ultra Mode + auto-rigging$1.76

enable_pbr, model_type, topology, target_polycount, should_remesh, symmetry_mode, pose_mode, texture_prompt, texture_image, and seed do not add separate charges in the current pricing formula.

Best Use Cases

  • Text-to-3D asset creation — Generate 3D models directly from object descriptions.
  • Product and object prototypes — Turn product ideas or concept descriptions into 3D assets.
  • Game and real-time workflows — Use lowpoly or smart-topology for optimized geometry.
  • Humanoid character workflows — Generate and optionally rig suitable humanoid characters.
  • Material and texture exploration — Use full mode with texture prompts or texture images for styled 3D assets.
  • Fast geometry previews — Use preview mode to test object structure before generating textured output.

Pro Tips

  • Describe the object clearly, including shape, material, style, scale, and key details.
  • Use preview mode for fast geometry checks before running full textured generation.
  • Use full mode when you need textured output.
  • Use texture_prompt to describe material details such as metal, leather, ceramic, fabric, plastic, or wood.
  • Use texture_image when you need texture appearance to follow a visual reference.
  • Use lowpoly for lightweight assets and smart-topology when cleaner optimized topology is needed.
  • Keep target_polycount at or below 15000 when using smart-topology.
  • Use ultra_mode only with standard geometry.
  • Enable rigging only for suitable humanoid characters.
  • Set a fixed seed when comparing prompt or parameter changes.

Related Models

Note:This website uses AI models provided by third parties. Documentation prices are for reference and may be outdated. The Generate button shows an estimate; the final task charge prevails.

v7 Text To 3d API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/meshy/v7/text-to-3d with your input as JSON. The endpoint returns a prediction id. Start polling the result endpoint around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. On completed, read output values from data.outputs. Examples for v7 Text To 3d below.

HTTP example
set -euo pipefail

: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"

REQUEST_BODY=$(cat <<'JSON'
{
    "prompt": "A cinematic shot of a city at sunset, soft golden light",
    "mode": "full",
    "model_type": "standard",
    "topology": "triangle",
    "target_polycount": 30000,
    "should_remesh": true,
    "symmetry_mode": "auto",
    "enable_pbr": false,
    "pose_mode": "a-pose",
    "ultra_mode": false,
    "enable_rigging": false,
    "rigging_height_meters": 1.7,
    "seed": -1
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/meshy/v7/text-to-3d" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $WAVESPEED_API_KEY" \
  -d "$REQUEST_BODY")

TASK=$(printf '%s' "$SUBMIT_RESPONSE" | jq 'if has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "$TASK" | jq -r '.id')
if [ -z "$PREDICTION_ID" ] || [ "$PREDICTION_ID" = "null" ]; 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 has("data") then .data else . end')
  STATUS=$(printf '%s' "$RESULT" | jq -r '.status')
  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
Node.js example
const submitUrl = "https://api.wavespeed.ai/api/v3/meshy/v7/text-to-3d";
const apiKey = process.env.WAVESPEED_API_KEY;
if (!apiKey) throw new Error('Set WAVESPEED_API_KEY');

async function requestJson(url, options = {}) {
  const response = await fetch(url, options);
  if (!response.ok) throw new Error(await response.text());
  return response.json();
}

// 1. Submit the prediction.
const body = await requestJson(submitUrl, {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
        "prompt": "A cinematic shot of a city at sunset, soft golden light",
        "mode": "full",
        "model_type": "standard",
        "topology": "triangle",
        "target_polycount": 30000,
        "should_remesh": true,
        "symmetry_mode": "auto",
        "enable_pbr": false,
        "pose_mode": "a-pose",
        "ultra_mode": false,
        "enable_rigging": false,
        "rigging_height_meters": 1.7,
        "seed": -1
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = task.urls?.get ||
  `https://api.wavespeed.ai/api/v3/predictions/${task.id}/result`;

// 2. Poll until the prediction finishes.
while (true) {
  const resultBody = await requestJson(resultUrl, {
    headers: { "Authorization": `Bearer ${apiKey}` },
  });
  const result = resultBody.data ?? resultBody;
  if (result.status === "completed") {
    console.log(result.outputs);
    break;
  }
  if (["failed", "cancelled", "timeout"].includes(result.status)) throw new Error(JSON.stringify(result));
  if (!["created", "processing"].includes(result.status)) throw new Error("Unexpected status: " + result.status);
  await new Promise(resolve => setTimeout(resolve, 2000));
}
Python example
import json
import os
import time
from urllib.request import Request, urlopen

api_key = os.environ["WAVESPEED_API_KEY"]
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
payload = {
    "prompt": "A cinematic shot of a city at sunset, soft golden light",
    "mode": "full",
    "model_type": "standard",
    "topology": "triangle",
    "target_polycount": 30000,
    "should_remesh": True,
    "symmetry_mode": "auto",
    "enable_pbr": False,
    "pose_mode": "a-pose",
    "ultra_mode": False,
    "enable_rigging": False,
    "rigging_height_meters": 1.7,
    "seed": -1
}

def request_json(url, data=None):
    request = Request(url, data=data, headers=headers, method="POST" if data else "GET")
    with urlopen(request) as response:
        return json.load(response)

# 1. Submit the prediction.
body = request_json("https://api.wavespeed.ai/api/v3/meshy/v7/text-to-3d", json.dumps(payload).encode())
task = body.get("data", body)
if not task.get("id"):
    raise RuntimeError("Submission response did not contain a prediction id")
result_url = task.get("urls", {}).get("get") or f"https://api.wavespeed.ai/api/v3/predictions/{task['id']}/result"

# 2. Poll until the prediction finishes.
while True:
    result_body = request_json(result_url)
    result = result_body.get("data", result_body)
    status = result.get("status")
    if status == "completed":
        print(result.get("outputs", []))
        break
    if status in {"failed", "cancelled", "timeout"}:
        raise RuntimeError(result)
    if status not in {"created", "processing"}:
        raise RuntimeError(f"Unexpected status: {status}")
    time.sleep(2)

v7 Text To 3d API — Frequently asked questions

What is the v7 Text To 3d API?

v7 Text To 3d is a Meshy model for 3D asset generation, exposed as a REST API on WaveSpeedAI. Meshy V7 Text-to-3D turns text prompts into textured, PBR-ready 3D models with configurable geometry, topology, rigging, and animation for game assets, product visualization, 3D design, and production workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing. You can call it programmatically or try it from the playground above.

How do I call the v7 Text To 3d API?

POST your input parameters to the model's REST endpoint (shown in the API tab of this playground) with your WaveSpeedAI API key in the Authorization header. Submission returns a prediction ID. Poll the result endpoint starting around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. The playground generates production-oriented Python, JavaScript, and cURL examples with timeouts, transient-error handling, and safe GET retries. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/meshy/meshy-v7-text-to-3d.

How much does v7 Text To 3d cost per run?

v7 Text To 3d starts at $1.32 per run. That figure is the base price — the final charge scales with the parameters you set in the form (output size, length, count, references, or whatever knobs this model exposes), so a higher-quality or larger output costs more than a minimal one. The exact cost for your current input is shown live next to the Generate button before you submit, and the actual per-call charge is recorded on the prediction afterwards.

What inputs does v7 Text To 3d accept?

Key inputs: `prompt`, `seed`, `enable_pbr`, `enable_rigging`, `mode`, `model_type`. The full JSON schema (types, defaults, allowed values) is rendered above the Generate button and mirrored in the API reference at https://wavespeed.ai/docs/docs-api/meshy/meshy-v7-text-to-3d.

How do I get started with the v7 Text To 3d API?

Sign up for a free WaveSpeedAI account to claim starter credits, copy your API key from /accesskey, then call the endpoint shown in the API tab of the playground. The playground also auto-generates a code sample in Python, JavaScript, or cURL for the parameters you've set.

Can I use v7 Text To 3d outputs commercially?

Commercial usage rights depend on the model's license, set by its provider (Meshy). The license summary appears on the model card above; see WaveSpeedAI's Terms of Service for platform-level conditions.

Meshy V7 Text-to-3D API on WaveSpeedAI