Snabbstart

Detta är API-referensen för att interagera programmatiskt med Meshy.


Meshy API tillhandahåller ett enkelt gränssnitt för att generera 3D-modeller och texturer från textprompter och bilder. Följ den här guiden för att komma igång snabbt.

Skapa en API-nyckel

Skapa en API-nyckel på sidan för API-inställningar här, som du använder för att säkert autentisera dina begäranden. API-nyckelns format är msy-<random-string>.

Generera API-nyckel

När du har genererat en API-nyckel, spara den på en säker plats.

API-nyckel för testläge

Under utveckling och testning kan du använda vår API-nyckel för testläge för att utforska API:et utan att förbruka dina credits:

msy_dummy_api_key_for_test_mode_12345678

Denna särskilda API-nyckel har följande egenskaper:

  • Den kan användas för att göra begäranden till alla Meshy API-endpoints
  • Inga credits förbrukas när den här nyckeln används
  • Alla giltiga begäranden returnerar samma exempelresultat för uppgifter, oavsett inmatningsparametrarna
  • Svarsdatastrukturen matchar produktions-API:et exakt
  • Perfekt för att testa din API-integration innan du byter till din riktiga API-nyckel

Gör din första API-begäran för "Text till 3D"

I det här exemplet genererar vi en 3D-modell från en textprompt med hjälp av text-to-3d endpoint. Processen omfattar två steg: förhandsvisningssteget och förfiningssteget. I förhandsvisningssteget genereras ett basnät utan någon textur applicerad, så att du kan utvärdera geometrin. I förfiningssteget textureras förhandsvisningsnätet baserat på textprompten.

Vi visar hur du gör dessa begäranden i ett Python-skript.

Förhandsvisning

Meshy tillhandahåller en uppsättning REST API-endpoints. Du kan använda dem med valfri HTTP-klient. Oavsett vilket API du anropar skickas API-nyckeln alltid som en header med namnet Authorization. Kom ihåg att exportera din API-nyckel som en miljövariabel med namnet MESHY_API_KEY innan du använder detta skript.

Nyckelparametrarna för förhandsvisningsbegäran är mode, som alltid är "preview", och prompt, en beskrivning av modellen du behöver. I det här exemplet har vi även angett should_remesh, men det är valfritt.

api_request.py

import requests
import os
import time

headers = {
  "Authorization": f"Bearer {os.environ['MESHY_API_KEY']}"
}

# 1. Generate a preview model and get the task ID

generate_preview_request = {
  "mode": "preview",
  "prompt": "a monster mask",
  "should_remesh": True,
}

generate_preview_response = requests.post(
  "https://api.meshy.ai/openapi/v2/text-to-3d",
  headers=headers,
  json=generate_preview_request,
)

generate_preview_response.raise_for_status()

preview_task_id = generate_preview_response.json()["result"]

print("Preview task created. Task ID:", preview_task_id)

Detta slutför API-anropet för förhandsvisning.

Tänk på att Meshy API använder en asynkron exekveringsmodell, vilket innebär att när du skapar en uppgift returnerar API-endpointen endast ett uppgifts-ID. Du måste sedan polla endpointen för uppgiftsstatus med detta ID för att kontrollera om uppgiften är klar.

api_request.py

# 2. Poll the preview task status until it's finished

preview_task = None

while True:
  preview_task_response = requests.get(
    f"https://api.meshy.ai/openapi/v2/text-to-3d/{preview_task_id}",
    headers=headers,
  )

  preview_task_response.raise_for_status()

  preview_task = preview_task_response.json()

  if preview_task["status"] == "SUCCEEDED":
    print("Preview task finished.")
    break

  print("Preview task status:", preview_task["status"], "| Progress:", preview_task["progress"], "| Retrying in 5 seconds...")
  time.sleep(5)

När uppgiften är klar kan du komma åt modell-URL:erna från dess svar. Låt oss ladda ner modellen från fältet model_urls i svaret.

api_request.py

# 3. Download the preview model in glb format

preview_model_url = preview_task["model_urls"]["glb"]

preview_model_response = requests.get(preview_model_url)
preview_model_response.raise_for_status()

with open("preview_model.glb", "wb") as f:
  f.write(preview_model_response.content)

print("Preview model downloaded.")

Om allt fungerar hittills bör din preview_model.glb se ut ungefär så här. Den kommer inte att vara en exakt matchning, på grund av den inneboende slumpmässigheten i AI-pipelinen.

Förhandsvisningsmodell

Förfina

Låt oss gå vidare till förfiningssteget. För att initiera förfiningsbegäran anger du förhandsvisningsuppgiftens ID som en inmatningsparameter.

api_request.py

# 4. Generate a refined model and get the task ID

generate_refined_request = {
  "mode": "refine",
  "preview_task_id": preview_task_id,
}

generate_refined_response = requests.post(
  "https://api.meshy.ai/openapi/v2/text-to-3d",
  headers=headers,
  json=generate_refined_request,
)

generate_refined_response.raise_for_status()

refined_task_id = generate_refined_response.json()["result"]

print("Refined task created. Task ID:", refined_task_id)

# 5. Poll the refined task status until it's finished

refined_task = None

while True:
  refined_task_response = requests.get(
    f"https://api.meshy.ai/openapi/v2/text-to-3d/{refined_task_id}",
    headers=headers,
  )

  refined_task_response.raise_for_status()

  refined_task = refined_task_response.json()

  if refined_task["status"] == "SUCCEEDED":
    print("Refined task finished.")
    break

  print("Refined task status:", refined_task["status"], "| Progress:", refined_task["progress"], "| Retrying in 5 seconds...")
  time.sleep(5)

# 6. Download the refined model in glb format

refined_model_url = refined_task["model_urls"]["glb"]

refined_model_response = requests.get(refined_model_url)
refined_model_response.raise_for_status()

with open("refined_model.glb", "wb") as f:
  f.write(refined_model_response.content)

print("Refined model downloaded.")

3D-modellen refined_model.glb är nu helt texturerad ✨.

Förfinad modell

Sätt ihop allt

Här är den kompletta koden för att använda API:et Text till 3D.

api_request.py

import requests
import os
import time

headers = {
  "Authorization": f"Bearer {os.environ['MESHY_API_KEY']}"
}

# 1. Generate a preview model and get the task ID

generate_preview_request = {
  "mode": "preview",
  "prompt": "a monster mask",
  "should_remesh": True,
}

generate_preview_response = requests.post(
  "https://api.meshy.ai/openapi/v2/text-to-3d",
  headers=headers,
  json=generate_preview_request,
)

generate_preview_response.raise_for_status()

preview_task_id = generate_preview_response.json()["result"]

print("Preview task created. Task ID:", preview_task_id)

# 2. Poll the preview task status until it's finished

preview_task = None

while True:
  preview_task_response = requests.get(
    f"https://api.meshy.ai/openapi/v2/text-to-3d/{preview_task_id}",
    headers=headers,
  )

  preview_task_response.raise_for_status()

  preview_task = preview_task_response.json()

  if preview_task["status"] == "SUCCEEDED":
    print("Preview task finished.")
    break

  print("Preview task status:", preview_task["status"], "| Progress:", preview_task["progress"], "| Retrying in 5 seconds...")
  time.sleep(5)

# 3. Download the preview model in glb format

preview_model_url = preview_task["model_urls"]["glb"]

preview_model_response = requests.get(preview_model_url)
preview_model_response.raise_for_status()

with open("preview_model.glb", "wb") as f:
  f.write(preview_model_response.content)

print("Preview model downloaded.")

# 4. Generate a refined model and get the task ID

generate_refined_request = {
  "mode": "refine",
  "preview_task_id": preview_task_id,
}

generate_refined_response = requests.post(
  "https://api.meshy.ai/openapi/v2/text-to-3d",
  headers=headers,
  json=generate_refined_request,
)

generate_refined_response.raise_for_status()

refined_task_id = generate_refined_response.json()["result"]

print("Refined task created. Task ID:", refined_task_id)

# 5. Poll the refined task status until it's finished

refined_task = None

while True:
  refined_task_response = requests.get(
    f"https://api.meshy.ai/openapi/v2/text-to-3d/{refined_task_id}",
    headers=headers,
  )

  refined_task_response.raise_for_status()

  refined_task = refined_task_response.json()

  if refined_task["status"] == "SUCCEEDED":
    print("Refined task finished.")
    break

  print("Refined task status:", refined_task["status"], "| Progress:", refined_task["progress"], "| Retrying in 5 seconds...")
  time.sleep(5)

# 6. Download the refined model in glb format

refined_model_url = refined_task["model_urls"]["glb"]

refined_model_response = requests.get(refined_model_url)
refined_model_response.raise_for_status()

with open("refined_model.glb", "wb") as f:
  f.write(refined_model_response.content)

print("Refined model downloaded.")

Kopiera och klistra in koden i ett Python-skript och kör det.

Run the script

python api_request.py

Du bör se utdata i din terminal som liknar följande:

Kör skriptet

Nästa steg

  • Föredrar du att prova endpoints utan att först skriva kod? Använd API Playground för att konfigurera och köra en begäran, och kopiera sedan det genererade kodavsnittet.
  • Du hittar den kompletta API-referensen i avsnittet "API-endpoints", som ger detaljerad information om varje API.
  • Utforska detaljer om Priser, Rate Limits och hur du felsöker vanliga fel.
  • Glöm inte att regelbundet kolla in vår ändringslogg för uppdateringar och buggfixar.
  • Har du feedback eller stöter du på problem? Gå med i vår Discord community - vi vill gärna höra från dig!