Creative Lab Fidget Pixel API
Förvandla ett foto till en flerfärgad, 3D-utskrivbar pixelkonst-fidgetbräda i två steg. En prototypuppgift förvandlar fotot till en pixelkonstbild. En bygguppgift förvandlar den bilden till sammanlänkande delar i en enda 3MF-fil, och tar prototypuppgiftens ID som input_task_id.
POST /openapi/creative-lab/fidget-pixel/v1/prototypePOST /openapi/creative-lab/fidget-pixel/v1/build
Båda POST-endpointerna kräver en betalplan. En förfrågan från ett konto med gratisplan returnerar 402.
Skapa en Fidget Pixel-prototypuppgift
Genererar en pixelkonstbild från ett foto. För att bygga delarna skickar du den här uppgiftens ID till build-endpointen som input_task_id. För uppgiftens fält, se The Fidget Pixel prototype task object.
Om du inte gillar bilden kan du skapa en ny prototypuppgift. Varje uppgift debiteras separat.
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"
}
Parametrar
- Name
- image_url
- Type
- string
- Obligatorisk
- Description
Fotot som ska omvandlas till pixelkonst, som en offentlig URL eller en data-URI (
data:image/jpeg;base64,<dina base64-kodade bilddata>).Bilden måste vara en JPG-, JPEG-, PNG- eller WebP-fil på högst 20 MB. Meshy identifierar formatet utifrån bilddata, inte utifrån filändelsen i URL:en. En URL utan filändelse fungerar, och Meshy följer omdirigeringar.
- Name
- type
- Type
- string
- Obligatorisk
- Description
Vad fotot visar, vilket avgör pixelkonststilen. De två stilarna ser tydligt olika ut. Alla andra värden returnerar
400.Tillgängliga värden:
person: en person, på ett porträtt eller helkroppsfoto. Meshy ritar en pixelfigur i chibi-stil.other: alla andra motiv, till exempel ett husdjur, ett föremål, en maskot, en logotyp eller ett landskap. Meshy ritar en pixelikon i pärlkonststil.
- Name
- name
- Type
- string
- Description
Ett namn för uppgiften, upp till 100 tecken. Det returneras i uppgiftens fält
name. Ett längre namn returnerar400.
Returvärden
Fältet result innehåller ID:t för den nya prototypuppgiften. Hämta uppgiften eller strömma den tills status är SUCCEEDED. Skicka sedan ID:t till build-endpointen som input_task_id.
Felscenarier
- Name
400 - Bad Request- Description
Begäran kan inte köras. Till exempel:
image_urlellertypesaknas.typeär varkenpersonellerother.- Bilden är inte en JPG-, JPEG-, PNG- eller WebP-fil.
- Bilden är för liten, över 20 MB, eller över det maximala antalet pixlar.
- Meshy kan inte ladda ner bilden, till exempel för att URL:en returnerar
404eller tidsgränsen löper ut. - Data-URI:n är inte giltig base64.
- Bilden flaggades som olämplig (NSFW).
Felmeddelandet anger vilket problem som hittades. Åtgärda begäran och skicka den igen.
- Name
401 - Unauthorized- Description
API-nyckeln saknas eller är ogiltig. Kontrollera
Authorization-huvudet.
- Name
402 - Payment Required- Description
Något av följande gäller:
- Kontot har inte tillräckligt med credits.
- API-nyckeln, arbetsytan eller medlemmen har nått sin creditgräns.
- Kontot använder den kostnadsfria planen.
Kontrollera dina credits och din plan och försök sedan igen.
- Name
403 - Forbidden- Description
Ditt team har IP Filtering aktiverat, och Meshy har flaggat bilden för tredjepartsrättigheter. Skicka en bild som du har rätt att använda.
- Name
429 - Too Many Requests- Description
En av följande gränser har nåtts:
- Du har skickat fler förfrågningar än vad din hastighetsgräns tillåter. Vänta några sekunder och försök sedan igen. Se Rate limits.
- För många av dina uppgifter är köade eller pågående. Vänta tills några är klara och försök sedan igen.
- På en plan utan gräns men utan kvarvarande credits har du nått det antal uppgifter som kan köras utan credits. Vänta tills en uppgift är klar, eller lägg till credits.
- Name
500 - Internal Server Error- Description
Meshy stötte på ett serverfel, till exempel för att det inte kunde köra kontrollen av immateriella rättigheter på bilden. Meshy skapar inte uppgiften och återbetalar eventuella credits som debiterats. Försök igen med begäran.
Skapa en Fidget Pixel-byggnadsuppgift
Genererar de 3D-utskrivbara delarna från en lyckad prototyp-uppgift. Meshy samplar pixelbilden på rutnätet och reducerar den till högst color_count färger. Varje cell i motivet blir en sammanfogande bit, och bakgrunden skrivs inte ut.
Resultatet är en enda flerfärgad 3MF-fil, redo att skrivas ut i färg. Varje bit har en grå kropp och en topp i sin pixels färg. För dess fält, se 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"
}
Parametrar
- Name
- input_task_id
- Type
- string
- Obligatorisk
- Description
ID:t för prototyp-uppgiften som ska byggas. Det måste vara en uppgift som ditt konto skapade med
POST /openapi/creative-lab/fidget-pixel/v1/prototype, med statusenSUCCEEDED.Ett ID som inte är en av dina Fidget Pixel-prototypuppgifter från API:et returnerar
404, inklusive en prototyp gjord i webbappen.
- Name
- name
- Type
- string
- Description
Ett namn för uppgiften, upp till 100 tecken. Det kommer tillbaka i uppgiftens
name-fält. Ett längre namn returnerar400.
options
Inställningar för formen och storleken på bitarna. Varje fält har ett standardvärde, så skicka bara de fält du vill ändra. En 0 använder fältets standardvärde. Dessa är samma inställningar som i Creative Lab-webbappen. Andra forminställningar är fasta, och Meshy ställer in dem utifrån shape och piece_size_mm.
- Name
- shape
- Type
- string
- standard square
- Description
Avtrycket för varje bit. Alla andra värden returnerar
400.Tillgängliga värden:
square: fyrkantiga bitar på ett fyrkantigt rutnäthex: hexagonala bitar på ett hexagonalt rutnät, medpiece_size_mmsatt till6eller8
- Name
- grid_size
- Type
- integer
- standard 32
- Description
Antalet rutnätsceller längs varje sida av brädet,
16eller32. Alla andra värden returnerar400. Ett32-rutnät behåller mer detalj. Ett16-rutnät ger färre bitar av samma storlek, så brädet blir ungefär hälften så brett.
- Name
- piece_size_mm
- Type
- integer
- standard 8
- Description
Kantlängden för varje bit i millimeter,
6,8eller10. Alla andra värden returnerar400. Tillsammans medgrid_sizebestämmer det storleken på det utskrivna brädet. Till exempel är ett32-rutnät med 8 mm-bitar ungefär 26,5 cm per sida.10fungerar inte medhexoch returnerar400, eftersom den sneda hexagonala ytan hänger ut på de flesta konsumentens FDM-skrivare.
- Name
- color_count
- Type
- integer
- standard 8
- Description
Det maximala antalet färger i pixelbildspaletten, från
1till8. Ett värde utanför intervallet returnerar400. För att skriva ut behöver du upp tillcolor_countplus ett filament, ett per färg och ett för de grå kropparna.
- Name
- piece_height_mm
- Type
- integer
- standard 15
- Description
Höjden på varje bit i millimeter, från
10till80. Ett värde utanför intervallet returnerar400.
output
Inställningar för resultatfilen.
- Name
- format
- Type
- string
- standard 3mf
- Description
Filformatet för resultatet. Alla andra värden returnerar
400.Tillgängliga värden:
3mf: en flerfärgadmodel.3mf-fil, returneras imodel_urls.3mf
Returnerar
Fältet result innehåller ID:t för den nya byggnadsuppgiften. Hämta uppgiften eller strömma den tills status är SUCCEEDED. Ladda sedan ner 3MF-filen från model_urls.3mf.
Felscenarion
- Name
400 - Bad Request- Description
Begäran kan inte köras. Till exempel:
input_task_idsaknas eller är inte ett giltigt uppgifts-ID.- Prototyp-uppgiftens status är inte
SUCCEEDED. Om den fortfarande körs, vänta och försök igen. Om den misslyckades eller avbröts, skapa en ny prototyp-uppgift. - Prototyp-uppgiften lyckades men saknar bild. Skapa en ny prototyp-uppgift.
- Ett
options-fält ligger utanför sina tillåtna värden, till exempel ettgrid_sizesom inte är16eller32. piece_size_mmär10ochshapeärhex. Hexagonala bitar finns bara i 6 och 8 mm.output.formatär inte3mf.
Felmeddelandet anger vilket problem det hittade.
- Name
401 - Unauthorized- Description
API-nyckeln saknas eller är ogiltig. Kontrollera
Authorization-huvudet.
- Name
402 - Payment Required- Description
Något av följande gäller:
- Kontot har inte tillräckligt med credits.
- API-nyckeln, arbetsytan eller medlemmen nådde sin credit-gräns.
- Kontot har den kostnadsfria planen.
Kontrollera dina credits och din plan, och försök sedan igen.
- Name
403 - Forbidden- Description
Ditt team har IP Filtering aktiverat, och Meshy flaggade prototyp-uppgiftens bild för tredjepartsimmateriell egendom. Skapa en prototyp-uppgift från en bild du har rättigheter att använda.
- Name
404 - Not Found- Description
input_task_idmatchar ingen Fidget Pixel-prototypuppgift som ditt konto skapat med API:et. En prototyp gjord i webbappen returnerar också404. Skickaresult-ID:t från ett svar på skapandet av en prototyp.
- Name
429 - Too Many Requests- Description
En av dessa gränser nåddes:
- Du skickade fler förfrågningar än din hastighetsgräns tillåter. Vänta några sekunder och försök igen. Se Rate limits.
- För många av dina uppgifter är köade eller körs. Vänta tills några är klara och försök sedan igen.
- På en obegränsad plan utan credits kvar nådde du antalet uppgifter som kan köras utan credits. Vänta tills en uppgift är klar, eller lägg till credits.
- Name
500 - Internal Server Error- Description
Meshy stötte på ett serverfel, till exempel för att det inte kunde köra immaterialrättskontrollen på prototyp-uppgiftens bild. Meshy skapar inte uppgiften, och återbetalar eventuella credits den debiterade. Försök med begäran igen.
Hämta en Fidget Pixel-uppgift
Returnerar en prototyp- eller bygguppgift. Sökvägen måste matcha uppgiftens steg. En bygguppgift som efterfrågas via /prototype/:id returnerar 404, och detsamma gäller en prototypuppgift som efterfrågas via /build/:id.
För fälten, se Fidget Pixel-prototypuppgiftsobjektet och Fidget Pixel-byggguppgiftsobjektet.
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=***"
}
}
Parametrar
- Name
- id
- Type
- path
- Description
Uppgifts-ID:t från skapandesvaret.
Returnerar
Prototypuppgiftsobjektet eller byggguppgiftsobjektet, beroende på steget i sökvägen.
Felscenarier
- Name
400 - Bad Request- Description
idär inte ett giltigt uppgifts-ID. Skickaresult-ID:t från skapandesvaret.
- Name
403 - Forbidden- Description
Ditt team har IP-filtrering aktiverat, och Meshy flaggade prototypuppgiftens bild för immateriella rättigheter som tillhör tredje part. Byggguppgifter och team på Enterprise-planen får inte detta fel. Skapa en prototypuppgift från en bild du har rättigheter att använda.
- Name
404 - Not Found- Description
Ingen Fidget Pixel-uppgift med detta ID tillhör ditt konto, eller så matchar inte uppgiftens steg sökvägen. Kontrollera ID:t, och använd
/prototypeeller/buildför att matcha uppgiften.
- Name
500 - Internal Server Error- Description
Meshy kunde inte köra kontrollen av immateriella rättigheter. Försök igen med förfrågan.
Ta bort en Fidget Pixel-uppgift
Avbryter en Fidget Pixel-uppgift. Att avbryta en PENDING-uppgift återbetalar dess credits. En IN_PROGRESS-uppgift avbryts utan återbetalning, eftersom en arbetare redan har påbörjat den. En uppgift med en slutgiltig status (SUCCEEDED, FAILED eller CANCELED) kan inte avbrytas.
Sökvägen måste matcha uppgiftens steg. Till exempel returnerar DELETE på /prototype/:id med ett bygguppgifts-ID 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).
Sökvägsparametrar
- Name
- id
- Type
- path
- Description
ID:t för uppgiften som ska avbrytas.
Returnerar
204 No Content med en tom kropp.
Felscenarier
- Name
400 - Bad Request- Description
Ett av följande gäller:
idär inte ett giltigt uppgifts-ID. Skickaresult-ID:t från skapandesvaret.- Uppgiften har redan en slutgiltig status (
SUCCEEDED,FAILEDellerCANCELED), så den kan inte avbrytas.
- Name
404 - Not Found- Description
Ingen Fidget Pixel-uppgift med detta ID tillhör ditt konto, eller så matchar inte uppgiftens steg sökvägen. Kontrollera ID:t och använd
/prototypeeller/buildför att matcha uppgiften.
Strömma en Fidget Pixel-uppgift
Strömmar uppdateringar för en Fidget Pixel-uppgift som Server-Sent Events (SSE). Sökvägen måste matcha uppgiftens steg. Om den inte gör det, till exempel en build-uppgifts ID på /prototype/:id/stream, skickar strömmen en error-händelse med status_code: 404 och stängs. Ett id som inte är ett giltigt uppgifts-ID gör samma sak med 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=***"
}
}
Parametrar
- Name
- id
- Type
- path
- Description
Uppgifts-ID från skapandesvaret.
Returnerar
En ström av prototype- eller build-uppgiftsobjekt. Varje händelse innehåller det fullständiga uppgiftsobjektet, så som Hämta en Fidget Pixel-uppgift returnerar det. Medan uppgiften är PENDING eller IN_PROGRESS är dess utdatafält fortfarande tomma (null, [] eller {}), och finished_at är null.
Om IP-filtrering blockerar uppgiftens resultat skickar strömmen istället en error-händelse, med den status_code som ett get-anrop skulle returnera.
Lista Fidget Pixel-uppgifter
Returnerar dina Fidget Pixel-uppgifter för ett stadium, en sida i taget. Sökvägen väljer stadiet. /prototype returnerar endast prototyp-uppgifter, och /build returnerar endast build-uppgifter.
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=***"
]
}
]
Sökvägsparametrar
- Name
- stage
- Type
- path
- Obligatorisk
- Description
Stadiet som ska listas,
prototypeellerbuild.
Frågeparametrar
- Name
- page_num
- Type
- integer
- standard 1
- Description
Sidan som ska returneras, från
1till255.0returnerar den första sidan. Ett värde utanför0till255returnerar400.
- Name
- page_size
- Type
- integer
- standard 10
- Description
Antal uppgifter per sida, upp till
100. Ett värde från101till255returnerar 100 uppgifter, och0använder standardvärdet. Ett värde utanför0till255returnerar400.
- Name
- sort_by
- Type
- string
- standard -created_at
- Description
Sorteringsordningen.
Tillgängliga värden:
-created_at: nyaste först+created_at: äldsta först
Returnerar
En array med prototyp-uppgiftsobjekt eller build-uppgiftsobjekt, som matchar stadiet i sökvägen.
Fidget Pixel-prototyptaskobjektet
En prototyptask omvandlar ett foto till en pixelkonstbild. För att omvandla bilden till 3D-utskrivbara delar skickar du taskens ID till build-endpointen som input_task_id.
Egenskaper
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
Task-ID:t. Förlita dig inte på dess format.
- Name
- type
- Type
- string
- Description
Tasktypen, alltid
creative-lab-fidget-pixel-prototype.
- Name
- name
- Type
- string
- Description
Det
namedu skickade när du skapade tasken, eller""om du inte skickade något.
- Name
- status
- Type
- string
- Description
Taskens status.
Tillgängliga värden:
PENDING: väntar i könIN_PROGRESS: genererar resultatetSUCCEEDED: slutgiltig, med resultatetFAILED: slutgiltig, med orsaken itask_errorCANCELED: slutgiltig, utan resultat
- Name
- progress
- Type
- integer
- Description
Procentandel av arbetet som utförts, från
0till100. Det är0tills tasken startar och100när den lyckas.
- Name
- created_at
- Type
- timestamp
- Description
Tidpunkten då tasken skapades, i Unix-millisekunder.
- Name
- started_at
- Type
- timestamp
- Description
Tidpunkten då en worker startade tasken, i Unix-millisekunder.
nullfram till dess.
- Name
- finished_at
- Type
- timestamp
- Description
Tidpunkten då tasken nådde en slutgiltig status, i Unix-millisekunder.
nullfram till dess.
- Name
- expires_at
- Type
- timestamp
- Description
Tidpunkten då taskens resultat upphör att gälla, i Unix-millisekunder. Det är 3 dagar efter
finished_at, eller 3 dagar eftercreated_attills tasken avslutas. För Enterprise-konton, som behåller API-resultat på obestämd tid, är det ungefär 100 år senare. Se Tillgångslagring.
- Name
- preceding_tasks
- Type
- integer
- Description
Taskens position i kön medan den är
PENDING.1betyder att den startar härnäst.0efter att tasken lämnar kön, och alltid0i listresultat.
- Name
- task_error
- Type
- object
- Description
Varför tasken misslyckades.
nullom intestatusärFAILED. Se Fel.
- Name
- consumed_credits
- Type
- integer
- Description
Antal credits som debiterats för tasken, efter eventuell återbetalning. En begäran som returnerar ett fel debiteras inte. En misslyckad task är
0, eftersom Meshy återbetalar den. Att avbryta återbetalar en task endast medan den ärPENDING. Om Meshy inte kan läsa debiteringen utelämnar ett get- eller stream-svar fältet, och en listbegäran returnerar500. I så fall, försök igen med begäran.
- Name
- image_urls
- Type
- array of strings
- Description
Nedladdnings-URL:er för pixelkonstbilden. Arrayen har en URL när tasken har lyckats, och är tom fram till dess.
URL:erna är signerade, så hämta dem utan en
Authorization-header. De förblir giltiga fram tillexpires_at. Att hämta tasken igen innan dess returnerar samma URL:er, inte nyligen signerade sådana. En utgången URL kan inte förnyas, så ladda ner och lagra filerna innan dess.
Fidget Pixel-byggtaskobjektet
En byggtask genererar de 3D-utskrivbara delarna från en lyckad prototyptask. Meshy samplar pixel-art-bilden till rutnätet och returnerar delarna i en enda flerfärgad 3MF-fil.
Egenskaper
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
Task-ID:t. Lita inte på dess format.
- Name
- type
- Type
- string
- Description
Tasktypen, alltid
creative-lab-fidget-pixel-build.
- Name
- name
- Type
- string
- Description
Det
namedu skickade när du skapade tasken, eller""om du inte skickade något.
- Name
- status
- Type
- string
- Description
Taskens status.
Tillgängliga värden:
PENDING: väntar i könIN_PROGRESS: genererar resultatetSUCCEEDED: slutgiltig, med resultatetFAILED: slutgiltig, med anledningen itask_errorCANCELED: slutgiltig, utan resultat
- Name
- progress
- Type
- integer
- Description
Procentandel av arbetet som är klart, från
0till100. Det är0tills tasken startar och100när den lyckas.
- Name
- created_at
- Type
- timestamp
- Description
Tidpunkt då tasken skapades, i Unix-millisekunder.
- Name
- started_at
- Type
- timestamp
- Description
Tidpunkt då en worker startade tasken, i Unix-millisekunder.
nullfram till dess.
- Name
- finished_at
- Type
- timestamp
- Description
Tidpunkt då tasken nådde en slutgiltig status, i Unix-millisekunder.
nullfram till dess.
- Name
- expires_at
- Type
- timestamp
- Description
Tidpunkt då taskens resultat upphör att gälla, i Unix-millisekunder. Det är 3 dagar efter
finished_at, eller 3 dagar eftercreated_attills tasken är klar. För Enterprise-konton, som behåller API-resultat permanent, är det cirka 100 år senare. Se Tillgångslagring.
- Name
- preceding_tasks
- Type
- integer
- Description
Taskens position i kön medan den är
PENDING.1betyder att den startar härnäst.0efter att tasken lämnat kön, och alltid0i listresultat.
- Name
- task_error
- Type
- object
- Description
Varför tasken misslyckades.
nullom intestatusärFAILED. Se Fel.
- Name
- consumed_credits
- Type
- integer
- Description
Antal credits som debiterats för tasken, efter eventuell återbetalning. En förfrågan som returnerar ett fel debiteras inte. En misslyckad task är
0, eftersom Meshy återbetalar den. Att avbryta återbetalar en task endast medan den ärPENDING. Om Meshy inte kan läsa debiteringen utelämnas fältet i ett get- eller stream-svar, och en listförfrågan returnerar500. Försök i så fall igen med förfrågan.
- Name
- model_urls
- Type
- object
- Description
Nedladdnings-URL:er för resultatet, med filformat som nyckel. Objektet har en post, för det
output.formatdu skickade, och är tomt tills tasken lyckas.URL:erna är signerade, så hämta dem utan en
Authorization-header. De förblir giltiga fram tillexpires_at. Att hämta tasken igen innan dess returnerar samma URL:er, inte nysignerade sådana. En utgången URL kan inte förnyas, så ladda ner och spara filerna innan dess.- Name
3mf- Type
- string
- Description
Nedladdnings-URL för den flerfärgade 3MF-filen. Varje del har en grå kropp och en topp i sin pixels färg. Finns när
output.formatär3mf, vilket är standardvärdet.
Fullständigt exempel
Följande cURL- och Python-skript kör hela flödet. Varje skript skapar en prototyp-task från ett foto och väntar på att den ska lyckas. Sedan skapar det en build-task, väntar på den tasken och laddar ner 3MF-filen från model_urls.3mf.
cURL-skriptet behöver curl och jq, och Python-skriptet behöver paketet requests. Följ dessa steg för att köra ett skript:
- Sätt
MESHY_API_KEYtill din API-nyckel. - Sätt
IMAGE_PATHtill sökvägen för ett lokalt foto, ellerIMAGE_URLtill en publik bild-URL. - Valfritt: För att pixelera ett annat motiv än en person, sätt
PIXEL_TYPEtillother. - Kör skriptet.
En prototyp-task blir vanligtvis klar inom några minuter. En build-task blir vanligtvis klar på gott och väl under en minut.
I din app, visa bilden från image_urls för din användare innan du skapar build-tasken. Om de inte gillar den, skapa en ny prototyp-task istället. På så sätt spenderar du build-credits endast på en bild de godkänner.
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"