API Creative Lab Fidget Pixel
Ubah sebuah foto menjadi papan fidget pixel-art multi-warna yang dapat dicetak 3D dalam dua tahap. Tugas prototipe mengubah foto menjadi gambar pixel-art. Tugas build mengubah gambar tersebut menjadi potongan-potongan yang saling mengunci dalam satu file 3MF, dan menggunakan ID dari tugas prototipe sebagai input_task_id.
POST /openapi/creative-lab/fidget-pixel/v1/prototypePOST /openapi/creative-lab/fidget-pixel/v1/build
Kedua endpoint POST tersebut memerlukan paket berbayar. Permintaan dari akun dengan paket gratis akan mengembalikan 402.
Buat tugas prototipe Fidget Pixel
Menghasilkan satu gambar pixel-art dari sebuah foto. Untuk membangun bagian-bagiannya, kirimkan ID tugas ini ke build endpoint sebagai input_task_id. Untuk field-field tugas, lihat The Fidget Pixel prototype task object.
Jika Anda tidak menyukai gambarnya, buat tugas prototipe lain. Setiap tugas dikenakan biaya secara terpisah.
Request
# Stage 1: pixelize the source photo
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/prototype \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"image_url": "<your publicly accessible image url or base64-encoded data URI>",
"type": "person"
}'
Response
{
"result": "019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7"
}
Parameter
- Name
- image_url
- Type
- string
- Wajib
- Description
Foto yang akan diubah menjadi pixel art, berupa URL publik atau data URI (
data:image/jpeg;base64,<data gambar Anda yang dienkode base64>).Gambar harus berupa file JPG, JPEG, PNG, atau WebP dengan ukuran maksimal 20 MB. Meshy mendeteksi format dari data gambar, bukan dari ekstensi file pada URL. URL tanpa ekstensi tetap berfungsi, dan Meshy mengikuti pengalihan (redirect).
- Name
- type
- Type
- string
- Wajib
- Description
Apa yang ditampilkan oleh foto tersebut, yang menentukan gaya pixel-art. Kedua gaya ini terlihat jelas berbeda. Nilai lain mengembalikan
400.Nilai yang tersedia:
person: seorang orang, dalam foto potret atau foto seluruh tubuh. Meshy menggambar sprite pixel bergaya chibi.other: subjek lainnya, misalnya hewan peliharaan, objek, maskot, logo, atau pemandangan. Meshy menggambar ikon pixel bergaya bead-art.
- Name
- name
- Type
- string
- Description
Nama untuk tugas, maksimal 100 karakter. Nama ini akan muncul kembali di field
namepada tugas. Nama yang lebih panjang mengembalikan400.
Hasil
Field result menyimpan ID dari tugas prototipe yang baru. Ambil tugas tersebut atau streaming tugas tersebut hingga status bernilai SUCCEEDED. Lalu kirimkan ID tersebut ke build endpoint sebagai input_task_id.
Mode kegagalan
- Name
400 - Bad Request- Description
Permintaan tidak dapat dijalankan. Contohnya:
image_urlatautypetidak ada.typebukanpersonatauother.- Gambar bukan file JPG, JPEG, PNG, atau WebP.
- Gambar terlalu kecil, melebihi 20 MB, atau melebihi jumlah piksel maksimum.
- Meshy tidak dapat mengunduh gambar, misalnya karena URL mengembalikan
404atau waktu habis (timeout). - Data URI bukan base64 yang valid.
- Gambar ditandai sebagai NSFW.
Pesan error menunjukkan masalah apa yang ditemukan. Perbaiki permintaan, lalu kirim ulang.
- Name
401 - Unauthorized- Description
Kunci API tidak ada atau tidak valid. Periksa header
Authorization.
- Name
402 - Payment Required- Description
Salah satu dari berikut ini berlaku:
- Akun tidak memiliki kredit yang cukup.
- Kunci API, ruang kerja, atau anggota telah mencapai batas kreditnya.
- Akun menggunakan paket gratis.
Periksa kredit dan paket Anda, lalu coba lagi.
- Name
403 - Forbidden- Description
Tim Anda mengaktifkan IP Filtering, dan Meshy menandai gambar tersebut terkait kekayaan intelektual pihak ketiga. Kirim gambar yang hak penggunaannya Anda miliki.
- Name
429 - Too Many Requests- Description
Salah satu batas berikut telah tercapai:
- Anda mengirim lebih banyak permintaan daripada yang diizinkan oleh batas laju Anda. Tunggu beberapa detik, lalu coba lagi. Lihat Rate limits.
- Terlalu banyak tugas Anda yang sedang antre atau berjalan. Tunggu hingga beberapa selesai, lalu coba lagi.
- Pada paket tak terbatas tanpa sisa kredit, Anda telah mencapai jumlah tugas yang dapat berjalan tanpa kredit. Tunggu hingga sebuah tugas selesai, atau tambahkan kredit.
- Name
500 - Internal Server Error- Description
Meshy mengalami kesalahan server, misalnya karena tidak dapat menjalankan pemeriksaan kekayaan intelektual pada gambar. Meshy tidak membuat tugas, dan mengembalikan kredit apa pun yang telah dikenakan. Coba ulangi permintaan.
Buat tugas build Fidget Pixel
Menghasilkan bagian-bagian yang dapat dicetak 3D dari tugas prototipe yang berhasil. Meshy mengambil sampel gambar pixel-art ke grid dan menguranginya menjadi paling banyak color_count warna. Setiap sel pada subjek menjadi satu bagian yang saling mengunci, dan latar belakangnya tidak dicetak.
Hasilnya adalah satu file 3MF multi-warna, siap dicetak berwarna. Setiap bagian memiliki badan berwarna abu-abu dan bagian atas dengan warna pixel-nya. Untuk field-fieldnya, lihat The Fidget Pixel build task object.
Request
# Stage 2: chain build off a succeeded prototype task
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/build \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"input_task_id": "019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7",
"options": {
"shape": "square",
"grid_size": 32,
"piece_size_mm": 8,
"color_count": 8,
"piece_height_mm": 15
},
"output": {
"format": "3mf"
}
}'
Response
{
"result": "019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98"
}
Parameter
- Name
- input_task_id
- Type
- string
- Wajib
- Description
ID dari tugas prototipe yang akan dibangun. Harus merupakan tugas yang dibuat oleh akun Anda dengan
POST /openapi/creative-lab/fidget-pixel/v1/prototype, dengan statusSUCCEEDED.Sebuah ID yang bukan merupakan tugas prototipe Fidget Pixel Anda dari API akan mengembalikan
404, termasuk prototipe yang dibuat di aplikasi web.
- Name
- name
- Type
- string
- Description
Nama untuk tugas, hingga 100 karakter. Nilai ini akan muncul kembali di field
nametugas. Nama yang lebih panjang mengembalikan400.
options
Pengaturan untuk bentuk dan ukuran bagian-bagian. Setiap field memiliki nilai default, jadi kirimkan hanya field yang ingin Anda ubah. Nilai 0 menggunakan default field tersebut. Ini adalah pengaturan yang sama seperti di aplikasi web Creative Lab. Pengaturan bentuk lainnya bersifat tetap, dan Meshy menetapkannya berdasarkan shape dan piece_size_mm.
- Name
- shape
- Type
- string
- default square
- Description
Bentuk dasar (footprint) dari setiap bagian. Nilai lain mengembalikan
400.Nilai yang tersedia:
square: bagian persegi pada grid persegihex: bagian heksagonal pada grid heksagonal, denganpiece_size_mmdiatur ke6atau8
- Name
- grid_size
- Type
- integer
- default 32
- Description
Jumlah sel grid di sepanjang setiap sisi papan,
16atau32. Nilai lain mengembalikan400. Grid32mempertahankan lebih banyak detail. Grid16menghasilkan bagian yang lebih sedikit dengan ukuran yang sama, sehingga papan menjadi sekitar setengah lebarnya.
- Name
- piece_size_mm
- Type
- integer
- default 8
- Description
Panjang sisi setiap bagian dalam milimeter,
6,8, atau10. Nilai lain mengembalikan400. Bersamagrid_size, ini menentukan ukuran papan yang dicetak. Misalnya, grid32dengan bagian 8 mm berukuran sekitar 26,5 cm per sisi.10tidak bekerja denganhexdan mengembalikan400, karena permukaan heksagonal yang miring akan menjorok keluar pada sebagian besar printer FDM konsumen.
- Name
- color_count
- Type
- integer
- default 8
- Description
Jumlah maksimum warna dalam palet pixel-art, dari
1hingga8. Nilai di luar rentang ini mengembalikan400. Untuk mencetak, Anda memerlukan hinggacolor_countditambah satu filamen, satu per warna dan satu untuk badan abu-abu.
- Name
- piece_height_mm
- Type
- integer
- default 15
- Description
Tinggi setiap bagian dalam milimeter, dari
10hingga80. Nilai di luar rentang ini mengembalikan400.
output
Pengaturan untuk file hasil.
- Name
- format
- Type
- string
- default 3mf
- Description
Format file dari hasil. Nilai lain mengembalikan
400.Nilai yang tersedia:
3mf: satu filemodel.3mfmulti-warna, dikembalikan dimodel_urls.3mf
Returns
Field result menyimpan ID dari tugas build baru. Dapatkan tugasnya atau streaming hingga status menjadi SUCCEEDED. Kemudian unduh file 3MF dari model_urls.3mf.
Mode kegagalan
- Name
400 - Bad Request- Description
Permintaan tidak dapat dijalankan. Misalnya:
input_task_idhilang atau bukan ID tugas yang valid.- Status tugas prototipe bukan
SUCCEEDED. Jika masih berjalan, tunggu dan coba lagi. Jika gagal atau dibatalkan, buat tugas prototipe baru. - Tugas prototipe berhasil tetapi tidak memiliki gambar. Buat tugas prototipe baru.
- Sebuah field
optionsberada di luar nilai yang diizinkan, misalnyagrid_sizeselain16atau32. piece_size_mmadalah10danshapeadalahhex. Bagian heksagonal hanya tersedia dalam ukuran 6 dan 8 mm.output.formatbukan3mf.
Pesan error akan menunjukkan masalah apa yang ditemukan.
- Name
401 - Unauthorized- Description
Kunci API hilang atau tidak valid. Periksa header
Authorization.
- Name
402 - Payment Required- Description
Salah satu dari ini berlaku:
- Akun tidak memiliki cukup kredit.
- Kunci API, ruang kerja, atau anggota mencapai batas kreditnya.
- Akun berada pada paket gratis.
Periksa kredit dan paket Anda, lalu coba lagi.
- Name
403 - Forbidden- Description
Tim Anda mengaktifkan IP Filtering, dan Meshy menandai gambar tugas prototipe tersebut karena hak kekayaan intelektual pihak ketiga. Buat tugas prototipe dari gambar yang memang berhak Anda gunakan.
- Name
404 - Not Found- Description
input_task_idtidak cocok dengan tugas prototipe Fidget Pixel mana pun yang dibuat akun Anda melalui API. Prototipe yang dibuat di aplikasi web juga akan mengembalikan404. Kirimkan IDresultdari respons pembuatan prototipe.
- Name
429 - Too Many Requests- Description
Salah satu batas ini tercapai:
- Anda mengirim lebih banyak permintaan daripada yang diizinkan oleh batas laju Anda. Tunggu beberapa detik, lalu coba lagi. Lihat Rate limits.
- Terlalu banyak tugas Anda yang sedang antre atau berjalan. Tunggu beberapa selesai, lalu coba lagi.
- Pada paket tanpa batas tanpa sisa kredit, Anda telah mencapai jumlah tugas yang dapat berjalan tanpa kredit. Tunggu salah satu tugas selesai, atau tambahkan kredit.
- Name
500 - Internal Server Error- Description
Meshy mengalami kesalahan server, misalnya karena tidak dapat menjalankan pemeriksaan hak kekayaan intelektual pada gambar tugas prototipe. Meshy tidak membuat tugas tersebut, dan mengembalikan kredit apa pun yang telah dikenakan. Coba lagi permintaannya.
Mendapatkan task Fidget Pixel
Mengembalikan task prototype atau build. Path harus sesuai dengan tahap task tersebut. Task build yang diminta melalui /prototype/:id akan mengembalikan 404, begitu juga task prototype yang diminta melalui /build/:id.
Untuk kolom-kolomnya, lihat Objek task prototype Fidget Pixel dan Objek task build Fidget Pixel.
Request
# Prototype
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/prototype/019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
# Build
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/build/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Prototype Response
{
"id": "019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7",
"type": "creative-lab-fidget-pixel-prototype",
"name": "",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1757001000000,
"started_at": 1757001005000,
"finished_at": 1757001178000,
"expires_at": 1757260378000,
"preceding_tasks": 0,
"task_error": null,
"consumed_credits": 6,
"image_urls": [
"https://assets.meshy.ai/***/pixel-art.jpg?Expires=***"
]
}
Build Response
{
"id": "019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98",
"type": "creative-lab-fidget-pixel-build",
"name": "",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1757001300000,
"started_at": 1757001304000,
"finished_at": 1757001309000,
"expires_at": 1757260509000,
"preceding_tasks": 0,
"task_error": null,
"consumed_credits": 30,
"model_urls": {
"3mf": "https://assets.meshy.ai/***/tasks/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98/output/model.3mf?Expires=***"
}
}
Parameter
- Name
- id
- Type
- path
- Description
ID task dari respons pembuatan.
Returns
Objek task prototype atau objek task build, sesuai dengan tahap pada path.
Mode kegagalan
- Name
400 - Bad Request- Description
idbukan ID task yang valid. Kirim IDresultdari respons pembuatan.
- Name
403 - Forbidden- Description
Tim Anda mengaktifkan IP Filtering, dan Meshy menandai gambar task prototype tersebut karena melanggar kekayaan intelektual pihak ketiga. Task build dan tim pada paket Enterprise tidak mendapatkan error ini. Buat task prototype dari gambar yang hak penggunaannya Anda miliki.
- Name
404 - Not Found- Description
Tidak ada task Fidget Pixel dengan ID ini yang dimiliki akun Anda, atau tahap task tidak sesuai dengan path. Periksa ID, dan gunakan
/prototypeatau/buildyang sesuai dengan task tersebut.
- Name
500 - Internal Server Error- Description
Meshy tidak dapat menjalankan pemeriksaan kekayaan intelektual. Coba lagi permintaan tersebut.
Hapus tugas Fidget Pixel
Membatalkan tugas Fidget Pixel. Membatalkan tugas berstatus PENDING akan mengembalikan kreditnya. Tugas IN_PROGRESS dibatalkan tanpa pengembalian kredit, karena worker sudah mulai mengerjakannya. Tugas dengan status akhir (SUCCEEDED, FAILED, atau CANCELED) tidak dapat dibatalkan.
Path harus sesuai dengan tahap tugas tersebut. Misalnya, DELETE pada /prototype/:id dengan ID tugas build akan mengembalikan 404.
Request
curl --request DELETE \
--url https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/prototype/019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
// Returns 204 No Content on success (empty body).
Parameter path
- Name
- id
- Type
- path
- Description
ID tugas yang akan dibatalkan.
Returns
204 No Content dengan body kosong.
Mode kegagalan
- Name
400 - Bad Request- Description
Salah satu dari hal berikut berlaku:
idbukan ID tugas yang valid. Kirim IDresultdari respons pembuatan.- Tugas sudah memiliki status akhir (
SUCCEEDED,FAILED, atauCANCELED), sehingga tidak dapat dibatalkan.
- Name
404 - Not Found- Description
Tidak ada tugas Fidget Pixel dengan ID ini yang dimiliki akun Anda, atau tahap tugas tidak sesuai dengan path. Periksa ID, dan gunakan
/prototypeatau/buildyang sesuai dengan tugas tersebut.
Stream tugas Fidget Pixel
Melakukan streaming pembaruan tugas Fidget Pixel sebagai Server-Sent Events (SSE). Path harus sesuai dengan tahap tugas. Jika tidak, misalnya ID tugas build digunakan di /prototype/:id/stream, stream akan mengirim satu event error dengan status_code: 404 lalu ditutup. Sebuah id yang bukan ID tugas yang valid akan melakukan hal yang sama dengan status_code: 400.
Request
curl -N https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/build/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98/stream \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response Stream
// Error event example (wrong stage or task not found)
event: error
data: {
"status_code": 404,
"message": "Task not found"
}
// Message event examples illustrate task progress.
// Every frame is the full task object for the stage; fields not yet populated are null / empty.
event: message
data: {
"id": "019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98",
"type": "creative-lab-fidget-pixel-build",
"name": "",
"status": "PENDING",
"progress": 0,
"created_at": 1757001300000,
"started_at": null,
"finished_at": null,
"expires_at": 1757260500000,
"preceding_tasks": 2,
"task_error": null,
"consumed_credits": 30,
"model_urls": {}
}
event: message
data: {
"id": "019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98",
"type": "creative-lab-fidget-pixel-build",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1757001300000,
"started_at": 1757001304000,
"finished_at": 1757001309000,
"expires_at": 1757260509000,
"task_error": null,
"consumed_credits": 30,
"model_urls": {
"3mf": "https://assets.meshy.ai/***/tasks/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98/output/model.3mf?Expires=***"
}
}
Parameter
- Name
- id
- Type
- path
- Description
ID tugas dari respons pembuatan.
Returns
Sebuah stream objek tugas prototype atau build. Setiap event berisi objek tugas lengkap, sebagaimana dikembalikan oleh Get a Fidget Pixel task. Selama tugas masih PENDING atau IN_PROGRESS, kolom output-nya masih kosong (null, [], atau {}), dan finished_at bernilai null.
Jika IP Filtering memblokir hasil tugas, stream akan mengirim satu event error sebagai penggantinya, dengan status_code yang sama seperti yang akan dikembalikan oleh permintaan get.
Daftar tugas Fidget Pixel
Mengembalikan tugas Fidget Pixel Anda untuk satu tahap, satu halaman dalam satu waktu. Path menentukan tahapnya. /prototype hanya mengembalikan tugas prototype, dan /build hanya mengembalikan tugas build.
Request
# List prototype tasks
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/prototype?page_size=10 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
# List build tasks
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/build?page_size=10 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response (List Prototype Tasks)
[
{
"id": "019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7",
"type": "creative-lab-fidget-pixel-prototype",
"name": "",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1757001000000,
"started_at": 1757001005000,
"finished_at": 1757001178000,
"expires_at": 1757260378000,
"preceding_tasks": 0,
"task_error": null,
"consumed_credits": 6,
"image_urls": [
"https://assets.meshy.ai/***/pixel-art.jpg?Expires=***"
]
}
]
Parameter path
- Name
- stage
- Type
- path
- Wajib
- Description
Tahap yang akan didaftar,
prototypeataubuild.
Parameter query
- Name
- page_num
- Type
- integer
- default 1
- Description
Halaman yang akan dikembalikan, dari
1hingga255.0mengembalikan halaman pertama. Nilai di luar0hingga255mengembalikan400.
- Name
- page_size
- Type
- integer
- default 10
- Description
Jumlah tugas per halaman, hingga
100. Nilai dari101hingga255mengembalikan 100 tugas, dan0menggunakan nilai default. Nilai di luar0hingga255mengembalikan400.
- Name
- sort_by
- Type
- string
- default -created_at
- Description
Urutan pengurutan.
Nilai yang tersedia:
-created_at: terbaru lebih dulu+created_at: terlama lebih dulu
Hasil
Sebuah array berisi objek tugas prototype atau objek tugas build, sesuai dengan tahap pada path.
Objek tugas prototipe Fidget Pixel
Tugas prototipe mengubah foto menjadi gambar pixel-art. Untuk mengubah gambar tersebut menjadi bagian-bagian yang siap dicetak 3D, kirimkan ID tugas tersebut ke build endpoint sebagai input_task_id.
Properti
Example Fidget Pixel Prototype Task Object
{
"id": "019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7",
"type": "creative-lab-fidget-pixel-prototype",
"name": "",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1757001000000,
"started_at": 1757001005000,
"finished_at": 1757001178000,
"expires_at": 1757260378000,
"preceding_tasks": 0,
"task_error": null,
"consumed_credits": 6,
"image_urls": [
"https://assets.meshy.ai/***/pixel-art.jpg?Expires=***"
]
}
- Name
- id
- Type
- string
- Description
ID tugas. Jangan bergantung pada formatnya.
- Name
- type
- Type
- string
- Description
Jenis tugas, selalu
creative-lab-fidget-pixel-prototype.
- Name
- name
- Type
- string
- Description
nameyang Anda kirim saat membuat tugas, atau""jika Anda tidak mengirimkannya.
- Name
- status
- Type
- string
- Description
Status tugas.
Nilai yang tersedia:
PENDING: menunggu dalam antreanIN_PROGRESS: sedang menghasilkan hasilSUCCEEDED: final, dengan hasilFAILED: final, dengan alasan ditask_errorCANCELED: final, tanpa hasil
- Name
- progress
- Type
- integer
- Description
Persentase pekerjaan yang telah selesai, dari
0hingga100. Nilainya0sampai tugas dimulai dan100saat berhasil.
- Name
- created_at
- Type
- timestamp
- Description
Waktu tugas dibuat, dalam milidetik Unix.
- Name
- started_at
- Type
- timestamp
- Description
Waktu sebuah worker memulai tugas, dalam milidetik Unix.
nullsampai saat itu.
- Name
- finished_at
- Type
- timestamp
- Description
Waktu tugas mencapai status final, dalam milidetik Unix.
nullsampai saat itu.
- Name
- expires_at
- Type
- timestamp
- Description
Waktu hasil tugas kedaluwarsa, dalam milidetik Unix. Nilainya 3 hari setelah
finished_at, atau 3 hari setelahcreated_atsampai tugas selesai. Untuk akun Enterprise, yang menyimpan hasil API tanpa batas waktu, nilainya sekitar 100 tahun kemudian. Lihat Asset retention.
- Name
- preceding_tasks
- Type
- integer
- Description
Posisi tugas dalam antrean selama berstatus
PENDING.1berarti tugas ini akan dimulai berikutnya.0setelah tugas keluar dari antrean, dan selalu0dalam hasil daftar.
- Name
- task_error
- Type
- object
- Description
Alasan tugas gagal.
nullkecualistatusadalahFAILED. Lihat Kesalahan.
- Name
- consumed_credits
- Type
- integer
- Description
Jumlah kredit yang dikenakan untuk tugas ini, setelah pengembalian dana (jika ada). Permintaan yang mengembalikan kesalahan tidak dikenakan biaya. Tugas yang gagal bernilai
0, karena Meshy mengembalikan dananya. Membatalkan tugas hanya mengembalikan dana selama tugas masihPENDING. Jika Meshy tidak dapat membaca biaya yang dikenakan, respons get atau stream akan menghilangkan field ini, dan permintaan daftar akan mengembalikan500. Dalam kasus tersebut, coba lagi permintaannya.
- Name
- image_urls
- Type
- array of strings
- Description
URL unduhan untuk gambar pixel-art. Array ini memiliki satu URL setelah tugas berhasil, dan kosong sebelum itu.
URL tersebut ditandatangani (signed), jadi ambillah tanpa header
Authorization. URL tetap berlaku hinggaexpires_at. Mengambil tugas tersebut lagi sebelum waktu itu akan mengembalikan URL yang sama, bukan yang baru ditandatangani. URL yang kedaluwarsa tidak dapat diperbarui, jadi unduh dan simpan berkasnya sebelum waktu itu.
Objek tugas build Fidget Pixel
Tugas build menghasilkan bagian-bagian yang dapat dicetak 3D dari tugas prototipe yang berhasil. Meshy mengambil sampel gambar pixel-art ke dalam grid dan mengembalikan bagian-bagiannya dalam satu file 3MF multi-warna.
Properties
Example Fidget Pixel Build Task Object
{
"id": "019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98",
"type": "creative-lab-fidget-pixel-build",
"name": "",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1757001300000,
"started_at": 1757001304000,
"finished_at": 1757001309000,
"expires_at": 1757260509000,
"preceding_tasks": 0,
"task_error": null,
"consumed_credits": 30,
"model_urls": {
"3mf": "https://assets.meshy.ai/***/tasks/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98/output/model.3mf?Expires=***"
}
}
- Name
- id
- Type
- string
- Description
ID tugas. Jangan bergantung pada formatnya.
- Name
- type
- Type
- string
- Description
Jenis tugas, selalu
creative-lab-fidget-pixel-build.
- Name
- name
- Type
- string
- Description
nameyang Anda kirim saat membuat tugas, atau""jika Anda tidak mengirimkannya.
- Name
- status
- Type
- string
- Description
Status tugas.
Nilai yang tersedia:
PENDING: menunggu dalam antreanIN_PROGRESS: sedang menghasilkan hasilSUCCEEDED: final, dengan hasilFAILED: final, dengan alasan ditask_errorCANCELED: final, tanpa hasil
- Name
- progress
- Type
- integer
- Description
Persentase pekerjaan yang telah selesai, dari
0hingga100. Nilainya0sampai tugas dimulai dan100saat berhasil.
- Name
- created_at
- Type
- timestamp
- Description
Waktu tugas dibuat, dalam milidetik Unix.
- Name
- started_at
- Type
- timestamp
- Description
Waktu seorang pekerja memulai tugas, dalam milidetik Unix.
nullsampai saat itu.
- Name
- finished_at
- Type
- timestamp
- Description
Waktu tugas mencapai status final, dalam milidetik Unix.
nullsampai saat itu.
- Name
- expires_at
- Type
- timestamp
- Description
Waktu hasil tugas kedaluwarsa, dalam milidetik Unix. Nilainya 3 hari setelah
finished_at, atau 3 hari setelahcreated_atsampai tugas selesai. Untuk akun Enterprise, yang menyimpan hasil API tanpa batas waktu, nilainya sekitar 100 tahun kemudian. Lihat Retensi aset.
- Name
- preceding_tasks
- Type
- integer
- Description
Posisi tugas dalam antrean selama statusnya
PENDING.1berarti tugas ini akan dimulai berikutnya.0setelah tugas keluar dari antrean, dan selalu0pada hasil daftar.
- Name
- task_error
- Type
- object
- Description
Alasan kegagalan tugas.
nullkecualistatusadalahFAILED. Lihat Kesalahan.
- Name
- consumed_credits
- Type
- integer
- Description
Jumlah kredit yang dikenakan untuk tugas, setelah pengembalian dana (jika ada). Permintaan yang mengembalikan kesalahan tidak dikenakan biaya. Tugas yang gagal bernilai
0, karena Meshy mengembalikan dananya. Membatalkan tugas hanya mengembalikan dana selama statusnyaPENDING. Jika Meshy tidak dapat membaca biaya yang dikenakan, respons get atau stream akan menghilangkan field ini, dan permintaan daftar akan mengembalikan500. Dalam kasus ini, coba ulangi permintaan tersebut.
- Name
- model_urls
- Type
- object
- Description
URL unduhan untuk hasil, dikelompokkan berdasarkan format file. Objek ini memiliki satu entri, untuk
output.formatyang Anda kirim, dan kosong sampai tugas berhasil.URL-nya ditandatangani, jadi ambil tanpa header
Authorization. URL ini tetap berlaku hinggaexpires_at. Mengambil tugas lagi sebelum itu akan mengembalikan URL yang sama, bukan yang baru ditandatangani. URL yang sudah kedaluwarsa tidak dapat diperbarui, jadi unduh dan simpan file-file tersebut sebelum itu terjadi.- Name
3mf- Type
- string
- Description
URL unduhan untuk file 3MF multi-warna. Setiap bagian memiliki badan berwarna abu-abu dan bagian atas dengan warna pixel-nya. Tersedia ketika
output.formatadalah3mf, yang merupakan nilai default.
Contoh alur end-to-end
Skrip cURL dan Python berikut menjalankan seluruh alur. Setiap skrip membuat task prototype dari sebuah foto dan menunggu hingga berhasil. Kemudian skrip tersebut membuat task build, menunggu task tersebut selesai, dan mengunduh file 3MF dari model_urls.3mf.
Skrip cURL membutuhkan curl dan jq, sedangkan skrip Python membutuhkan paket requests. Untuk menjalankan skrip, ikuti langkah-langkah berikut:
- Atur
MESHY_API_KEYke kunci API Anda. - Atur
IMAGE_PATHke path foto lokal, atauIMAGE_URLke URL gambar publik. - Opsional: Untuk mem-pixelisasi subjek selain orang, atur
PIXEL_TYPEkeother. - Jalankan skrip.
Task prototype biasanya selesai dalam beberapa menit. Task build biasanya selesai dalam waktu kurang dari satu menit.
Di aplikasi Anda, tampilkan gambar dari image_urls kepada pengguna sebelum Anda membuat task build. Jika mereka tidak menyukainya, buat task prototype lain sebagai gantinya. Dengan cara ini, Anda hanya menggunakan kredit build untuk gambar yang telah disetujui pengguna.
Complete flow
#!/usr/bin/env bash
set -euo pipefail
# Requires curl and jq. Point IMAGE_PATH at a local photo, or IMAGE_URL at a public one:
# export MESHY_API_KEY=msy_...
# export IMAGE_PATH=./portrait.jpg # or: export IMAGE_URL=https://...
# export PIXEL_TYPE=person # or: other
: "${MESHY_API_KEY:?export MESHY_API_KEY first}"
if [[ -z "${IMAGE_PATH:-}" && -z "${IMAGE_URL:-}" ]]; then
echo "export IMAGE_PATH (local file) or IMAGE_URL (public url) first" >&2
exit 1
fi
PIXEL_TYPE=${PIXEL_TYPE:-person}
BASE="https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1"
AUTH="Authorization: Bearer $MESHY_API_KEY"
# api METHOD URL [curl args...] -> prints the response body, non-zero on failure.
# Note we do not use -f/--fail: it discards the body, and the body is the only
# place the reason appears.
api() {
local method=$1 url=$2 out http_code body
shift 2
out=$(curl --silent --show-error --max-time 60 --write-out $'\n%{http_code}' \
-X "$method" "$url" -H "$AUTH" "$@") || return 1
http_code=${out##*$'\n'}
body=${out%$'\n'*}
if ((http_code >= 400)); then
echo "HTTP $http_code for $url: $body" >&2
return 1
fi
printf '%s' "$body"
}
# Each task gets its own 40-minute budget.
poll() {
local kind=$1 id=$2 delay=5 task_status deadline
deadline=$(($(date +%s) + 2400))
while :; do
if (($(date +%s) >= deadline)); then
echo "gave up waiting for $kind $id" >&2
return 1
fi
task_status=$(api GET "$BASE/$kind/$id" | jq -r '.status')
echo "$kind: $task_status"
case "$task_status" in
SUCCEEDED) return 0 ;;
FAILED | CANCELED) return 1 ;;
esac
sleep "$delay"
delay=$((delay * 2 > 30 ? 30 : delay * 2))
done
}
# Build the request body in a file. A base64 data URI must never go on the
# command line or into an exported variable - a photo of any real size will
# exceed the OS argument limit.
BODY=$(mktemp)
trap 'rm -f "$BODY"' EXIT
if [[ -n "${IMAGE_PATH:-}" ]]; then
# Declare the real type: the API accepts JPEG, PNG and WebP.
case "$(printf '%s' "${IMAGE_PATH##*.}" | tr 'A-Z' 'a-z')" in
png) MIME=image/png ;;
webp) MIME=image/webp ;;
*) MIME=image/jpeg ;;
esac
{
printf '{"type":"%s","image_url":"data:%s;base64,' "$PIXEL_TYPE" "$MIME"
base64 <"$IMAGE_PATH" | tr -d '\n'
printf '"}'
} >"$BODY"
else
jq -n --arg t "$PIXEL_TYPE" --arg u "$IMAGE_URL" \
'{type: $t, image_url: $u}' >"$BODY"
fi
# 1. Create the prototype task
PROTO_ID=$(api POST "$BASE/prototype" \
-H 'Content-Type: application/json' --data-binary @"$BODY" | jq -r '.result')
# 2. Wait for the pixel-art image (show image_urls[0] to a user in production)
poll prototype "$PROTO_ID"
# 3. Create the build task (defaults: square pieces, 32x32 grid, 8 mm, 8 colors, 15 mm tall)
jq -n --arg p "$PROTO_ID" \
'{input_task_id: $p, options: {shape: "square", grid_size: 32, piece_size_mm: 8, color_count: 8, piece_height_mm: 15}, output: {format: "3mf"}}' >"$BODY"
BUILD_ID=$(api POST "$BASE/build" \
-H 'Content-Type: application/json' --data-binary @"$BODY" | jq -r '.result')
# 4. Wait for the pieces
poll build "$BUILD_ID"
# 5. Download the 3MF. This is a signed URL: no Authorization header,
# and it stays valid for 3 days after the task finishes.
TASK=$(api GET "$BASE/build/$BUILD_ID")
curl --silent --show-error --fail --max-time 900 \
-o fidget-pixel.3mf "$(jq -r '.model_urls["3mf"]' <<<"$TASK")"
echo "Done: fidget-pixel.3mf"