Creative Lab Fidget Pixel API
किसी फ़ोटो को दो चरणों में एक मल्टी-कलर, 3D-प्रिंट करने योग्य पिक्सेल-आर्ट फ़िजेट बोर्ड में बदलें। एक प्रोटोटाइप टास्क फ़ोटो को पिक्सेल-आर्ट इमेज में बदलता है। एक बिल्ड टास्क उस इमेज को एक ही 3MF फ़ाइल में परस्पर जुड़ने वाले टुकड़ों में बदलता है, और प्रोटोटाइप टास्क की ID को input_task_id के रूप में लेता है।
POST /openapi/creative-lab/fidget-pixel/v1/prototypePOST /openapi/creative-lab/fidget-pixel/v1/build
दोनों POST endpoints के लिए पेड प्लान आवश्यक है। फ्री-प्लान अकाउंट से किया गया रिक्वेस्ट 402 लौटाता है।
Fidget Pixel प्रोटोटाइप टास्क बनाएं
एक फोटो से एक पिक्सेल-आर्ट इमेज जनरेट करता है। पीसेस बनाने के लिए, इस टास्क की ID को बिल्ड एंडपॉइंट में input_task_id के रूप में पास करें। टास्क के फ़ील्ड्स के लिए, The Fidget Pixel prototype task object देखें।
अगर आपको इमेज पसंद नहीं है, तो एक और प्रोटोटाइप टास्क बनाएं। हर टास्क अलग से चार्ज किया जाता है।
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"
}
पैरामीटर
- Name
- image_url
- Type
- string
- आवश्यक
- Description
वह फोटो जिसे पिक्सेल आर्ट में बदलना है, एक सार्वजनिक URL या एक Data URI (
data:image/jpeg;base64,<your base64-encoded image data>) के रूप में।इमेज अधिकतम 20 MB की एक JPG, JPEG, PNG, या WebP फ़ाइल होनी चाहिए। Meshy फॉर्मेट को इमेज डेटा से डिटेक्ट करता है, URL में फ़ाइल एक्सटेंशन से नहीं। बिना एक्सटेंशन वाला URL भी काम करता है, और Meshy रीडायरेक्ट्स को फॉलो करता है।
- Name
- type
- Type
- string
- आवश्यक
- Description
फोटो में क्या दिखाया गया है, जो पिक्सेल-आर्ट स्टाइल सेट करता है। दोनों स्टाइल साफ़ तौर पर अलग दिखते हैं। कोई भी अन्य वैल्यू
400रिटर्न करती है।उपलब्ध वैल्यूज़:
person: एक व्यक्ति, पोर्ट्रेट या फुल-बॉडी फोटो में। Meshy एक चिबी-स्टाइल पिक्सेल स्प्राइट बनाता है।other: कोई भी अन्य विषय, उदाहरण के लिए एक पालतू जानवर, कोई वस्तु, एक मैस्कट, लोगो, या लैंडस्केप। Meshy एक बीड-आर्ट स्टाइल पिक्सेल आइकन बनाता है।
- Name
- name
- Type
- string
- Description
टास्क के लिए एक नाम, अधिकतम 100 वर्ण। यह टास्क के
nameफ़ील्ड में वापस आता है। इससे लंबा नाम400रिटर्न करता है।
रिटर्न वैल्यू
result फ़ील्ड में नए प्रोटोटाइप टास्क की ID होती है। टास्क को प्राप्त करें या इसे स्ट्रीम करें जब तक status, SUCCEEDED न हो जाए। फिर ID को बिल्ड एंडपॉइंट में input_task_id के रूप में पास करें।
फेल्योर मोड्स
- Name
400 - Bad Request- Description
रिक्वेस्ट रन नहीं हो सकती। उदाहरण के लिए:
image_urlयाtypeमौजूद नहीं है।type,personयाotherनहीं है।- इमेज एक JPG, JPEG, PNG, या WebP फ़ाइल नहीं है।
- इमेज बहुत छोटी है, 20 MB से अधिक है, या अधिकतम पिक्सेल काउंट से अधिक है।
- Meshy इमेज डाउनलोड नहीं कर सकता, उदाहरण के लिए क्योंकि URL
404रिटर्न करता है या टाइमआउट हो जाता है। - Data URI वैलिड base64 नहीं है।
- इमेज को NSFW के रूप में फ़्लैग किया गया था।
एरर मैसेज बताता है कि उसे कौन सी समस्या मिली। रिक्वेस्ट ठीक करें, फिर इसे फिर से भेजें।
- Name
401 - Unauthorized- Description
API की मौजूद नहीं है या अमान्य है।
Authorizationहेडर जांचें।
- Name
402 - Payment Required- Description
इनमें से कोई एक लागू होता है:
- अकाउंट में पर्याप्त क्रेडिट नहीं हैं।
- API की, वर्कस्पेस, या सदस्य अपनी क्रेडिट लिमिट तक पहुंच गया।
- अकाउंट फ्री प्लान पर है।
अपने क्रेडिट और प्लान की जांच करें, फिर पुनः प्रयास करें।
- Name
403 - Forbidden- Description
आपकी टीम ने IP Filtering चालू कर रखा है, और Meshy ने इमेज को थर्ड-पार्टी इंटेलेक्चुअल प्रॉपर्टी के लिए फ़्लैग कर दिया है। कोई ऐसी इमेज भेजें जिसे इस्तेमाल करने का आपको अधिकार है।
- Name
429 - Too Many Requests- Description
इनमें से एक लिमिट पहुंच गई थी:
- आपने अपनी रेट लिमिट से अधिक रिक्वेस्ट भेजीं। कुछ सेकंड रुकें, फिर पुनः प्रयास करें। रेट लिमिट्स देखें।
- आपके बहुत अधिक टास्क कतार में हैं या चल रहे हैं। कुछ के पूरा होने का इंतज़ार करें, फिर पुनः प्रयास करें।
- बिना क्रेडिट के अनलिमिटेड प्लान पर, आप बिना क्रेडिट के चल सकने वाले टास्क की संख्या तक पहुंच गए। किसी टास्क के पूरा होने का इंतज़ार करें, या क्रेडिट जोड़ें।
- Name
500 - Internal Server Error- Description
Meshy को एक सर्वर एरर मिला, उदाहरण के लिए क्योंकि यह इमेज पर इंटेलेक्चुअल प्रॉपर्टी चेक नहीं चला सका। Meshy टास्क नहीं बनाता, और उसके द्वारा चार्ज किए गए किसी भी क्रेडिट को रिफंड कर देता है। रिक्वेस्ट को पुनः प्रयास करें।
Fidget Pixel बिल्ड टास्क बनाएं
यह एक सफल प्रोटोटाइप टास्क से 3D-प्रिंट करने योग्य टुकड़े जनरेट करता है। Meshy पिक्सेल-आर्ट इमेज को ग्रिड पर सैंपल करता है और इसे अधिकतम color_count रंगों तक कम करता है। सब्जेक्ट की हर सेल एक इंटरलॉकिंग टुकड़ा बन जाती है, और बैकग्राउंड प्रिंट नहीं होती।
परिणाम एक सिंगल मल्टी-कलर 3MF फ़ाइल है, जो रंग में प्रिंट करने के लिए तैयार है। हर टुकड़े का बॉडी ग्रे होता है और टॉप उसके पिक्सेल के रंग का होता है। इसके फ़ील्ड्स के लिए, 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"
}
पैरामीटर
- Name
- input_task_id
- Type
- string
- आवश्यक
- Description
बिल्ड करने वाले प्रोटोटाइप टास्क की ID। यह आपके अकाउंट द्वारा
POST /openapi/creative-lab/fidget-pixel/v1/prototypeसे बनाया गया टास्क होना चाहिए, जिसका स्टेटसSUCCEEDEDहो।ऐसी ID जो API से बने आपके Fidget Pixel प्रोटोटाइप टास्क में से कोई नहीं है, वह
404रिटर्न करती है, जिसमें वेब ऐप में बनाया गया प्रोटोटाइप भी शामिल है।
- Name
- name
- Type
- string
- Description
टास्क के लिए एक नाम, अधिकतम 100 वर्ण तक। यह टास्क के
nameफ़ील्ड में वापस आता है। इससे लंबा नाम400रिटर्न करता है।
options
टुकड़ों के आकार और साइज़ के लिए सेटिंग्स। हर फ़ील्ड की एक डिफ़ॉल्ट वैल्यू होती है, इसलिए केवल वे फ़ील्ड भेजें जिन्हें आप बदलना चाहते हैं। 0 फ़ील्ड की डिफ़ॉल्ट वैल्यू का उपयोग करता है। ये वही सेटिंग्स हैं जो Creative Lab वेब ऐप में हैं। बाकी शेप सेटिंग्स तय होती हैं, और Meshy इन्हें shape और piece_size_mm से सेट करता है।
- Name
- shape
- Type
- string
- डिफ़ॉल्ट square
- Description
हर टुकड़े का फुटप्रिंट। इसके अलावा कोई भी वैल्यू
400रिटर्न करती है।उपलब्ध वैल्यूज़:
square: स्क्वायर ग्रिड पर स्क्वायर टुकड़ेhex: हेक्सागोनल ग्रिड पर हेक्सागोनल टुकड़े, जिसमेंpiece_size_mm6या8पर सेट हो
- Name
- grid_size
- Type
- integer
- डिफ़ॉल्ट 32
- Description
बोर्ड की हर भुजा में ग्रिड सेल्स की संख्या,
16या32। इसके अलावा कोई भी वैल्यू400रिटर्न करती है।32ग्रिड अधिक डिटेल बनाए रखता है।16ग्रिड समान साइज़ के कम टुकड़े देता है, इसलिए बोर्ड लगभग आधा चौड़ा होता है।
- Name
- piece_size_mm
- Type
- integer
- डिफ़ॉल्ट 8
- Description
हर टुकड़े की भुजा की लंबाई मिलीमीटर में,
6,8, या10। इसके अलावा कोई भी वैल्यू400रिटर्न करती है।grid_sizeके साथ, यह प्रिंट किए गए बोर्ड का साइज़ तय करती है। उदाहरण के लिए, 8 mm टुकड़ों का32ग्रिड प्रत्येक भुजा में लगभग 26.5 cm का होता है।10,hexके साथ काम नहीं करता और400रिटर्न करता है, क्योंकि ढलान वाला हेक्स फेस ज़्यादातर कंज्यूमर FDM प्रिंटरों पर ओवरहैंग करता है।
- Name
- color_count
- Type
- integer
- डिफ़ॉल्ट 8
- Description
पिक्सेल-आर्ट पैलेट में अधिकतम रंगों की संख्या,
1से8तक। रेंज से बाहर की वैल्यू400रिटर्न करती है। प्रिंट करने के लिए, आपकोcolor_countजमा एक फिलामेंट चाहिए, एक प्रति रंग और एक ग्रे बॉडी के लिए।
- Name
- piece_height_mm
- Type
- integer
- डिफ़ॉल्ट 15
- Description
हर टुकड़े की ऊँचाई मिलीमीटर में,
10से80तक। रेंज से बाहर की वैल्यू400रिटर्न करती है।
output
परिणाम फ़ाइल के लिए सेटिंग्स।
- Name
- format
- Type
- string
- डिफ़ॉल्ट 3mf
- Description
परिणाम का फ़ाइल फॉर्मेट। इसके अलावा कोई भी वैल्यू
400रिटर्न करती है।उपलब्ध वैल्यूज़:
3mf: एक मल्टी-कलरmodel.3mfफ़ाइल, जोmodel_urls.3mfमें रिटर्न होती है
रिटर्न वैल्यू
result फ़ील्ड में नए बिल्ड टास्क की ID होती है। जब तक status, SUCCEEDED न हो जाए, तब तक टास्क प्राप्त करें या इसे स्ट्रीम करें। फिर model_urls.3mf से 3MF फ़ाइल डाउनलोड करें।
विफलता के मामले
- Name
400 - Bad Request- Description
रिक्वेस्ट नहीं चल सकती। उदाहरण के लिए:
input_task_idमौजूद नहीं है या वैध टास्क ID नहीं है।- प्रोटोटाइप टास्क का स्टेटस
SUCCEEDEDनहीं है। अगर यह अभी भी चल रहा है, तो प्रतीक्षा करें और फिर से कोशिश करें। अगर यह विफल हो गया या कैंसल कर दिया गया, तो नया प्रोटोटाइप टास्क बनाएं। - प्रोटोटाइप टास्क सफल हुआ लेकिन इसमें कोई इमेज नहीं है। नया प्रोटोटाइप टास्क बनाएं।
- कोई
optionsफ़ील्ड अपनी अनुमत वैल्यूज़ से बाहर है, उदाहरण के लिएgrid_size,16या32के अलावा कुछ और। piece_size_mm,10है औरshape,hexहै। हेक्स टुकड़े केवल 6 और 8 mm में आते हैं।output.format,3mfनहीं है।
एरर मैसेज बताता है कि कौन-सी समस्या मिली।
- Name
401 - Unauthorized- Description
API की या तो मौजूद नहीं है या अमान्य है।
Authorizationहेडर जाँचें।
- Name
402 - Payment Required- Description
इनमें से कोई एक लागू होता है:
- अकाउंट में पर्याप्त क्रेडिट नहीं हैं।
- API की, वर्कस्पेस, या सदस्य अपनी क्रेडिट सीमा तक पहुँच गया है।
- अकाउंट फ्री प्लान पर है।
अपने क्रेडिट और प्लान की जाँच करें, फिर फिर से कोशिश करें।
- Name
403 - Forbidden- Description
आपकी टीम ने IP Filtering चालू कर रखा है, और Meshy ने प्रोटोटाइप टास्क की इमेज को थर्ड-पार्टी इंटेलेक्चुअल प्रॉपर्टी के लिए फ्लैग किया है। ऐसी इमेज से प्रोटोटाइप टास्क बनाएं जिसका उपयोग करने का आपके पास अधिकार है।
- Name
404 - Not Found- Description
input_task_id, API से आपके अकाउंट द्वारा बनाए गए किसी भी Fidget Pixel प्रोटोटाइप टास्क से मेल नहीं खाता। वेब ऐप में बनाया गया प्रोटोटाइप भी404रिटर्न करता है। प्रोटोटाइप क्रिएट रिस्पॉन्स सेresultID भेजें।
- Name
429 - Too Many Requests- Description
इनमें से कोई एक सीमा पूरी हो गई:
- आपने अपनी रेट लिमिट से अधिक रिक्वेस्ट भेजी। कुछ सेकंड प्रतीक्षा करें, फिर फिर से कोशिश करें। Rate limits देखें।
- आपके बहुत अधिक टास्क कतार में हैं या चल रहे हैं। कुछ के पूरा होने की प्रतीक्षा करें, फिर फिर से कोशिश करें।
- किसी अनलिमिटेड प्लान पर जिसमें कोई क्रेडिट शेष नहीं है, आप बिना क्रेडिट के चल सकने वाले टास्क की संख्या तक पहुँच गए हैं। किसी टास्क के पूरा होने की प्रतीक्षा करें, या क्रेडिट जोड़ें।
- Name
500 - Internal Server Error- Description
Meshy को एक सर्वर एरर मिला, उदाहरण के लिए क्योंकि यह प्रोटोटाइप टास्क की इमेज पर इंटेलेक्चुअल प्रॉपर्टी चेक नहीं चला सका। Meshy टास्क नहीं बनाता, और इसने जो भी क्रेडिट चार्ज किए थे उन्हें रिफंड कर देता है। रिक्वेस्ट फिर से करें।
Fidget Pixel टास्क प्राप्त करें
यह एक prototype या build टास्क लौटाता है। पाथ का मिलान टास्क के स्टेज से होना चाहिए। /prototype/:id के ज़रिए रिक्वेस्ट किया गया build टास्क 404 लौटाता है, और इसी तरह /build/:id के ज़रिए रिक्वेस्ट किया गया prototype टास्क भी 404 लौटाता है।
फ़ील्ड्स के लिए, देखें The Fidget Pixel prototype task object और The Fidget Pixel build task object।
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=***"
}
}
पैरामीटर
- Name
- id
- Type
- path
- Description
क्रिएट रिस्पॉन्स से मिला टास्क ID।
रिटर्न
पाथ में दिए गए स्टेज के अनुसार, prototype task object या build task object।
असफलता की स्थितियाँ
- Name
400 - Bad Request- Description
idएक मान्य टास्क ID नहीं है। क्रिएट रिस्पॉन्स से मिलाresultID भेजें।
- Name
403 - Forbidden- Description
आपकी टीम में IP Filtering चालू है, और Meshy ने prototype टास्क की इमेज को थर्ड-पार्टी इंटेलेक्चुअल प्रॉपर्टी के लिए फ़्लैग किया है। Build टास्क और Enterprise प्लान वाली टीमों को यह एरर नहीं मिलता। ऐसी इमेज से prototype टास्क बनाएं जिसका उपयोग करने का आपको अधिकार है।
- Name
404 - Not Found- Description
आपके अकाउंट से जुड़ा इस ID वाला कोई Fidget Pixel टास्क नहीं है, या टास्क का स्टेज पाथ से मेल नहीं खाता। ID जाँचें, और टास्क से मेल खाने के लिए
/prototypeया/buildका उपयोग करें।
- Name
500 - Internal Server Error- Description
Meshy इंटेलेक्चुअल प्रॉपर्टी जाँच नहीं चला सका। रिक्वेस्ट फिर से भेजें।
Fidget Pixel टास्क डिलीट करें
यह एक Fidget Pixel टास्क को कैंसिल करता है। PENDING टास्क को कैंसिल करने पर उसके क्रेडिट रिफंड कर दिए जाते हैं। IN_PROGRESS टास्क बिना रिफंड के कैंसिल किया जाता है, क्योंकि एक वर्कर पहले ही उस पर काम शुरू कर चुका होता है। जिस टास्क की स्थिति अंतिम हो (SUCCEEDED, FAILED, या CANCELED), उसे कैंसिल नहीं किया जा सकता।
पाथ को टास्क के स्टेज से मेल खाना चाहिए। उदाहरण के लिए, किसी बिल्ड टास्क की ID के साथ /prototype/:id पर DELETE करने पर 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).
पाथ पैरामीटर
- Name
- id
- Type
- path
- Description
कैंसिल किए जाने वाले टास्क की ID।
रिटर्न
खाली बॉडी के साथ 204 No Content।
फेलियर मोड
- Name
400 - Bad Request- Description
इनमें से कोई एक लागू होता है:
idएक वैध टास्क ID नहीं है। क्रिएट रिस्पॉन्स से मिलीresultID भेजें।- टास्क पहले से ही अंतिम स्थिति में है (
SUCCEEDED,FAILED, याCANCELED), इसलिए इसे कैंसिल नहीं किया जा सकता।
- Name
404 - Not Found- Description
इस ID वाला कोई भी Fidget Pixel टास्क आपके अकाउंट से संबंधित नहीं है, या टास्क का स्टेज पाथ से मेल नहीं खाता। ID जांचें, और टास्क से मेल खाने के लिए
/prototypeया/buildका उपयोग करें।
Fidget Pixel टास्क को स्ट्रीम करें
किसी Fidget Pixel टास्क के अपडेट को Server-Sent Events (SSE) के रूप में स्ट्रीम करता है। पाथ टास्क के स्टेज से मेल खाना चाहिए। यदि ऐसा नहीं है, उदाहरण के लिए /prototype/:id/stream पर किसी build टास्क की ID, तो स्ट्रीम status_code: 404 के साथ एक error इवेंट भेजती है और बंद हो जाती है। जो id वैध टास्क ID नहीं है, वह 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=***"
}
}
पैरामीटर
- Name
- id
- Type
- path
- Description
क्रिएट रिस्पॉन्स से टास्क ID।
रिटर्न
prototype या build टास्क ऑब्जेक्ट्स की एक स्ट्रीम। प्रत्येक इवेंट में पूरा टास्क ऑब्जेक्ट होता है, ठीक वैसे ही जैसे Fidget Pixel टास्क प्राप्त करें इसे रिटर्न करता है। जब तक टास्क PENDING या IN_PROGRESS है, इसके आउटपुट फ़ील्ड अभी भी खाली (null, [], या {}) हैं, और finished_at null है।
यदि IP Filtering टास्क के परिणाम को ब्लॉक करता है, तो स्ट्रीम उसकी जगह एक error इवेंट भेजती है, जिसमें वह status_code होता है जो एक get रिक्वेस्ट रिटर्न करती।
Fidget Pixel टास्क सूचीबद्ध करें
यह एक समय में एक पृष्ठ पर, किसी एक चरण के आपके Fidget Pixel टास्क लौटाता है। पाथ चरण का चयन करता है। /prototype केवल prototype टास्क लौटाता है, और /build केवल 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=***"
]
}
]
पाथ पैरामीटर
- Name
- stage
- Type
- path
- आवश्यक
- Description
सूचीबद्ध करने के लिए चरण,
prototypeयाbuild।
क्वेरी पैरामीटर
- Name
- page_num
- Type
- integer
- डिफ़ॉल्ट 1
- Description
लौटाया जाने वाला पृष्ठ,
1से255तक।0पहला पृष्ठ लौटाता है।0से255के बाहर का मान400लौटाता है।
- Name
- page_size
- Type
- integer
- डिफ़ॉल्ट 10
- Description
प्रति पृष्ठ टास्क की संख्या,
100तक।101से255तक का मान 100 टास्क लौटाता है, और0डिफ़ॉल्ट का उपयोग करता है।0से255के बाहर का मान400लौटाता है।
- Name
- sort_by
- Type
- string
- डिफ़ॉल्ट -created_at
- Description
क्रम का प्रकार।
उपलब्ध मान:
-created_at: सबसे नया पहले+created_at: सबसे पुराना पहले
रिटर्न
prototype टास्क ऑब्जेक्ट्स या build टास्क ऑब्जेक्ट्स का एक ऐरे, जो पाथ में दिए गए चरण से मेल खाता है।
Fidget Pixel prototype task ऑब्जेक्ट
एक prototype task किसी फोटो को पिक्सेल-आर्ट इमेज में बदल देता है। इमेज को 3D-प्रिंट करने योग्य पीस में बदलने के लिए, टास्क की ID को input_task_id के रूप में build एंडपॉइंट को भेजें।
Properties
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। इसके फॉर्मेट पर निर्भर न रहें।
- Name
- type
- Type
- string
- Description
टास्क का प्रकार, हमेशा
creative-lab-fidget-pixel-prototype।
- Name
- name
- Type
- string
- Description
वह
nameजो आपने टास्क बनाते समय भेजा था, या अगर आपने कोई नहीं भेजा तो""।
- Name
- status
- Type
- string
- Description
टास्क की स्थिति।
उपलब्ध वैल्यू:
PENDING: कतार में प्रतीक्षा कर रहा हैIN_PROGRESS: परिणाम जनरेट किया जा रहा हैSUCCEEDED: अंतिम, परिणाम के साथFAILED: अंतिम, कारणtask_errorमें हैCANCELED: अंतिम, बिना परिणाम के
- Name
- progress
- Type
- integer
- Description
किए गए काम का प्रतिशत,
0से100तक। जब तक टास्क शुरू नहीं होता तब तक यह0रहता है और सफल होने पर100हो जाता है।
- Name
- created_at
- Type
- timestamp
- Description
टास्क बनाए जाने का समय, यूनिक्स मिलीसेकंड में।
- Name
- started_at
- Type
- timestamp
- Description
जब किसी वर्कर ने टास्क शुरू किया, वह समय, यूनिक्स मिलीसेकंड में। तब तक
nullरहता है।
- Name
- finished_at
- Type
- timestamp
- Description
टास्क के अंतिम स्थिति तक पहुँचने का समय, यूनिक्स मिलीसेकंड में। तब तक
nullरहता है।
- Name
- expires_at
- Type
- timestamp
- Description
टास्क के परिणाम की समाप्ति का समय, यूनिक्स मिलीसेकंड में। यह
finished_atके 3 दिन बाद है, या जब तक टास्क पूरा नहीं होता तब तकcreated_atके 3 दिन बाद है। Enterprise खातों के लिए, जो API परिणामों को अनिश्चित काल तक बनाए रखते हैं, यह लगभग 100 साल बाद है। एसेट रिटेंशन देखें।
- Name
- preceding_tasks
- Type
- integer
- Description
जब टास्क
PENDINGहोता है तब कतार में उसकी स्थिति।1का मतलब है कि यह अगला शुरू होगा। टास्क के कतार छोड़ने के बाद0, और लिस्ट रिजल्ट में हमेशा0।
- Name
- task_error
- Type
- object
- Description
टास्क क्यों फेल हुआ। जब तक
status,FAILEDन हो, तब तकnull। एरर देखें।
- Name
- consumed_credits
- Type
- integer
- Description
किसी भी रिफंड के बाद टास्क के लिए चार्ज किए गए क्रेडिट की संख्या। जो रिक्वेस्ट एरर लौटाती है उसके लिए चार्ज नहीं लिया जाता। फेल हुआ टास्क
0होता है, क्योंकि Meshy इसे रिफंड कर देता है। कैंसल करने पर टास्क का रिफंड तभी होता है जब वहPENDINGस्थिति में हो। अगर Meshy चार्ज को पढ़ नहीं पाता, तो get या stream रिस्पॉन्स में यह फ़ील्ड शामिल नहीं होता, और लिस्ट रिक्वेस्ट500लौटाती है। ऐसे में, रिक्वेस्ट को फिर से करें।
- Name
- image_urls
- Type
- array of strings
- Description
पिक्सेल-आर्ट इमेज के लिए डाउनलोड URL। टास्क सफल होने के बाद ऐरे में एक URL होता है, और तब तक खाली रहता है।
URL साइन किए गए होते हैं, इसलिए इन्हें बिना
Authorizationहेडर के फ़ेच करें। येexpires_atतक मान्य रहते हैं। उससे पहले टास्क को फिर से get करने पर वही URL मिलते हैं, नए साइन किए हुए नहीं। एक्सपायर हो चुके URL को फिर से रिफ्रेश नहीं किया जा सकता, इसलिए उससे पहले फ़ाइलों को डाउनलोड करके सेव कर लें।
Fidget Pixel बिल्ड टास्क ऑब्जेक्ट
एक बिल्ड टास्क एक सफल प्रोटोटाइप टास्क से 3D-प्रिंट करने योग्य पीस जनरेट करता है। Meshy पिक्सेल-आर्ट इमेज को ग्रिड पर सैंपल करता है और पीस को एक सिंगल मल्टी-कलर 3MF फ़ाइल में रिटर्न करता है।
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। इसके फॉर्मैट पर निर्भर न करें।
- Name
- type
- Type
- string
- Description
टास्क टाइप, हमेशा
creative-lab-fidget-pixel-build।
- Name
- name
- Type
- string
- Description
वह
nameजो आपने टास्क बनाते समय भेजा था, या यदि आपने कोई नहीं भेजा तो""।
- Name
- status
- Type
- string
- Description
टास्क का status।
उपलब्ध वैल्यूज़:
PENDING: क्यू में प्रतीक्षा कर रहा हैIN_PROGRESS: रिज़ल्ट जनरेट किया जा रहा हैSUCCEEDED: अंतिम, रिज़ल्ट के साथFAILED: अंतिम, कारणtask_errorमें हैCANCELED: अंतिम, बिना किसी रिज़ल्ट के
- Name
- progress
- Type
- integer
- Description
काम पूरा होने का प्रतिशत,
0से100तक। टास्क शुरू होने तक यह0रहता है और सफल होने पर100हो जाता है।
- Name
- created_at
- Type
- timestamp
- Description
टास्क बनाए जाने का समय, Unix मिलीसेकंड में।
- Name
- started_at
- Type
- timestamp
- Description
जब किसी वर्कर ने टास्क शुरू किया, उसका समय, Unix मिलीसेकंड में। तब तक
nullरहता है।
- Name
- finished_at
- Type
- timestamp
- Description
जब टास्क किसी अंतिम status पर पहुंचा, उसका समय, Unix मिलीसेकंड में। तब तक
nullरहता है।
- Name
- expires_at
- Type
- timestamp
- Description
जब टास्क का रिज़ल्ट expire होता है, Unix मिलीसेकंड में। यह
finished_atके 3 दिन बाद होता है, या टास्क के पूरा होने तकcreated_atके 3 दिन बाद। Enterprise अकाउंट्स के लिए, जो API रिज़ल्ट्स को अनिश्चित काल तक बनाए रखते हैं, यह लगभग 100 साल बाद होता है। Asset retention देखें।
- Name
- preceding_tasks
- Type
- integer
- Description
जब टास्क
PENDINGहो, उस दौरान क्यू में टास्क की स्थिति।1का मतलब है कि यह अगला शुरू होगा। टास्क के क्यू छोड़ने के बाद0, और लिस्ट रिज़ल्ट्स में हमेशा0।
- Name
- task_error
- Type
- object
- Description
टास्क क्यों फेल हुआ।
nullजब तकstatus,FAILEDन हो। एरर देखें।
- Name
- consumed_credits
- Type
- integer
- Description
टास्क के लिए चार्ज किए गए क्रेडिट की संख्या, किसी भी रिफंड के बाद। जो रिक्वेस्ट एरर रिटर्न करती है उसके लिए चार्ज नहीं लिया जाता। फेल हुए टास्क के लिए यह
0होता है, क्योंकि Meshy इसे रिफंड कर देता है। Cancel करने पर टास्क तभी रिफंड होता है जब वहPENDINGहो। अगर Meshy चार्ज नहीं पढ़ पाता, तो get या stream रिस्पॉन्स में यह फ़ील्ड शामिल नहीं होती, और लिस्ट रिक्वेस्ट500रिटर्न करती है। ऐसे में, रिक्वेस्ट को फिर से करें।
- Name
- model_urls
- Type
- object
- Description
रिज़ल्ट के लिए डाउनलोड URLs, फ़ाइल फॉर्मैट के अनुसार keyed। इस ऑब्जेक्ट में एक एंट्री होती है, आपके भेजे गए
output.formatके लिए, और टास्क के सफल होने तक यह खाली रहता है।ये URLs साइन किए गए होते हैं, इसलिए इन्हें बिना
Authorizationहेडर के fetch करें। येexpires_atतक मान्य रहते हैं। उससे पहले टास्क को फिर से get करने पर वही URLs मिलते हैं, नए साइन किए गए नहीं। एक एक्सपायर हो चुके URL को फिर से रिफ्रेश नहीं किया जा सकता, इसलिए उससे पहले फ़ाइलों को डाउनलोड करके स्टोर कर लें।- Name
3mf- Type
- string
- Description
मल्टी-कलर 3MF फ़ाइल के लिए डाउनलोड URL। प्रत्येक पीस का बॉडी ग्रे रंग का होता है और टॉप उसके पिक्सेल के रंग का। यह तब मौजूद होता है जब
output.format,3mfहो, जो डिफ़ॉल्ट है।
एंड-टू-एंड उदाहरण
निम्नलिखित cURL और Python स्क्रिप्ट पूरा फ़्लो चलाती हैं। प्रत्येक स्क्रिप्ट एक फ़ोटो से एक प्रोटोटाइप टास्क बनाती है और उसके सफल होने की प्रतीक्षा करती है। फिर यह एक बिल्ड टास्क बनाती है, उस टास्क की प्रतीक्षा करती है, और model_urls.3mf से 3MF फ़ाइल डाउनलोड करती है।
cURL स्क्रिप्ट को curl और jq की ज़रूरत होती है, और Python स्क्रिप्ट को requests पैकेज की ज़रूरत होती है। कोई स्क्रिप्ट चलाने के लिए, इन चरणों का पालन करें:
MESHY_API_KEYको अपनी API की पर सेट करें।IMAGE_PATHको किसी लोकल फ़ोटो के पथ पर, याIMAGE_URLको किसी सार्वजनिक इमेज URL पर सेट करें।- वैकल्पिक: किसी व्यक्ति के अलावा किसी अन्य विषय को पिक्सेलाइज़ करने के लिए,
PIXEL_TYPEकोotherपर सेट करें। - स्क्रिप्ट चलाएं।
एक प्रोटोटाइप टास्क आमतौर पर कुछ ही मिनटों में समाप्त हो जाता है। एक बिल्ड टास्क आमतौर पर एक मिनट से भी कम समय में समाप्त हो जाता है।
अपने ऐप में, बिल्ड टास्क बनाने से पहले image_urls से इमेज अपने उपयोगकर्ता को दिखाएं। अगर उन्हें यह पसंद नहीं है, तो इसके बजाय एक और प्रोटोटाइप टास्क बनाएं। इस तरह, आप केवल उसी इमेज पर बिल्ड क्रेडिट खर्च करते हैं जिसे वे स्वीकृत करते हैं।
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"