Tripo P2 Text-to-3D generates detailed 3D meshes from text prompts, with optional PBR textures, selectable texture quality, and triangle or quad topology for game assets, product visualization, 3D design, and production workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Idle
$1per run
3D model output
Open preview to inspect the generated asset.
An ornate steampunk airship: a riveted brass and copper hull with porthole windows, a wooden deck with railings and a ship wheel, twin brass propellers at the stern, rope rigging connecting to a patched canvas balloon with leather straps and a brass gondola lantern, weathered metal with scratches and patina, single isolated object, game asset
Tripo P2 Text-to-3D generates a downloadable 3D model directly from a text description, with optional textures and PBR materials. Describe the object you want to create, then control mesh topology, face count, texture quality, UVs, orientation, and real-world scaling for downstream 3D workflows.
It supports both triangle and quad meshes, multiple texture-quality tiers, and reproducible geometry and texture generation through dedicated seed controls.
Text-to-3D generation
Create complete 3D assets directly from natural-language descriptions.
Triangle or quad topology
Generate standard triangle meshes or enable quad for quad-based topology.
Flexible texture quality
Choose fast, standard, detailed, or extreme texture quality depending on speed, cost, and fidelity requirements.
Optional PBR materials
Generate PBR material maps for more realistic rendering and downstream asset workflows.
Face-count control
Set a target mesh complexity with face_limit, or omit it for adaptive face-count selection.
UV export
Generate UV coordinates for texturing and further editing in 3D software.
Real-world scaling
Enable auto_size to automatically scale the generated model to real-world dimensions in meters.
Reproducible generation
Use separate seeds for geometry, texture, and the internal text-to-image stage.
| Parameter | Required | Description |
|---|---|---|
| prompt | Yes | Text description of the 3D object to generate. Maximum 1024 characters. |
| negative_prompt | No | Optional description of features or characteristics to avoid. Maximum 255 characters. |
| texture | No | Generate textures for the model. Set both texture=false and pbr=false for untextured generation. Default: true. |
| pbr | No | Generate PBR material maps. Enabling PBR also enables texture generation and texture billing. Default: true. |
| texture_quality | No | Texture quality: fast, standard, detailed, or extreme. Default: standard. fast requires texture_version=v3.5-20260815. |
| texture_version | No | Optional texture model version. Use v3.5-20260815 when selecting fast texture quality. |
| face_limit | No | Optional mesh face limit from 48 to 50000. When quad=true, use at most 25000 faces. Omit for adaptive face-count selection. |
| quad | No | Generate quad topology instead of triangle topology. Maximum 25000 faces. Default: false. |
| delight | No | Remove baked-in lighting before texturing when using v3.5-20260815. Default: true. |
| auto_size | No | Automatically scale the generated model to real-world dimensions in meters. Default: false. |
| export_uv | No | Generate UV coordinates for the model. Default: true. |
| export_orientation | No | Optional forward-axis orientation for the exported model. |
| model_seed | No | Optional seed for reproducible geometry generation. |
| texture_seed | No | Optional seed for reproducible texture generation. |
| image_seed | No | Optional seed for the internal text-to-image stage. |
prompt describing the shape, structure, materials, and important visual features.negative_prompt to specify unwanted characteristics.texture and pbr, then choose the desired texture quality.face_limit and choose triangle or quad topology.Pricing is based on whether textures are generated and the selected texture_quality.
| Texture Configuration | Price |
|---|---|
| No textures | $1.00 |
| Fast textures | $1.10 |
| Standard textures | $1.10 |
| Detailed textures | $1.20 |
| Extreme textures | $1.30 |
The base geometry price is $1.00 per generated model.
When either texture or pbr is enabled:
fast or standard adds $0.10detailed adds $0.20extreme adds $0.30Both texture and pbr default to true, while texture_quality defaults to standard, so the default request costs $1.10.
Set both texture=false and pbr=false for the $1.00 untextured price.
quad, face_limit, seeds, delight, auto_size, export_uv, and export_orientation do not add separate charges.
standard texture quality for initial iterations and move to detailed or extreme when higher texture fidelity is needed.texture and pbr when you only need geometry and want the lowest-cost generation.quad=true when quad topology is important for downstream editing, and keep face_limit at or below 25000.face_limit when you want the model to choose mesh complexity adaptively.auto_size when real-world scale in meters matters.prompt is required and supports up to 1024 characters.negative_prompt supports up to 255 characters.face_limit supports 48–50000 faces for triangle meshes.25000 faces.fast texture quality requires texture_version=v3.5-20260815.v3.0-20250812 and v2.5-20250123.texture and pbr both default to true.export_uv defaults to true.null.Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/tripo3d/p2/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 P2 Text To 3d below.
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",
"texture": true,
"pbr": true,
"texture_quality": "standard",
"texture_version": "v3.5-20260815",
"quad": false,
"delight": true,
"auto_size": false,
"export_uv": true,
"export_orientation": "+x"
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/tripo3d/p2/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="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 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|deleted) printf '%s\n' "$RESULT" | jq . >&2; exit 1 ;;
*) sleep 2 ;;
esac
doneconst submitUrl = "https://api.wavespeed.ai/api/v3/tripo3d/p2/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",
"texture": true,
"pbr": true,
"texture_quality": "standard",
"texture_version": "v3.5-20260815",
"quad": false,
"delight": true,
"auto_size": false,
"export_uv": true,
"export_orientation": "+x"
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = `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", "deleted"].includes(result.status)) throw new Error(JSON.stringify(result));
await new Promise(resolve => setTimeout(resolve, 2000));
}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",
"texture": True,
"pbr": True,
"texture_quality": "standard",
"texture_version": "v3.5-20260815",
"quad": False,
"delight": True,
"auto_size": False,
"export_uv": True,
"export_orientation": "+x"
}
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/tripo3d/p2/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 = 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", "deleted"}:
raise RuntimeError(result)
time.sleep(2)P2 Text To 3d is a Tripo3D model for 3D asset generation, exposed as a REST API on WaveSpeedAI. Tripo P2 Text-to-3D generates detailed 3D meshes from text prompts, with optional PBR textures, selectable texture quality, and triangle or quad topology 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.
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 Python, JavaScript, and cURL examples for submitting requests and polling results. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/tripo3d/tripo3d-p2-text-to-3d.
P2 Text To 3d starts at $1 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.
Key inputs: `prompt`, `negative_prompt`, `auto_size`, `delight`, `export_orientation`, `export_uv`. 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/tripo3d/tripo3d-p2-text-to-3d.
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.
Commercial usage rights depend on the model's license, set by its provider (Tripo3D). Check the provider's applicable terms and WaveSpeedAI's Terms of Service before commercial use.