Snelstart

Dit is de API-referentie voor programmatische interactie met Meshy.


De Meshy API biedt een eenvoudige interface om 3D-modellen en texturen te genereren op basis van tekstprompts en afbeeldingen. Volg deze gids om snel aan de slag te gaan.

Maak een API-sleutel aan

Maak hier een API-sleutel aan op de pagina met API-instellingen, die je gebruikt om veilig je requests te authenticeren. De indeling van de API-sleutel is msy-<random-string>.

API-sleutel genereren

Zodra je een API-sleutel hebt gegenereerd, sla je deze op een veilige locatie op.

Test-modus API-sleutel

Tijdens ontwikkeling en testen kun je onze test-modus API-sleutel gebruiken om de API te verkennen zonder je credits te verbruiken:

msy_dummy_api_key_for_test_mode_12345678

Deze speciale API-sleutel heeft de volgende kenmerken:

  • Hij kan worden gebruikt om requests te doen naar alle Meshy API-endpoints
  • Er worden geen credits verbruikt wanneer je deze sleutel gebruikt
  • Alle geldige requests retourneren dezelfde voorbeeldtaakresultaten, ongeacht de invoerparameters
  • De structuur van de responsgegevens komt exact overeen met de productie-API
  • Perfect om je API-integratie te testen voordat je overschakelt naar je echte API-sleutel

Doe je eerste "Tekst naar 3D"-API-request

In dit voorbeeld genereren we een 3D-model op basis van een tekstprompt met behulp van de text-to-3d endpoint. Het proces omvat twee fasen: de preview-fase en de refine-fase. In de preview-fase wordt een basismesh gegenereerd zonder toegepaste textuur, zodat je de geometrie kunt beoordelen. In de refine-fase wordt de preview-mesh van textuur voorzien op basis van de tekstprompt.

We laten je zien hoe je deze requests uitvoert in een Python-script.

Preview

Meshy biedt een set REST API-endpoints. Je kunt ze gebruiken met elke HTTP-client naar keuze. Ongeacht welke API je aanroept, wordt de API-sleutel altijd doorgegeven als een header met de naam Authorization. Vergeet niet je API-sleutel te exporteren als een omgevingsvariabele met de naam MESHY_API_KEY voordat je dit script gebruikt.

De belangrijkste parameters voor het preview-request zijn mode, die altijd "preview" is, en prompt, een beschrijving van het model dat je nodig hebt. In dit voorbeeld hebben we ook should_remesh opgegeven, maar dit is optioneel.

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)

Hiermee is de preview-API-aanroep voltooid.

Houd er rekening mee dat de Meshy API een asynchroon uitvoeringsmodel hanteert, wat betekent dat wanneer je een taak aanmaakt, de API endpoint alleen een taak-ID retourneert. Vervolgens moet je de endpoint voor de taakstatus pollen met deze ID om te controleren of de taak is voltooid.

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)

Zodra de taak is voltooid, kun je de model-URL's openen vanuit de respons. Laten we het model downloaden uit het veld model_urls in de respons.

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.")

Als alles tot nu toe werkt, zou je preview_model.glb er ongeveer zo uit moeten zien. Het zal geen exacte match zijn, vanwege de inherente willekeur in de AI-pipeline.

Preview-model

Refine

Laten we doorgaan naar de refine-fase. Om het refine-request te starten, geef je de preview-taak-ID op als invoerparameter.

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.")

Het 3D-model refined_model.glb is nu volledig van textuur voorzien ✨.

Refined model

Alles bij elkaar

Hier is de volledige code voor het gebruik van de Tekst naar 3D API.

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.")

Kopieer en plak de code in een Python-script en voer het uit.

Run the script

python api_request.py

Je zou uitvoer in je terminal moeten zien zoals het volgende:

Het script uitvoeren

Volgende stappen

  • Wil je liever eerst endpoints proberen zonder code te schrijven? Gebruik de API Playground om een request te configureren en uit te voeren, en kopieer daarna de gegenereerde snippet.
  • Je vindt de volledige API-referentie in de sectie "API-endpoints", die gedetailleerde informatie biedt over elke API.
  • Verken details over Prijzen, rate limits en hoe je veelvoorkomende fouten kunt oplossen.
  • Vergeet niet regelmatig onze changelog te bekijken voor updates en bugfixes.
  • Heb je feedback of ondervind je problemen? Word lid van onze Discord community - we horen graag van je!