Meshy 6 Lite Retexture applies new materials and textures to existing 3D models using a text prompt or reference image, with optional PBR maps for game assets, product visualization, 3D design, and production workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Idle
$0.36per run·~27 / $10
Texture this armored humanoid with matte charcoal-black armor plates, brushed gold trim, and dark titanium mechanical joints. Add deep crimson accents to the shoulders and chest, pale cyan lenses over the eyes, and black rubber seals between armor panels. Include subtle edge wear, fine scratches, and restrained surface weathering. Keep clear material separation and consistent detailing across the front and back. Preserve the existing geometry and pose. Realistic physically based materials, premium sci-fi craftsmanship.
Retexture this pocket watch as a luxury midnight-blue enamel timepiece. Apply deep navy glossy enamel to the outer case and lid, with polished rose-gold rims, engraved details, crown, and chain. Use warm ivory porcelain for the dial, crisp dark Roman numerals, and dark blued-steel hands. Add subtle brushed-metal grain and fine micro-scratches to the metal surfaces. Preserve the existing geometry, open lid, chain links, dial layout, and hand positions. Realistic physically based materials, refined craftsmanship.
Meshy 6 Lite Retexture applies new textures and materials to an existing 3D model using either a text description or a reference image. Keep the original geometry while changing the surface appearance, colors, materials, and finish, then export the result as a textured GLB model.
It is designed for creating material variations, refreshing existing assets, product visualization, game assets, and other workflows where you want a new look without regenerating the underlying 3D geometry.
Retexture existing 3D models
Change the appearance of an existing asset without generating a new object.
Text-guided materials
Describe the colors, materials, finish, wear, and surface style you want.
Image-guided texturing
Use a reference image to guide the new texture appearance.
UV control
Preserve the model's existing UV mapping or generate new UVs when needed.
Optional PBR materials
Generate metallic, roughness, and normal maps in addition to the base color texture.
Multiple 3D input formats
Supports GLB, GLTF, OBJ, FBX, and STL models.
| Parameter | Required | Description |
|---|---|---|
| model | Yes | 3D model to retexture. Supports GLB, GLTF, OBJ, FBX, and STL. |
| prompt | Conditional | Text description of the desired materials and textures. Supports up to 600 characters. Required when texture_image is not provided. |
| texture_image | Conditional | Reference image used to guide texture appearance. Supports JPG, JPEG, and PNG. Required when prompt is not provided. If both are supplied, texture_image takes priority. |
| enable_original_uv | No | Preserve the model's existing UV mapping. Default: true. Disable it when new UV mapping should be generated. |
| enable_pbr | No | Generate metallic, roughness, and normal maps in addition to the base color texture. Default: false. |
At least one of prompt or texture_image must be provided.
enable_original_uv=true when the existing UV mapping is suitable, or disable it to generate new UVs.enable_pbr when additional material maps are needed.Pricing is fixed at $0.36 per retextured model.
| Output | Cost |
|---|---|
| One retextured model | $0.36 |
PBR maps are included at no additional charge.
prompt.texture_image.enable_original_uv=true when the source model already has suitable UV mapping.enable_original_uv when the existing UVs are missing or unsuitable.enable_pbr when the model will be used in lighting-sensitive rendering, game-engine, or product-visualization workflows.prompt and texture_image are supplied, remember that the reference image takes priority.model is required.prompt or texture_image must be provided.prompt supports up to 600 characters.texture_image supports JPG, JPEG, and PNG.texture_image takes priority when both texture guidance methods are supplied.enable_original_uv defaults to true.enable_pbr defaults to false.Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/meshy/v6-lite/retexture 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 v6 Lite Retexture below.
set -euo pipefail
: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"
REQUEST_BODY=$(cat <<'JSON'
{
"model": "example",
"enable_original_uv": true,
"enable_pbr": false
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/meshy/v6-lite/retexture" \
-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/meshy/v6-lite/retexture";
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({
"model": "example",
"enable_original_uv": true,
"enable_pbr": false
}),
});
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 = {
"model": "example",
"enable_original_uv": True,
"enable_pbr": False
}
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/v6-lite/retexture", 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)v6 Lite Retexture is a Meshy model for 3D asset generation from images, exposed as a REST API on WaveSpeedAI. Meshy 6 Lite Retexture applies new materials and textures to existing 3D models using a text prompt or reference image, with optional PBR maps 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/meshy/meshy-v6-lite-retexture.
v6 Lite Retexture starts at $0.36 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`, `enable_original_uv`, `enable_pbr`, `model`, `texture_image`. 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-v6-lite-retexture.
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 (Meshy). Check the provider's applicable terms and WaveSpeedAI's Terms of Service before commercial use.