Mulai cepat

Ini adalah referensi API untuk berinteraksi secara terprogram dengan Meshy.


Meshy API menyediakan antarmuka sederhana untuk menghasilkan model 3D dan tekstur dari prompt teks dan gambar. Ikuti panduan ini untuk memulai dengan cepat.

Buat kunci API

Buat kunci API di halaman pengaturan API di sini, yang akan Anda gunakan untuk mengautentikasi permintaan Anda secara aman. Format kunci API adalah msy-<random-string>.

Buat kunci API

Setelah Anda membuat kunci API, simpan di lokasi yang aman.

kunci API mode uji

Selama pengembangan dan pengujian, Anda dapat menggunakan kunci API mode uji kami untuk menjelajahi API tanpa mengonsumsi kredit Anda:

msy_dummy_api_key_for_test_mode_12345678

Kunci API khusus ini memiliki karakteristik berikut:

  • Dapat digunakan untuk membuat permintaan ke semua endpoint Meshy API
  • Tidak ada kredit yang dikonsumsi saat menggunakan kunci ini
  • Semua permintaan valid akan mengembalikan hasil tugas sampel yang sama, terlepas dari parameter input
  • Struktur data respons akan sama persis dengan API produksi
  • Sempurna untuk menguji integrasi API Anda sebelum beralih ke kunci API asli Anda

Buat Permintaan API "Teks ke 3D" Pertama Anda

Dalam contoh ini, kita akan menghasilkan model 3D dari prompt teks menggunakan text-to-3d endpoint. Proses ini melibatkan dua tahap: tahap pratinjau dan tahap penyempurnaan. Pada tahap pratinjau, mesh dasar dibuat tanpa tekstur yang diterapkan, sehingga Anda dapat mengevaluasi geometri. Pada tahap penyempurnaan, mesh pratinjau diberi tekstur berdasarkan prompt teks.

Kami akan menunjukkan cara membuat permintaan ini dalam skrip Python.

Pratinjau

Meshy menyediakan serangkaian endpoint REST API. Anda dapat menggunakannya dengan klien HTTP apa pun pilihan Anda. Terlepas dari API mana yang Anda panggil, kunci API selalu diteruskan sebagai header bernama Authorization. Harap ingat untuk mengekspor kunci API Anda sebagai variabel lingkungan bernama MESHY_API_KEY sebelum menggunakan skrip ini.

Parameter utama untuk permintaan pratinjau adalah mode, yang selalu "preview", dan prompt, deskripsi model yang Anda butuhkan. Dalam contoh ini, kami juga telah menentukan should_remesh, tetapi ini opsional.

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 menyelesaikan panggilan API pratinjau.

Harap diingat bahwa Meshy API mengadopsi model eksekusi asinkron, yang berarti bahwa saat Anda membuat tugas, endpoint API hanya mengembalikan ID tugas. Anda kemudian harus melakukan polling endpoint status tugas dengan ID ini untuk memeriksa apakah 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 dari responsnya. Mari unduh model dari bidang 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 sejauh ini, preview_model.glb Anda akan terlihat mirip dengan ini. Ini tidak akan sama persis, karena adanya keacakan intrinsik dalam pipeline AI.

Model pratinjau

Penyempurnaan

Mari lanjutkan ke tahap penyempurnaan. Untuk memulai permintaan penyempurnaan, berikan ID tugas pratinjau 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 sepenuhnya bertekstur ✨.

Model yang disempurnakan

Gabungkan Semuanya

Berikut adalah kode 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 tempel kode ke dalam skrip Python lalu jalankan.

Run the script

python api_request.py

Anda akan melihat output di terminal Anda seperti berikut:

Jalankan skrip

Langkah Berikutnya

  • Lebih suka mencoba endpoint tanpa menulis kode terlebih dahulu? Gunakan API Playground untuk mengonfigurasi dan menjalankan permintaan, lalu salin snippet yang dihasilkan.
  • Anda dapat menemukan referensi API lengkap di bagian "Endpoint API", yang menyediakan informasi mendetail tentang setiap API.
  • Jelajahi detail tentang Harga, Rate Limits, dan cara memecahkan masalah kesalahan umum.
  • Jangan lupa untuk memeriksa catatan perubahan kami secara berkala untuk pembaruan dan perbaikan bug.
  • Punya masukan atau menghadapi masalah? Bergabunglah dengan komunitas Discord kami - kami ingin mendengar dari Anda!