Nano Banana 2.1 is LIVE — Google's Latest | Try Now →
Home/Explore/Meshy/V7/Retexture

meshy/v7/retexture

Meshy 7 Retexture applies new textures to existing 3D models using text prompts or reference images, with 2K, 4K, and 8K base-color textures plus 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.

Image to 3D
Input

Drag & drop or click to upload

Drag & drop or click to upload

Keep the model's existing UV mapping. Disable when the model has no usable UVs.
Generate metallic, roughness, and normal maps along with base color.

ExamplesView all

Retexture this backpack with aged burgundy leather, dark brown straps, antique brass buckles, and a charcoal wool blanket. Give the three potion bottles distinct emerald-green, amber, and deep-violet glass finishes. Add subtle leather creases, worn edges, and restrained brass patina. Rich handcrafted fantasy materials with clean separation between leather, metal, cloth, and glass. No symbols or lettering.
3D

Retexture this backpack with aged burgundy leather, dark brown straps, antique brass buckles, and a charcoal wool blanket. Give the three potion bottles distinct emerald-green, amber, and deep-violet glass finishes. Add subtle leather creases, worn edges, and restrained brass patina. Rich handcrafted fantasy materials with clean separation between leather, metal, cloth, and glass. No symbols or lettering.

Related Models

README

Meshy 7 Retexture

Meshy 7 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 asset's surface appearance, choose 2K, 4K, or 8K base-color textures, preserve existing UV mapping when suitable, and optionally generate PBR material maps.

It is designed for material variations, game assets, product visualization, rendering workflows, and other use cases where you want to change the look of an existing 3D model without regenerating its geometry.

Why Choose This?

  • Retexture existing 3D assets
    Change materials, colors, finishes, and surface appearance without rebuilding the underlying model.

  • Text or image guidance
    Describe the material you want or provide a reference image to guide the texture style.

  • Up to 8K textures
    Choose 2K, 4K, or 8K base-color texture resolution.

  • UV control
    Preserve the model's existing UV mapping or generate new UVs when the original mapping is unsuitable.

  • Optional PBR materials
    Generate metallic, roughness, and normal maps alongside the base-color texture at no additional charge.

  • Multiple 3D input formats
    Supports GLB, GLTF, OBJ, FBX, and STL source models.

Parameters

ParameterRequiredDescription
modelYes3D model file URL. Supports GLB, GLTF, OBJ, FBX, and STL.
promptConditionalText description of the desired material and texture. Maximum 600 characters. Required when texture_image is not provided.
texture_imageConditionalReference image URL in JPG, JPEG, or PNG format. Required when prompt is not provided. Takes priority when both are supplied.
texture_resolutionNoBase-color texture resolution: 2k, 4k, or 8k. Default: 2k.
enable_original_uvNoPreserve the model's original UV mapping. Default: true. Disable it when new UV mapping should be generated.
enable_pbrNoGenerate 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.

How to Use

  1. Upload a 3D model — Provide a supported model file or public URL.
  2. Choose texture guidance — Enter a material description or provide a texture reference image.
  3. Choose texture resolution — Select 2k, 4k, or 8k.
  4. Configure UV handling optional — Keep enable_original_uv=true when the source model has usable UVs, or disable it to generate new mapping.
  5. Enable PBR optional — Turn on enable_pbr when metallic, roughness, and normal maps are needed.
  6. Submit — Generate the retextured model and retrieve the available output files.

Pricing

Pricing is based only on texture_resolution.

Texture ResolutionPrice per Request
2K$0.33
4K$0.33
8K$0.50

2K and 4K use the same price tier. Selecting 8K increases the price to $0.50 per request.

enable_pbr, enable_original_uv, and the choice between prompt and texture_image do not add separate charges.

Available companion files also do not incur separate per-file charges.

Best Use Cases

  • Game asset variations — Create new material and color variants for existing meshes.
  • Product visualization — Explore finishes such as metal, wood, leather, ceramic, plastic, or fabric.
  • Material prototyping — Test different surface treatments without changing model geometry.
  • E-commerce 3D — Produce product colorways and finish variations from an existing asset.
  • Rendering workflows — Generate base-color and optional PBR maps for downstream rendering.
  • Creative iteration — Compare multiple texture directions on the same model.

Pro Tips

  • Describe the material, color, finish, wear, and surface properties rather than describing a different object.
  • Use a reference image with a clear and consistent material style when using texture_image.
  • Check whether the source model has usable UV mapping before keeping enable_original_uv=true.
  • Disable original UV preservation when the source UVs are missing or unsuitable.
  • Enable enable_pbr when the asset will be used in lighting-sensitive rendering or real-time 3D workflows.
  • Use 2k or 4k for iteration before moving to 8k when maximum texture detail is needed.
  • When both prompt and texture_image are supplied, the reference image takes priority.

Notes

  • model is required.
  • At least one non-empty 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 guidance methods are supplied.
  • texture_resolution defaults to 2k.
  • Supported texture resolutions are 2k, 4k, and 8k.
  • enable_original_uv defaults to true.
  • enable_pbr defaults to false.
  • At 8k, the base-color texture is 8192 pixels, while PBR maps are 4096 pixels.

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 Retexture API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/meshy/v7/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 v7 Retexture below.

HTTP example
set -euo pipefail

: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"

REQUEST_BODY=$(cat <<'JSON'
{
    "model": "example",
    "texture_resolution": "2k",
    "enable_original_uv": true,
    "enable_pbr": false,
    "prompt": "A cinematic shot of a city at sunset, soft golden light"
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/meshy/v7/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
done
Node.js example
const submitUrl = "https://api.wavespeed.ai/api/v3/meshy/v7/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",
        "texture_resolution": "2k",
        "enable_original_uv": true,
        "enable_pbr": false,
        "prompt": "A cinematic shot of a city at sunset, soft golden light"
}),
});
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));
}
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 = {
    "model": "example",
    "texture_resolution": "2k",
    "enable_original_uv": True,
    "enable_pbr": False,
    "prompt": "A cinematic shot of a city at sunset, soft golden light"
}

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/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)

v7 Retexture API — Frequently asked questions

What is the v7 Retexture API?

v7 Retexture is a Meshy model for 3D asset generation from images, exposed as a REST API on WaveSpeedAI. Meshy 7 Retexture applies new textures to existing 3D models using text prompts or reference images, with 2K, 4K, and 8K base-color textures plus 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.

How do I call the v7 Retexture 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 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-v7-retexture.

How much does v7 Retexture cost per run?

v7 Retexture starts at $0.33 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 Retexture accept?

Key inputs: `prompt`, `enable_original_uv`, `enable_pbr`, `model`, `texture_image`, `texture_resolution`. 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-retexture.

How do I get started with the v7 Retexture 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 Retexture outputs commercially?

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.

llms.txt — meshy/v7/retexture for AI agents and LLMs