Mula pantas

Ini ialah rujukan API untuk berinteraksi secara programatik dengan Meshy.


Meshy API menyediakan antara muka ringkas untuk menjana model dan tekstur 3D daripada prompt teks dan imej. Ikuti panduan ini untuk bermula dengan pantas.

Cipta kunci API

Cipta kunci API dalam halaman tetapan API di sini, yang akan anda gunakan untuk mengesahkan permintaan anda dengan selamat. Format kunci API ialah msy-<random-string>.

Jana kunci API

Setelah anda menjana kunci API, simpannya di lokasi yang selamat.

kunci API mod ujian

Semasa pembangunan dan ujian, anda boleh menggunakan kunci API mod ujian kami untuk meneroka API tanpa menggunakan kredit anda:

msy_dummy_api_key_for_test_mode_12345678

kunci API khas ini mempunyai ciri-ciri berikut:

  • Ia boleh digunakan untuk membuat permintaan kepada semua endpoint Meshy API
  • Tiada kredit digunakan apabila menggunakan kunci ini
  • Semua permintaan yang sah akan mengembalikan hasil tugas sampel yang sama, tanpa mengira parameter input
  • Struktur data respons akan sepadan dengan API pengeluaran dengan tepat
  • Sesuai untuk menguji integrasi API anda sebelum beralih kepada kunci API sebenar anda

Buat Permintaan API "Teks ke 3D" Pertama Anda

Dalam contoh ini, kita akan menjana model 3D daripada prompt teks menggunakan text-to-3d endpoint. Proses ini melibatkan dua peringkat: peringkat pratonton dan peringkat perhalusi. Dalam peringkat pratonton, jejaring asas dijana tanpa tekstur diterapkan, membolehkan anda menilai geometri. Dalam peringkat perhalusi, jejaring pratonton diberi tekstur berdasarkan prompt teks.

Kami akan menunjukkan kepada anda cara membuat permintaan ini dalam skrip Python.

Pratonton

Meshy menyediakan satu set endpoint REST API. Anda boleh menggunakannya dengan mana-mana klien HTTP pilihan anda. Tanpa mengira API mana yang anda panggil, kunci API sentiasa dihantar sebagai pengepala bernama Authorization. Sila ingat untuk mengeksport kunci API anda sebagai pemboleh ubah persekitaran bernama MESHY_API_KEY sebelum menggunakan skrip ini.

Parameter utama untuk permintaan pratonton ialah mode, yang sentiasa "preview", dan prompt, penerangan tentang model yang anda perlukan. Dalam contoh ini, kami juga telah menentukan should_remesh, tetapi ia adalah pilihan.

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)

Ini melengkapkan panggilan API pratonton.

Sila ambil perhatian bahawa Meshy API menggunakan model pelaksanaan tak segerak, bermakna apabila anda mencipta tugas, API endpoint hanya mengembalikan ID tugas. Anda kemudiannya mesti meninjau endpoint status tugas dengan ID ini untuk menyemak sama ada tugas telah selesai.

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)

Setelah tugas selesai, anda akan dapat mengakses URL model daripada responsnya. Mari muat turun model daripada medan model_urls dalam 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.")

Jika semuanya berjalan lancar setakat ini, preview_model.glb anda sepatutnya kelihatan serupa dengan ini. Ia tidak akan sepadan dengan tepat, disebabkan oleh kerawakan intrinsik dalam saluran paip AI.

Model pratonton

Perhalusi

Mari teruskan ke peringkat perhalusi. Untuk memulakan permintaan perhalusi, berikan ID tugas pratonton sebagai parameter input.

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

Model 3D refined_model.glb kini mempunyai tekstur sepenuhnya ✨.

Model diperhalusi

Gabungkan Semuanya

Berikut ialah kod lengkap untuk menggunakan API Teks ke 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.")

Salin dan tampal kod ke dalam skrip Python dan jalankannya.

Run the script

python api_request.py

Anda sepatutnya melihat output dalam terminal anda seperti berikut:

Jalankan skrip

Langkah Seterusnya

  • Lebih suka mencuba endpoint tanpa menulis kod terlebih dahulu? Gunakan API Playground untuk mengkonfigurasi dan menjalankan permintaan, kemudian salin coretan yang dijana.
  • Anda boleh mendapatkan rujukan API lengkap dalam bahagian "Endpoint API", yang menyediakan maklumat terperinci tentang setiap API.
  • Terokai butiran tentang Harga, Had Kadar, dan cara menyelesaikan masalah ralat biasa.
  • Jangan lupa untuk menyemak log perubahan kami secara berkala untuk kemas kini dan pembetulan pepijat.
  • Ada maklum balas atau menghadapi isu? Sertai komuniti Discord kami - kami ingin mendengar daripada anda!