lowpoly จะยุติการให้บริการในวันที่ 30 ต.ค. 2569 โปรดเปลี่ยนโมเดลก่อนวันที่เหล่านี้เพื่อหลีกเลี่ยงข้อผิดพลาดของคำขอ ดูการเลิกใช้งานทั้งหมด

เริ่มต้นอย่างรวดเร็ว

เริ่มต้นด้วยการสร้าง API คีย์ของคุณ

ทุกคำขอในคู่มือนี้ต้องใช้ API คีย์ การสร้างคีย์ใช้เวลาเพียงไม่กี่วินาที

สร้าง API คีย์ของคุณ

สร้างโมเดล 3D ชิ้นแรกของคุณด้วย Meshy REST API ใน 4 ขั้นตอน ตั้งแต่การสร้าง API คีย์ไปจนถึงการดาวน์โหลดโมเดล


1รับ API คีย์ของคุณ

สร้าง API คีย์ บนหน้า API Keys ของ Developer Platform คุณจะไม่สามารถดูคีย์นี้ได้อีกหลังจากออกจากหน้าจอนั้น ดังนั้นควรเก็บไว้ในที่ปลอดภัย ส่งคีย์นี้ในทุกคำขอในรูปแบบโทเคน Bearer ในส่วนหัว Authorization ดูที่ การยืนยันตัวตน

คุณต้องมีแพ็กเกจแบบชำระเงินเพื่อสร้างและจัดการ API คีย์ สำหรับแพ็กเกจ Free คุณจะไม่สามารถสร้างคีย์ของตัวเองได้ และ Playground จะใช้คีย์ที่มีมาในตัวสำหรับการทดสอบ

เปิดหน้า API Keys ใน Developer Platform แล้วสร้างคีย์ของคุณ


2สร้างงานรูปภาพเป็น 3D

ส่งรูปภาพไปยัง รูปภาพเป็น 3D หากต้องการเริ่มจาก prompt ข้อความหรือรูปภาพหลายรูปแทน ให้ใช้ ข้อความเป็น 3D หรือ หลายรูปเป็น 3D

ก่อนอื่น เก็บคีย์ของคุณไว้ในตัวแปรสภาพแวดล้อม:

Export your key

export MESHY_API_KEY="<your-api-key>"

ตัวอย่างต่อไปนี้ทั้งหมดใช้ภาพนี้ หากต้องการลองภาพอื่น ให้เปลี่ยน image_url

ภาพประกอบตัวละครแฟนตาซีตัวอย่างที่ใช้เป็นอินพุตของรูปภาพเป็น 3D ในคู่มือนี้
ตัวอย่างอินพุต

Request

POST
/openapi/v1/image-to-3d
curl https://api.meshy.ai/openapi/v1/image-to-3d \
  -X POST \
  -H "Authorization: Bearer ${MESHY_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
    "image_url": "https://docs.meshy.ai/images/api/quick-start/source-photo.webp"
  }'

3ตรวจสอบสถานะงาน

งานจะทำงานอยู่เบื้องหลังและมักใช้เวลาไม่กี่นาที ดึงข้อมูลงานจากเอนด์พอยต์เดิมจนกว่า status จะเป็น SUCCEEDED, FAILED, หรือ CANCELED ในคำขอต่อไปนี้ ให้แทนที่ <task_id> ด้วย ID ที่ได้จากขั้นตอนที่ 2 ระหว่างแต่ละคำขอ ให้รอตามจำนวนวินาทีที่ระบุไว้ในส่วนหัว Retry-After

สำหรับเวลาในการประมวลผลโดยทั่วไป และควรรอนานแค่ไหนก่อนจะยกเลิก ดูที่ วงจรชีวิตของงาน

Request

GET
/openapi/v1/image-to-3d/:id
curl https://api.meshy.ai/openapi/v1/image-to-3d/<task_id> \
  -H "Authorization: Bearer ${MESHY_API_KEY}"

Response: SUCCEEDED

{
  "id": "018a210d-8ba4-705c-b111-1f1776f7f578",
  "status": "SUCCEEDED",
  "progress": 100,
  "model_urls": {
    "glb": "https://assets.meshy.ai/***/tasks/018a210d-8ba4-705c-b111-1f1776f7f578/output/model.glb?Expires=***",
    "fbx": "https://assets.meshy.ai/***/tasks/018a210d-8ba4-705c-b111-1f1776f7f578/output/model.fbx?Expires=***"
  },
  "thumbnail_url": "https://assets.meshy.ai/***/tasks/018a210d-8ba4-705c-b111-1f1776f7f578/output/preview.png?Expires=***",
  "task_error": null
}

หากงานล้มเหลว status จะเป็น FAILED และ task_error จะบอกสาเหตุ ให้แก้ไขอินพุตหรือสร้างงานใหม่ ดูที่ ข้อผิดพลาด


4ดาวน์โหลดโมเดลของคุณ

ไฟล์ต่าง ๆ จะอยู่ใน model_urls ของการตอบกลับก่อนหน้านี้ แต่ละฟอร์แมต (GLB, FBX, OBJ, USDZ และ STL) จะมี URL ที่ลงนามแล้วซึ่งใช้งานได้ในระยะเวลาจำกัด คุณสามารถวาง URL ลงในเบราว์เซอร์เพื่อดาวน์โหลดไฟล์ได้เช่นกัน

Download

model_urls.glb
curl -L "<model_urls.glb from the response above>" -o model.glb
โมเดล 3D ที่ได้จากภาพตัวละครแฟนตาซีตัวอย่าง
ผลลัพธ์ของคุณ

นำทุกอย่างมารวมกัน

สคริปต์นี้จะสร้างงาน รอจนกว่าจะเสร็จสิ้น และดาวน์โหลดโมเดล

Full script

import axios from 'axios';
import fs from 'fs';

const headers = { Authorization: `Bearer ${process.env.MESHY_API_KEY}` };
const imageUrl = 'https://docs.meshy.ai/images/api/quick-start/source-photo.webp';

// 1. Create the task
const { data: created } = await axios.post(
  'https://api.meshy.ai/openapi/v1/image-to-3d',
  { image_url: imageUrl },
  { headers, timeout: 60_000 },
);
const taskId = created.result;

// 2. Poll until it finishes, for up to 60 minutes
const deadline = Date.now() + 60 * 60 * 1000;
let task;
while (true) {
  const { data, headers: resHeaders } = await axios.get(
    `https://api.meshy.ai/openapi/v1/image-to-3d/${taskId}`,
    { headers, timeout: 30_000 },
  );
  task = data;
  if (['SUCCEEDED', 'FAILED', 'CANCELED'].includes(task.status)) break;
  if (Date.now() > deadline) {
    // The task is still running. Check it again later with the same task ID instead of creating a new one.
    throw new Error(`Task ${taskId} is still ${task.status}; check it again later`);
  }
  const waitSeconds = Number(resHeaders['retry-after']) || 5;
  await new Promise((resolve) => setTimeout(resolve, waitSeconds * 1000));
}

// 3. Download the result (only if the task succeeded)
if (task.status !== 'SUCCEEDED') {
  throw new Error(`Task ${task.status}: ${task.task_error?.message || 'unknown error'}`);
}
const { data: model } = await axios.get(task.model_urls.glb, { responseType: 'arraybuffer' });
fs.writeFileSync('model.glb', model);
console.log('Saved model.glb');

สำรวจเวิร์กโฟลว์ทั่วไป


ขั้นตอนถัดไป