Démarrage rapide

Ceci est la référence API pour interagir programmatiquement avec Meshy.


La Meshy API fournit une interface simple pour générer des modèles 3D et des textures à partir de prompts textuels et d’images. Suivez ce guide pour démarrer rapidement.

Créer une clé API

Créez une clé API sur la page des paramètres API ici, que vous utiliserez pour authentifier vos requêtes de manière sécurisée. Le format de la clé API est msy-<random-string>.

Générer une clé API

Une fois que vous avez généré une clé API, stockez-la dans un emplacement sécurisé.

Clé API en mode test

Pendant le développement et les tests, vous pouvez utiliser notre clé API en mode test pour explorer l’API sans consommer vos crédits :

msy_dummy_api_key_for_test_mode_12345678

Cette clé API spéciale possède les caractéristiques suivantes :

  • Elle peut être utilisée pour effectuer des requêtes vers tous les points de terminaison Meshy API
  • Aucun crédit n’est consommé lors de l’utilisation de cette clé
  • Toutes les requêtes valides renverront les mêmes résultats de tâche d’exemple, quels que soient les paramètres d’entrée
  • La structure des données de réponse correspondra exactement à celle de l’API de production
  • Parfaite pour tester votre intégration API avant de passer à votre véritable clé API

Effectuer votre première requête API « Texte en 3D »

Dans cet exemple, nous allons générer un modèle 3D à partir d’un prompt textuel en utilisant le point de terminaison text-to-3d. Le processus comporte deux étapes : l’étape d’aperçu et l’étape d’affinement. À l’étape d’aperçu, un maillage de base est généré sans texture appliquée, ce qui vous permet d’évaluer la géométrie. À l’étape d’affinement, le maillage d’aperçu reçoit une texture basée sur le prompt textuel.

Nous allons vous montrer comment effectuer ces requêtes dans un script Python.

Aperçu

Meshy fournit un ensemble de points de terminaison d’API REST. Vous pouvez les utiliser avec le client HTTP de votre choix. Quelle que soit l’API que vous appelez, la clé API est toujours transmise comme un en-tête nommé Authorization. N’oubliez pas d’exporter votre clé API en tant que variable d’environnement nommée MESHY_API_KEY avant d’utiliser ce script.

Les paramètres clés de la requête d’aperçu sont mode, qui vaut toujours "preview", et prompt, une description du modèle dont vous avez besoin. Dans cet exemple, nous avons également spécifié should_remesh, mais il est facultatif.

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)

Cela termine l’appel API d’aperçu.

Veuillez garder à l’esprit que Meshy API adopte un modèle d'exécution asynchrone, ce qui signifie que lorsque vous créez une tâche, le point de terminaison API ne renvoie qu’un ID de tâche. Vous devez ensuite interroger régulièrement le point de terminaison de statut de la tâche avec cet ID pour vérifier si la tâche est terminée.

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)

Une fois la tâche terminée, vous pourrez accéder aux URL du modèle depuis sa réponse. Téléchargeons le modèle depuis le champ model_urls de la réponse.

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

Si tout fonctionne jusqu’ici, votre preview_model.glb devrait ressembler à ceci. Il ne s’agira pas d’une correspondance exacte, en raison du caractère aléatoire intrinsèque du pipeline IA.

Modèle d’aperçu

Affinement

Passons à l’étape d’affinement. Pour lancer la requête d’affinement, fournissez l’ID de la tâche d’aperçu comme paramètre d’entrée.

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

Le modèle 3D refined_model.glb est maintenant entièrement texturé ✨.

Modèle affiné

Assembler le tout

Voici le code complet pour utiliser l’API Texte en 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.")

Copiez-collez le code dans un script Python et exécutez-le.

Run the script

python api_request.py

Vous devriez voir une sortie dans votre terminal semblable à la suivante :

Exécuter le script

Étapes suivantes

  • Vous préférez essayer des points de terminaison sans écrire de code d’abord ? Utilisez l’API Playground pour configurer et exécuter une requête, puis copiez l’extrait généré.
  • Vous trouverez la référence API complète dans la section « Points de terminaison API », qui fournit des informations détaillées sur chaque API.
  • Explorez les détails concernant la Tarification, les Limites de débit et la résolution des erreurs courantes.
  • N’oubliez pas de consulter régulièrement notre journal des modifications pour les mises à jour et les corrections de bugs.
  • Vous avez des retours ou rencontrez des problèmes ? Rejoignez notre communauté Discord - nous serions ravis d’avoir de vos nouvelles !