クイックスタート

これは、Meshyとプログラムからやり取りするためのAPIリファレンスです。


Meshy APIは、テキストプロンプトや画像から3Dモデルとテクスチャを生成するためのシンプルなインターフェイスを提供します。このガイドに従って、すばやく始めましょう。

API Keyを作成する

API設定ページでAPI keyを作成します。このAPI keyを使用して、リクエストを安全に認証します。API keyの形式は msy-<random-string> です。

API Keyを生成

API keyを生成したら、安全な場所に保存してください。

テストモードAPI Key

開発やテスト中は、クレジットを消費せずにAPIを試すために、テストモードのAPI keyを使用できます。

msy_dummy_api_key_for_test_mode_12345678

この特別なAPI keyには、次の特徴があります。

  • すべてのMeshy API endpointへのリクエストに使用できます
  • このキーを使用してもクレジットは消費されません
  • 入力パラメータに関係なく、すべての有効なリクエストは同じサンプルタスク結果を返します
  • レスポンスデータ構造は本番APIと完全に一致します
  • 実際のAPI keyに切り替える前に、API連携をテストするのに最適です

最初の「Text to 3D」APIリクエストを送信する

この例では、text-to-3d endpoint を使用して、テキストプロンプトから3Dモデルを生成します。このプロセスには、プレビューステージとリファインステージの2つの段階があります。プレビューステージでは、テクスチャが適用されていないベースメッシュが生成され、ジオメトリを評価できます。リファインステージでは、テキストプロンプトに基づいてプレビューメッシュにテクスチャが適用されます。

これらのリクエストをPythonスクリプトで送信する方法を示します。

プレビュー

Meshyは一連のREST API endpointを提供しています。任意のHTTPクライアントで使用できます。どのAPIを呼び出す場合でも、API keyは常に Authorization という名前のヘッダーとして渡されます。このスクリプトを使用する前に、API keyを MESHY_API_KEY という名前の環境変数としてエクスポートすることを忘れないでください。

プレビューリクエストの主要なパラメータは、常に "preview" である mode と、必要なモデルの説明である prompt です。この例では should_remesh も指定していますが、これは任意です。

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)

これでプレビューAPI呼び出しは完了です。

Meshy APIは非同期実行モデルを採用していることに注意してください。つまり、タスクを作成すると、API endpointはタスクIDのみを返します。その後、このIDを使ってタスクステータスendpointをポーリングし、タスクが完了したかどうかを確認する必要があります。

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)

タスクが完了すると、そのレスポンスからモデルURLにアクセスできるようになります。レスポンスの model_urls フィールドからモデルをダウンロードしてみましょう。

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

ここまで問題なく動作していれば、preview_model.glb は次のような見た目になるはずです。AIパイプラインに内在するランダム性により、完全に一致するわけではありません。

プレビューモデル

リファイン

リファインステージに進みましょう。リファインリクエストを開始するには、プレビュータスクIDを入力パラメータとして指定します。

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モデル refined_model.glb には、これで完全にテクスチャが適用されました ✨。

リファイン済みモデル

まとめて実行する

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

コードをPythonスクリプトにコピーして貼り付け、実行します。

Run the script

python api_request.py

ターミナルに次のような出力が表示されるはずです。

スクリプトを実行

次のステップ

  • まずはコードを書かずにendpointを試したいですか?API Playground を使用してリクエストを設定・実行し、生成されたスニペットをコピーしてください。
  • 完全なAPIリファレンスは「API Endpoints」セクションにあり、各APIに関する詳細情報を確認できます。
  • PricingRate Limits、および一般的なエラーのトラブルシューティング方法について詳しく確認してください。
  • 更新やバグ修正を確認するために、Changelog も定期的にチェックすることを忘れないでください。
  • フィードバックがありますか、または問題に直面していますか?Discord コミュニティに参加してください。ぜひご意見をお聞かせください!