API Creative Lab Fidget Pixel
Trasforma una foto in una tavola fidget pixel-art multicolore, stampabile in 3D, in due fasi. Un'attività di prototipo trasforma la foto in un'immagine pixel-art. Un'attività di build trasforma quell'immagine in pezzi incastrabili in un unico file 3MF, e prende l'ID dell'attività di prototipo come input_task_id.
POST /openapi/creative-lab/fidget-pixel/v1/prototypePOST /openapi/creative-lab/fidget-pixel/v1/build
Entrambi gli endpoint POST richiedono un piano a pagamento. Una richiesta da un account con piano gratuito restituisce 402.
Crea un'attività di prototipo Fidget Pixel
Genera un'immagine pixel-art da una foto. Per costruire i pezzi, passa l'ID di questa attività all'endpoint di build come input_task_id. Per i campi dell'attività, vedi L'oggetto attività di prototipo Fidget Pixel.
Se l'immagine non ti piace, crea un'altra attività di prototipo. Ogni attività viene addebitata separatamente.
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"
}
Parametri
- Name
- image_url
- Type
- string
- Obbligatorio
- Description
La foto da trasformare in pixel art, come URL pubblico o Data URI (
data:image/jpeg;base64,<i tuoi dati immagine codificati in base64>).L'immagine deve essere un file JPG, JPEG, PNG o WebP di al massimo 20 MB. Meshy rileva il formato dai dati dell'immagine, non dall'estensione del file nell'URL. Un URL senza estensione funziona, e Meshy segue i redirect.
- Name
- type
- Type
- string
- Obbligatorio
- Description
Cosa mostra la foto, il che determina lo stile della pixel art. I due stili appaiono chiaramente diversi. Qualsiasi altro valore restituisce
400.Valori disponibili:
person: una persona, in un ritratto o in una foto a figura intera. Meshy disegna uno sprite pixel in stile chibi.other: qualsiasi altro soggetto, ad esempio un animale domestico, un oggetto, una mascotte, un logo o un paesaggio. Meshy disegna un'icona pixel in stile bead-art.
- Name
- name
- Type
- string
- Description
Un nome per l'attività, fino a 100 caratteri. Viene restituito nel campo
namedell'attività. Un nome più lungo restituisce400.
Restituisce
Il campo result contiene l'ID della nuova attività di prototipo. Recupera l'attività o trasmettila in streaming finché status non è SUCCEEDED. Quindi passa l'ID all'endpoint di build come input_task_id.
Modalità di errore
- Name
400 - Bad Request- Description
La richiesta non può essere eseguita. Ad esempio:
- Manca
image_urlotype. typenon èpersonnéother.- L'immagine non è un file JPG, JPEG, PNG o WebP.
- L'immagine è troppo piccola, supera i 20 MB o supera il numero massimo di pixel.
- Meshy non riesce a scaricare l'immagine, ad esempio perché l'URL restituisce
404o va in timeout. - Il Data URI non è una base64 valida.
- L'immagine è stata segnalata come NSFW.
Il messaggio di errore indica quale problema è stato rilevato. Correggi la richiesta, quindi inviala di nuovo.
- Manca
- Name
401 - Unauthorized- Description
La chiave API è mancante o non valida. Controlla l'header
Authorization.
- Name
402 - Payment Required- Description
Si applica una di queste condizioni:
- L'account non ha crediti sufficienti.
- La chiave API, lo spazio di lavoro o il membro ha raggiunto il proprio limite di crediti.
- L'account è nel piano gratuito.
Controlla i tuoi crediti e il tuo piano, quindi riprova.
- Name
403 - Forbidden- Description
Il tuo team ha attivato il Filtraggio IP, e Meshy ha segnalato l'immagine per proprietà intellettuale di terzi. Invia un'immagine che hai il diritto di utilizzare.
- Name
429 - Too Many Requests- Description
È stato raggiunto uno di questi limiti:
- Hai inviato più richieste di quante il tuo limite di frequenza consenta. Attendi qualche secondo, quindi riprova. Vedi Limiti di frequenza.
- Troppe delle tue attività sono in coda o in esecuzione. Attendi che alcune terminino, quindi riprova.
- Su un piano illimitato senza crediti residui, hai raggiunto il numero di attività che possono essere eseguite senza crediti. Attendi che un'attività termini, oppure aggiungi crediti.
- Name
500 - Internal Server Error- Description
Meshy ha riscontrato un errore del server, ad esempio perché non è riuscito a eseguire il controllo di proprietà intellettuale sull'immagine. Meshy non crea l'attività, e rimborsa eventuali crediti addebitati. Riprova la richiesta.
Crea un task di build Fidget Pixel
Genera i pezzi stampabili in 3D a partire da un task di prototipo riuscito. Meshy campiona l'immagine pixel art sulla griglia e la riduce ad al massimo color_count colori. Ogni cella del soggetto diventa un pezzo a incastro, e lo sfondo non viene stampato.
Il risultato è un singolo file 3MF multicolore, pronto per la stampa a colori. Ogni pezzo ha un corpo grigio e una parte superiore del colore del suo pixel. Per i suoi campi, vedi L'oggetto task di build Fidget Pixel.
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"
}
Parametri
- Name
- input_task_id
- Type
- string
- Obbligatorio
- Description
L'ID del task di prototipo da compilare. Deve essere un task creato dal tuo account con
POST /openapi/creative-lab/fidget-pixel/v1/prototype, con statoSUCCEEDED.Un ID che non corrisponde a uno dei tuoi task di prototipo Fidget Pixel ottenuti tramite API restituisce
404, incluso un prototipo creato nell'app web.
- Name
- name
- Type
- string
- Description
Un nome per il task, fino a 100 caratteri. Viene restituito nel campo
namedel task. Un nome più lungo restituisce400.
options
Impostazioni per la forma e la dimensione dei pezzi. Ogni campo ha un valore predefinito, quindi invia solo i campi che vuoi modificare. Uno 0 utilizza il valore predefinito del campo. Sono le stesse impostazioni presenti nell'app web Creative Lab. Altre impostazioni di forma sono fisse e Meshy le imposta in base a shape e piece_size_mm.
- Name
- shape
- Type
- string
- predefinito square
- Description
L'ingombro di ogni pezzo. Qualsiasi altro valore restituisce
400.Valori disponibili:
square: pezzi quadrati su una griglia quadratahex: pezzi esagonali su una griglia esagonale, conpiece_size_mmimpostato a6o8
- Name
- grid_size
- Type
- integer
- predefinito 32
- Description
Il numero di celle della griglia lungo ciascun lato della tavola,
16o32. Qualsiasi altro valore restituisce400. Una griglia32mantiene più dettagli. Una griglia16produce meno pezzi della stessa dimensione, quindi la tavola è larga circa la metà.
- Name
- piece_size_mm
- Type
- integer
- predefinito 8
- Description
La lunghezza del lato di ogni pezzo in millimetri,
6,8o10. Qualsiasi altro valore restituisce400. Insieme agrid_size, determina la dimensione della tavola stampata. Ad esempio, una griglia32di pezzi da 8 mm misura circa 26,5 cm per lato.10non funziona conhexe restituisce400, perché la faccia esagonale inclinata sporge sulla maggior parte delle stampanti FDM consumer.
- Name
- color_count
- Type
- integer
- predefinito 8
- Description
Il numero massimo di colori nella tavolozza pixel art, da
1a8. Un valore fuori dall'intervallo restituisce400. Per stampare, hai bisogno di un numero di filamenti pari acolor_countpiù uno: uno per colore e uno per i corpi grigi.
- Name
- piece_height_mm
- Type
- integer
- predefinito 15
- Description
L'altezza di ogni pezzo in millimetri, da
10a80. Un valore fuori dall'intervallo restituisce400.
output
Impostazioni per il file di risultato.
- Name
- format
- Type
- string
- predefinito 3mf
- Description
Il formato file del risultato. Qualsiasi altro valore restituisce
400.Valori disponibili:
3mf: un singolo file multicoloremodel.3mf, restituito inmodel_urls.3mf
Restituisce
Il campo result contiene l'ID del nuovo task di build. Recupera il task o trasmettilo in streaming finché status non diventa SUCCEEDED. Quindi scarica il file 3MF da model_urls.3mf.
Modalità di errore
- Name
400 - Bad Request- Description
La richiesta non può essere eseguita. Ad esempio:
input_task_idè mancante o non è un ID di task valido.- Lo stato del task di prototipo non è
SUCCEEDED. Se è ancora in esecuzione, attendi e riprova. Se è fallito o è stato annullato, crea un nuovo task di prototipo. - Il task di prototipo è riuscito ma non ha un'immagine. Crea un nuovo task di prototipo.
- Un campo di
optionsè fuori dai valori consentiti, ad esempio ungrid_sizediverso da16o32. piece_size_mmè10eshapeèhex. I pezzi esagonali sono disponibili solo in 6 e 8 mm.output.formatnon è3mf.
Il messaggio di errore indica quale problema è stato rilevato.
- Name
401 - Unauthorized- Description
La chiave API è mancante o non valida. Controlla l'header
Authorization.
- Name
402 - Payment Required- Description
Si applica uno dei seguenti casi:
- L'account non ha crediti sufficienti.
- La chiave API, lo spazio di lavoro o il membro ha raggiunto il proprio limite di crediti.
- L'account è sul piano gratuito.
Controlla i tuoi crediti e il tuo piano, poi riprova.
- Name
403 - Forbidden- Description
Il tuo team ha attivato IP Filtering e Meshy ha segnalato l'immagine del task di prototipo per proprietà intellettuale di terzi. Crea un task di prototipo partendo da un'immagine di cui hai i diritti d'uso.
- Name
404 - Not Found- Description
input_task_idnon corrisponde a nessun task di prototipo Fidget Pixel creato dal tuo account tramite API. Anche un prototipo creato nell'app web restituisce404. Invia l'IDresultottenuto da una risposta di creazione del prototipo.
- Name
429 - Too Many Requests- Description
È stato raggiunto uno di questi limiti:
- Hai inviato più richieste di quante ne consenta il tuo limite di frequenza. Attendi qualche secondo, poi riprova. Vedi Limiti di frequenza.
- Troppi tuoi task sono in coda o in esecuzione. Attendi che alcuni terminino, poi riprova.
- Su un piano illimitato senza crediti residui, hai raggiunto il numero di task eseguibili senza crediti. Attendi che un task termini, oppure aggiungi crediti.
- Name
500 - Internal Server Error- Description
Meshy ha riscontrato un errore del server, ad esempio perché non è riuscita a eseguire il controllo sulla proprietà intellettuale dell'immagine del task di prototipo. Meshy non crea il task e rimborsa eventuali crediti addebitati. Riprova la richiesta.
Recupera un task Fidget Pixel
Restituisce un task di tipo prototype o build. Il percorso deve corrispondere allo stage del task. Un task build richiesto tramite /prototype/:id restituisce 404, e lo stesso vale per un task prototype richiesto tramite /build/:id.
Per i campi, consulta L'oggetto task prototype di Fidget Pixel e L'oggetto task build di 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=***"
}
}
Parametri
- Name
- id
- Type
- path
- Description
L'ID del task dalla risposta di creazione.
Restituisce
L'oggetto task prototype o l'oggetto task build, a seconda dello stage indicato nel percorso.
Modalità di errore
- Name
400 - Bad Request- Description
idnon è un ID task valido. Invia l'IDresultricevuto nella risposta di creazione.
- Name
403 - Forbidden- Description
Il tuo team ha attivato il Filtro IP, e Meshy ha segnalato l'immagine del task prototype per proprietà intellettuale di terzi. I task build e i team con piano Enterprise non ricevono questo errore. Crea un task prototype partendo da un'immagine su cui hai i diritti d'uso.
- Name
404 - Not Found- Description
Nessun task Fidget Pixel con questo ID appartiene al tuo account, oppure lo stage del task non corrisponde al percorso. Controlla l'ID e usa
/prototypeo/buildin base al task.
- Name
500 - Internal Server Error- Description
Meshy non è riuscita a eseguire il controllo sulla proprietà intellettuale. Riprova la richiesta.
Elimina un'attività Fidget Pixel
Annulla un'attività Fidget Pixel. Annullare un'attività PENDING rimborsa i suoi crediti. Un'attività IN_PROGRESS viene annullata senza rimborso, perché un worker l'ha già avviata. Un'attività con uno stato finale (SUCCEEDED, FAILED o CANCELED) non può essere annullata.
Il percorso deve corrispondere alla fase dell'attività. Ad esempio, DELETE su /prototype/:id con l'ID di un'attività di build restituisce 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).
Parametri del percorso
- Name
- id
- Type
- path
- Description
L'ID dell'attività da annullare.
Restituisce
204 No Content con un corpo vuoto.
Modalità di errore
- Name
400 - Bad Request- Description
Si applica una delle seguenti condizioni:
idnon è un ID attività valido. Invia l'IDresultdalla risposta di creazione.- L'attività ha già uno stato finale (
SUCCEEDED,FAILEDoCANCELED), quindi non può essere annullata.
- Name
404 - Not Found- Description
Nessuna attività Fidget Pixel con questo ID appartiene al tuo account, oppure la fase dell'attività non corrisponde al percorso. Controlla l'ID e usa
/prototypeo/buildper far corrispondere l'attività.
Esegui lo streaming di un task Fidget Pixel
Esegue lo streaming degli aggiornamenti di un task Fidget Pixel come Server-Sent Events (SSE). Il percorso deve corrispondere alla fase del task. Se non corrisponde, ad esempio l'ID di un task di build su /prototype/:id/stream, lo stream invia un evento error con status_code: 404 e si chiude. Un id che non è un ID di task valido fa lo stesso con 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=***"
}
}
Parametri
- Name
- id
- Type
- path
- Description
L'ID del task dalla risposta di creazione.
Restituisce
Uno stream di oggetti task prototype o build. Ogni evento contiene l'oggetto task completo, come restituito da Recupera un task Fidget Pixel. Mentre il task è PENDING o IN_PROGRESS, i suoi campi di output sono ancora vuoti (null, [] o {}), e finished_at è null.
Se il filtraggio IP blocca il risultato del task, lo stream invia al suo posto un evento error, con lo status_code che una richiesta get restituirebbe.
Elenco dei task Fidget Pixel
Restituisce i tuoi task Fidget Pixel di una fase, una pagina alla volta. Il percorso seleziona la fase. /prototype restituisce solo i task di prototipo, e /build restituisce solo i task di 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=***"
]
}
]
Parametri del percorso
- Name
- stage
- Type
- path
- Obbligatorio
- Description
La fase da elencare,
prototypeobuild.
Parametri della query
- Name
- page_num
- Type
- integer
- predefinito 1
- Description
La pagina da restituire, da
1a255.0restituisce la prima pagina. Un valore al di fuori dell'intervallo0-255restituisce400.
- Name
- page_size
- Type
- integer
- predefinito 10
- Description
Numero di task per pagina, fino a
100. Un valore da101a255restituisce 100 task, e0utilizza il valore predefinito. Un valore al di fuori dell'intervallo0-255restituisce400.
- Name
- sort_by
- Type
- string
- predefinito -created_at
- Description
L'ordine di ordinamento.
Valori disponibili:
-created_at: prima i più recenti+created_at: prima i più vecchi
Restituisce
Un array di oggetti task di prototipo o oggetti task di build, corrispondenti alla fase indicata nel percorso.
L'oggetto task di prototipo Fidget Pixel
Un task di prototipo trasforma una foto in un'immagine pixel-art. Per trasformare l'immagine in pezzi stampabili in 3D, passa l'ID del task all'endpoint di build come input_task_id.
Proprietà
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
L'ID del task. Non fare affidamento sul suo formato.
- Name
- type
- Type
- string
- Description
Il tipo di task, sempre
creative-lab-fidget-pixel-prototype.
- Name
- name
- Type
- string
- Description
Il
nameinviato alla creazione del task, oppure""se non ne hai inviato uno.
- Name
- status
- Type
- string
- Description
Lo stato del task.
Valori disponibili:
PENDING: in attesa in codaIN_PROGRESS: generazione del risultato in corsoSUCCEEDED: finale, con il risultatoFAILED: finale, con il motivo intask_errorCANCELED: finale, senza risultato
- Name
- progress
- Type
- integer
- Description
Percentuale del lavoro completato, da
0a100. È0finché il task non inizia e100quando ha successo.
- Name
- created_at
- Type
- timestamp
- Description
Momento in cui il task è stato creato, in millisecondi Unix.
- Name
- started_at
- Type
- timestamp
- Description
Momento in cui un worker ha avviato il task, in millisecondi Unix.
nullfino ad allora.
- Name
- finished_at
- Type
- timestamp
- Description
Momento in cui il task ha raggiunto uno stato finale, in millisecondi Unix.
nullfino ad allora.
- Name
- expires_at
- Type
- timestamp
- Description
Momento in cui il risultato del task scade, in millisecondi Unix. È 3 giorni dopo
finished_at, oppure 3 giorni dopocreated_atfinché il task non termina. Per gli account Enterprise, che conservano i risultati API a tempo indeterminato, è circa 100 anni più tardi. Vedi Conservazione degli asset.
- Name
- preceding_tasks
- Type
- integer
- Description
La posizione del task in coda mentre è
PENDING.1significa che parte per prossimo.0dopo che il task lascia la coda, e sempre0nei risultati di elenco.
- Name
- task_error
- Type
- object
- Description
Il motivo per cui il task è fallito.
nulla meno chestatusnon siaFAILED. Vedi Errori.
- Name
- consumed_credits
- Type
- integer
- Description
Numero di crediti addebitati per il task, dopo eventuali rimborsi. Una richiesta che restituisce un errore non viene addebitata. Un task fallito è
0, perché Meshy lo rimborsa. L'annullamento rimborsa un task solo mentre èPENDING. Se Meshy non riesce a leggere l'addebito, una risposta get o stream omette il campo, e una richiesta di elenco restituisce500. In tal caso, riprova la richiesta.
- Name
- image_urls
- Type
- array of strings
- Description
URL di download per l'immagine pixel-art. L'array contiene un URL dopo che il task ha successo, ed è vuoto fino ad allora.
Gli URL sono firmati, quindi recuperali senza un header
Authorization. Rimangono validi fino aexpires_at. Ottenere nuovamente il task prima di allora restituisce gli stessi URL, non URL firmati di nuovo. Un URL scaduto non può essere aggiornato, quindi scarica e salva i file prima di allora.
L'oggetto task di build Fidget Pixel
Un task di build genera i pezzi stampabili in 3D a partire da un task di prototipo riuscito. Meshy campiona l'immagine pixel art sulla griglia e restituisce i pezzi in un unico file 3MF multicolore.
Proprietà
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
L'ID del task. Non fare affidamento sul suo formato.
- Name
- type
- Type
- string
- Description
Il tipo di task, sempre
creative-lab-fidget-pixel-build.
- Name
- name
- Type
- string
- Description
Il
nameinviato durante la creazione del task, oppure""se non ne è stato inviato uno.
- Name
- status
- Type
- string
- Description
Lo stato del task.
Valori disponibili:
PENDING: in attesa in codaIN_PROGRESS: generazione del risultato in corsoSUCCEEDED: finale, con il risultatoFAILED: finale, con il motivo intask_errorCANCELED: finale, senza risultato
- Name
- progress
- Type
- integer
- Description
Percentuale di lavoro completato, da
0a100. È0finché il task non inizia e100quando ha successo.
- Name
- created_at
- Type
- timestamp
- Description
Momento di creazione del task, in millisecondi Unix.
- Name
- started_at
- Type
- timestamp
- Description
Momento in cui un worker ha avviato il task, in millisecondi Unix.
nullfino ad allora.
- Name
- finished_at
- Type
- timestamp
- Description
Momento in cui il task ha raggiunto uno stato finale, in millisecondi Unix.
nullfino ad allora.
- Name
- expires_at
- Type
- timestamp
- Description
Momento in cui il risultato del task scade, in millisecondi Unix. Corrisponde a 3 giorni dopo
finished_at, oppure 3 giorni dopocreated_atfinché il task non termina. Per gli account Enterprise, che conservano i risultati delle API a tempo indeterminato, è circa 100 anni dopo. Vedi Conservazione degli asset.
- Name
- preceding_tasks
- Type
- integer
- Description
La posizione del task in coda mentre è
PENDING.1significa che inizierà come prossimo.0dopo che il task esce dalla coda, e sempre0nei risultati degli elenchi.
- Name
- task_error
- Type
- object
- Description
Il motivo per cui il task è fallito.
nulla meno chestatusnon siaFAILED. Vedi Errori.
- Name
- consumed_credits
- Type
- integer
- Description
Numero di crediti addebitati per il task, dopo eventuali rimborsi. Una richiesta che restituisce un errore non viene addebitata. Un task fallito è
0, perché Meshy lo rimborsa. L'annullamento rimborsa un task solo mentre èPENDING. Se Meshy non riesce a leggere l'addebito, una risposta get o stream omette il campo, e una richiesta di elenco restituisce500. In tal caso, riprova la richiesta.
- Name
- model_urls
- Type
- object
- Description
URL di download per il risultato, indicizzati per formato file. L'oggetto ha una sola voce, per il
output.formatinviato, ed è vuoto finché il task non ha successo.Gli URL sono firmati, quindi recuperali senza un'intestazione
Authorization. Rimangono validi fino aexpires_at. Richiedere nuovamente il task prima di allora restituisce gli stessi URL, non URL firmati di nuovo. Un URL scaduto non può essere aggiornato, quindi scarica e salva i file prima di allora.- Name
3mf- Type
- string
- Description
URL di download per il file 3MF multicolore. Ogni pezzo ha un corpo grigio e una parte superiore del colore del suo pixel. Presente quando
output.formatè3mf, che è il valore predefinito.
Esempio end-to-end
I seguenti script cURL e Python eseguono l'intero flusso. Ogni script crea un task di prototipo a partire da una foto e attende che vada a buon fine. Poi crea un task di build, attende il completamento di quel task e scarica il file 3MF da model_urls.3mf.
Lo script cURL richiede curl e jq, mentre lo script Python richiede il pacchetto requests. Per eseguire uno script, segui questi passaggi:
- Imposta
MESHY_API_KEYsulla tua chiave API. - Imposta
IMAGE_PATHsul percorso di una foto locale, oppureIMAGE_URLsu un URL pubblico dell'immagine. - Facoltativo: per pixelare un soggetto diverso da una persona, imposta
PIXEL_TYPEsuother. - Esegui lo script.
Un task di prototipo di solito termina nel giro di pochi minuti. Un task di build di solito termina in meno di un minuto.
Nella tua app, mostra all'utente l'immagine proveniente da image_urls prima di creare il task di build. Se non gli piace, crea invece un altro task di prototipo. In questo modo, spendi crediti di build solo per un'immagine che l'utente approva.
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"