Creative Lab Fidget Pixel API
Verwandeln Sie ein Foto in zwei Schritten in ein mehrfarbiges, 3D-druckbares Pixel-Art-Fidget-Board. Ein Prototyp-Task wandelt das Foto in ein Pixel-Art-Bild um. Ein Build-Task wandelt dieses Bild in ineinandergreifende Teile in einer einzigen 3MF-Datei um und verwendet die ID des Prototyp-Tasks als input_task_id.
POST /openapi/creative-lab/fidget-pixel/v1/prototypePOST /openapi/creative-lab/fidget-pixel/v1/build
Beide POST-Endpoints erfordern einen kostenpflichtigen Plan. Eine Anfrage von einem Free-Plan-Konto liefert 402 zurück.
Erstellen einer Fidget-Pixel-Prototyp-Aufgabe
Erzeugt aus einem Foto ein Pixel-Art-Bild. Um daraus die Teile zu erstellen, übergeben Sie die ID dieser Aufgabe dem Build-Endpunkt als input_task_id. Die Felder der Aufgabe finden Sie unter Das Fidget-Pixel-Prototyp-Aufgabenobjekt.
Wenn Ihnen das Bild nicht gefällt, erstellen Sie eine weitere Prototyp-Aufgabe. Jede Aufgabe wird separat berechnet.
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
- Erforderlich
- Description
Das Foto, das in Pixel-Art umgewandelt werden soll, als öffentliche URL oder als Data URI (
data:image/jpeg;base64,<Ihre base64-codierten Bilddaten>).Das Bild muss eine JPG-, JPEG-, PNG- oder WebP-Datei mit höchstens 20 MB sein. Meshy erkennt das Format anhand der Bilddaten, nicht anhand der Dateiendung in der URL. Eine URL ohne Dateiendung funktioniert ebenfalls, und Meshy folgt Weiterleitungen.
- Name
- type
- Type
- string
- Erforderlich
- Description
Was das Foto zeigt, wodurch der Pixel-Art-Stil festgelegt wird. Die beiden Stile unterscheiden sich deutlich. Jeder andere Wert führt zu
400.Verfügbare Werte:
person: eine Person, als Porträt- oder Ganzkörperfoto. Meshy zeichnet ein Pixel-Sprite im Chibi-Stil.other: jedes andere Motiv, zum Beispiel ein Haustier, ein Gegenstand, ein Maskottchen, ein Logo oder eine Landschaft. Meshy zeichnet ein Pixel-Icon im Bead-Art-Stil.
- Name
- name
- Type
- string
- Description
Ein Name für die Aufgabe, mit bis zu 100 Zeichen. Er wird im Feld
nameder Aufgabe zurückgegeben. Ein längerer Name führt zu400.
Rückgabewerte
Das Feld result enthält die ID der neuen Prototyp-Aufgabe. Rufen Sie die Aufgabe ab oder streamen Sie sie, bis status den Wert SUCCEEDED hat. Übergeben Sie die ID anschließend dem Build-Endpunkt als input_task_id.
Fehlermodi
- Name
400 - Bad Request- Description
Die Anfrage kann nicht ausgeführt werden. Zum Beispiel:
image_urlodertypefehlt.typeist wederpersonnochother.- Das Bild ist keine JPG-, JPEG-, PNG- oder WebP-Datei.
- Das Bild ist zu klein, größer als 20 MB oder überschreitet die maximale Pixelanzahl.
- Meshy kann das Bild nicht herunterladen, zum Beispiel weil die URL
404zurückgibt oder ein Timeout auftritt. - Die Data URI ist kein gültiges base64.
- Das Bild wurde als NSFW eingestuft.
Die Fehlermeldung nennt das gefundene Problem. Beheben Sie die Anfrage und senden Sie sie erneut.
- Name
401 - Unauthorized- Description
Der API-Schlüssel fehlt oder ist ungültig. Überprüfen Sie den
Authorization-Header.
- Name
402 - Payment Required- Description
Einer der folgenden Punkte trifft zu:
- Das Konto verfügt nicht über genügend Credits.
- Der API-Schlüssel, der Arbeitsbereich oder das Mitglied hat sein Credit-Limit erreicht.
- Das Konto nutzt den kostenlosen Plan.
Überprüfen Sie Ihre Credits und Ihren Plan und versuchen Sie es erneut.
- Name
403 - Forbidden- Description
Ihr Team hat die IP-Filterung aktiviert, und Meshy hat das Bild wegen geistigen Eigentums Dritter markiert. Senden Sie ein Bild, für das Sie die Nutzungsrechte besitzen.
- Name
429 - Too Many Requests- Description
Eine der folgenden Grenzen wurde erreicht:
- Sie haben mehr Anfragen gesendet, als Ihre Ratenbegrenzung erlaubt. Warten Sie einige Sekunden und versuchen Sie es erneut. Siehe Ratenbegrenzungen.
- Zu viele Ihrer Aufgaben sind in der Warteschlange oder werden gerade ausgeführt. Warten Sie, bis einige abgeschlossen sind, und versuchen Sie es erneut.
- Bei einem unbegrenzten Plan ohne verbleibende Credits haben Sie die Anzahl der Aufgaben erreicht, die ohne Credits ausgeführt werden können. Warten Sie, bis eine Aufgabe abgeschlossen ist, oder fügen Sie Credits hinzu.
- Name
500 - Internal Server Error- Description
Bei Meshy ist ein Serverfehler aufgetreten, zum Beispiel weil die Prüfung auf geistiges Eigentum für das Bild nicht durchgeführt werden konnte. Meshy erstellt die Aufgabe nicht und erstattet alle dafür berechneten Credits zurück. Wiederholen Sie die Anfrage.
Erstellen einer Fidget Pixel-Build-Aufgabe
Generiert die 3D-druckbaren Teile aus einer erfolgreichen Prototyp-Aufgabe. Meshy tastet das Pixel-Art-Bild auf das Raster ab und reduziert es auf maximal color_count Farben. Jede Zelle des Motivs wird zu einem ineinandergreifenden Teil, und der Hintergrund wird nicht gedruckt.
Das Ergebnis ist eine einzelne mehrfarbige 3MF-Datei, die bereit für den Farbdruck ist. Jedes Teil hat einen grauen Grundkörper und eine Oberseite in der Farbe seines Pixels. Für die zugehörigen Felder siehe Das Fidget Pixel-Build-Aufgabenobjekt.
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
- Erforderlich
- Description
Die ID der zu erstellenden Prototyp-Aufgabe. Sie muss eine Aufgabe sein, die Ihr Konto mit
POST /openapi/creative-lab/fidget-pixel/v1/prototypeerstellt hat und deren StatusSUCCEEDEDist.Eine ID, die nicht zu einer Ihrer Fidget Pixel-Prototyp-Aufgaben aus der API gehört, liefert
404, auch wenn der Prototyp in der Web-App erstellt wurde.
- Name
- name
- Type
- string
- Description
Ein Name für die Aufgabe, mit bis zu 100 Zeichen. Er wird im Feld
nameder Aufgabe zurückgegeben. Ein längerer Name liefert400.
options
Einstellungen für die Form und Größe der Teile. Jedes Feld hat einen Standardwert, senden Sie daher nur die Felder, die Sie ändern möchten. Eine 0 verwendet den Standardwert des Feldes. Dies sind dieselben Einstellungen wie in der Creative Lab-Web-App. Andere Formeinstellungen sind fest vorgegeben, und Meshy legt sie anhand von shape und piece_size_mm fest.
- Name
- shape
- Type
- string
- Standard square
- Description
Die Grundfläche jedes Teils. Jeder andere Wert liefert
400.Verfügbare Werte:
square: quadratische Teile auf einem quadratischen Rasterhex: sechseckige Teile auf einem sechseckigen Raster, mitpiece_size_mmauf6oder8gesetzt
- Name
- grid_size
- Type
- integer
- Standard 32
- Description
Die Anzahl der Rasterzellen entlang jeder Seite des Bretts,
16oder32. Jeder andere Wert liefert400. Ein32-Raster behält mehr Details bei. Ein16-Raster ergibt weniger Teile derselben Größe, sodass das Brett etwa halb so breit ist.
- Name
- piece_size_mm
- Type
- integer
- Standard 8
- Description
Die Kantenlänge jedes Teils in Millimetern,
6,8oder10. Jeder andere Wert liefert400. Zusammen mitgrid_sizebestimmt dieser Wert die Größe des gedruckten Bretts. Zum Beispiel ist ein32-Raster aus 8-mm-Teilen etwa 26,5 cm pro Seite groß.10funktioniert nicht mithexund liefert400, da die schräge Sechseckfläche bei den meisten handelsüblichen FDM-Druckern einen Überhang verursacht.
- Name
- color_count
- Type
- integer
- Standard 8
- Description
Die maximale Anzahl der Farben in der Pixel-Art-Palette, von
1bis8. Ein Wert außerhalb dieses Bereichs liefert400. Zum Drucken benötigen Sie bis zucolor_countplus eins Filamente, eines pro Farbe und eines für die grauen Grundkörper.
- Name
- piece_height_mm
- Type
- integer
- Standard 15
- Description
Die Höhe jedes Teils in Millimetern, von
10bis80. Ein Wert außerhalb dieses Bereichs liefert400.
output
Einstellungen für die Ergebnisdatei.
- Name
- format
- Type
- string
- Standard 3mf
- Description
Das Dateiformat des Ergebnisses. Jeder andere Wert liefert
400.Verfügbare Werte:
3mf: eine mehrfarbigemodel.3mf-Datei, zurückgegeben untermodel_urls.3mf
Rückgabewerte
Das Feld result enthält die ID der neuen Build-Aufgabe. Rufen Sie die Aufgabe ab oder streamen Sie sie, bis status den Wert SUCCEEDED hat. Laden Sie anschließend die 3MF-Datei von model_urls.3mf herunter.
Fehlerfälle
- Name
400 - Bad Request- Description
Die Anfrage kann nicht ausgeführt werden. Zum Beispiel:
input_task_idfehlt oder ist keine gültige Aufgaben-ID.- Der Status der Prototyp-Aufgabe ist nicht
SUCCEEDED. Wenn sie noch läuft, warten Sie und versuchen Sie es erneut. Wenn sie fehlgeschlagen oder abgebrochen wurde, erstellen Sie eine neue Prototyp-Aufgabe. - Die Prototyp-Aufgabe war erfolgreich, enthält aber kein Bild. Erstellen Sie eine neue Prototyp-Aufgabe.
- Ein Feld in
optionsliegt außerhalb der zulässigen Werte, zum Beispiel eingrid_size, das weder16noch32ist. piece_size_mmist10undshapeisthex. Sechseckige Teile gibt es nur in 6 und 8 mm.output.formatist nicht3mf.
Die Fehlermeldung gibt an, welches Problem gefunden wurde.
- Name
401 - Unauthorized- Description
Der API-Schlüssel fehlt oder ist ungültig. Überprüfen Sie den
Authorization-Header.
- Name
402 - Payment Required- Description
Einer der folgenden Fälle trifft zu:
- Das Konto hat nicht genügend Credits.
- Der API-Schlüssel, der Arbeitsbereich oder das Mitglied hat sein Credit-Limit erreicht.
- Das Konto nutzt den kostenlosen Plan.
Überprüfen Sie Ihre Credits und Ihren Plan und versuchen Sie es erneut.
- Name
403 - Forbidden- Description
Ihr Team hat IP-Filterung aktiviert, und Meshy hat das Bild der Prototyp-Aufgabe wegen geistigen Eigentums Dritter markiert. Erstellen Sie eine Prototyp-Aufgabe aus einem Bild, an dem Sie die Nutzungsrechte besitzen.
- Name
404 - Not Found- Description
input_task_identspricht keiner Fidget Pixel-Prototyp-Aufgabe, die Ihr Konto über die API erstellt hat. Ein in der Web-App erstellter Prototyp liefert ebenfalls404. Senden Sie dieresult-ID aus einer Prototyp-Erstellungsantwort.
- Name
429 - Too Many Requests- Description
Eines dieser Limits wurde erreicht:
- Sie haben mehr Anfragen gesendet, als Ihre Ratenbegrenzung erlaubt. Warten Sie einige Sekunden und versuchen Sie es erneut. Siehe Ratenbegrenzungen.
- Zu viele Ihrer Aufgaben sind in der Warteschlange oder werden bereits ausgeführt. Warten Sie, bis einige abgeschlossen sind, und versuchen Sie es erneut.
- Bei einem unbegrenzten Plan ohne verbleibende Credits haben Sie die Anzahl der Aufgaben erreicht, die ohne Credits ausgeführt werden können. Warten Sie, bis eine Aufgabe abgeschlossen ist, oder fügen Sie Credits hinzu.
- Name
500 - Internal Server Error- Description
Bei Meshy ist ein Serverfehler aufgetreten, zum Beispiel weil die Prüfung auf geistiges Eigentum für das Bild der Prototyp-Aufgabe nicht ausgeführt werden konnte. Meshy erstellt die Aufgabe nicht und erstattet alle bereits belasteten Credits zurück. Versuchen Sie die Anfrage erneut.
Eine Fidget Pixel-Aufgabe abrufen
Gibt eine Prototyp- oder Build-Aufgabe zurück. Der Pfad muss zur Phase der Aufgabe passen. Eine über /prototype/:id angeforderte Build-Aufgabe liefert 404, ebenso eine über /build/:id angeforderte Prototyp-Aufgabe.
Die Felder finden Sie unter Das Fidget Pixel-Prototyp-Aufgabenobjekt und Das Fidget Pixel-Build-Aufgabenobjekt.
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
Die Aufgaben-ID aus der Erstellungsantwort.
Rückgabe
Das Prototyp-Aufgabenobjekt oder das Build-Aufgabenobjekt, passend zur Phase im Pfad.
Fehlermodi
- Name
400 - Bad Request- Description
idist keine gültige Aufgaben-ID. Senden Sie dieresult-ID aus der Erstellungsantwort.
- Name
403 - Forbidden- Description
Ihr Team hat die IP-Filterung aktiviert, und Meshy hat das Bild der Prototyp-Aufgabe wegen geistigen Eigentums Dritter markiert. Bei Build-Aufgaben und Teams im Enterprise-Plan tritt dieser Fehler nicht auf. Erstellen Sie eine Prototyp-Aufgabe mit einem Bild, an dem Sie die Nutzungsrechte besitzen.
- Name
404 - Not Found- Description
Keine Fidget Pixel-Aufgabe mit dieser ID gehört zu Ihrem Konto, oder die Phase der Aufgabe stimmt nicht mit dem Pfad überein. Überprüfen Sie die ID und verwenden Sie
/prototypeoder/buildpassend zur Aufgabe.
- Name
500 - Internal Server Error- Description
Meshy konnte die Prüfung auf geistiges Eigentum nicht durchführen. Wiederholen Sie die Anfrage.
Einen Fidget Pixel-Task löschen
Bricht einen Fidget Pixel-Task ab. Das Abbrechen eines PENDING-Tasks erstattet dessen Credits zurück. Ein IN_PROGRESS-Task wird ohne Rückerstattung abgebrochen, da bereits ein Worker mit der Bearbeitung begonnen hat. Ein Task mit einem endgültigen Status (SUCCEEDED, FAILED oder CANCELED) kann nicht abgebrochen werden.
Der Pfad muss zur Stufe des Tasks passen. Zum Beispiel gibt DELETE auf /prototype/:id mit der ID eines Build-Tasks 404 zurück.
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).
Pfadparameter
- Name
- id
- Type
- path
- Description
Die ID des abzubrechenden Tasks.
Rückgabewerte
204 No Content mit leerem Textkörper.
Fehlerfälle
- Name
400 - Bad Request- Description
Einer der folgenden Fälle trifft zu:
idist keine gültige Task-ID. Senden Sie dieresult-ID aus der Antwort der Erstellung.- Der Task hat bereits einen endgültigen Status (
SUCCEEDED,FAILEDoderCANCELED) und kann daher nicht abgebrochen werden.
- Name
404 - Not Found- Description
Es gehört kein Fidget Pixel-Task mit dieser ID zu Ihrem Konto, oder die Stufe des Tasks stimmt nicht mit dem Pfad überein. Überprüfen Sie die ID und verwenden Sie
/prototypeoder/build, um den passenden Task zu finden.
Einen Fidget-Pixel-Task streamen
Streamt die Updates eines Fidget-Pixel-Tasks als Server-Sent Events (SSE). Der Pfad muss zur Phase des Tasks passen. Ist das nicht der Fall, zum Beispiel wenn die ID eines Build-Tasks unter /prototype/:id/stream verwendet wird, sendet der Stream ein error-Event mit status_code: 404 und wird geschlossen. Eine id, die keine gültige Task-ID ist, verhält sich genauso, jedoch mit 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
Die Task-ID aus der Erstellungsantwort.
Rückgabe
Ein Stream von Prototype- oder Build-Task-Objekten. Jedes Event enthält das vollständige Task-Objekt, so wie es Einen Fidget-Pixel-Task abrufen zurückgibt. Solange sich der Task im Status PENDING oder IN_PROGRESS befindet, sind seine Ausgabefelder noch leer (null, [] oder {}), und finished_at ist null.
Wenn IP Filtering das Ergebnis des Tasks blockiert, sendet der Stream an dessen Stelle ein error-Event mit dem status_code, den eine Get-Anfrage zurückgeben würde.
Fidget Pixel-Aufgaben auflisten
Gibt Ihre Fidget Pixel-Aufgaben einer Stufe zurück, jeweils eine Seite auf einmal. Der Pfad wählt die Stufe aus. /prototype gibt nur Prototyp-Aufgaben zurück, und /build gibt nur Build-Aufgaben zurück.
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=***"
]
}
]
Pfadparameter
- Name
- stage
- Type
- path
- Erforderlich
- Description
Die aufzulistende Stufe,
prototypeoderbuild.
Abfrageparameter
- Name
- page_num
- Type
- integer
- Standard 1
- Description
Die zurückzugebende Seite, von
1bis255.0gibt die erste Seite zurück. Ein Wert außerhalb von0bis255gibt400zurück.
- Name
- page_size
- Type
- integer
- Standard 10
- Description
Anzahl der Aufgaben pro Seite, bis zu
100. Ein Wert von101bis255gibt 100 Aufgaben zurück, und0verwendet den Standardwert. Ein Wert außerhalb von0bis255gibt400zurück.
- Name
- sort_by
- Type
- string
- Standard -created_at
- Description
Die Sortierreihenfolge.
Verfügbare Werte:
-created_at: neueste zuerst+created_at: älteste zuerst
Rückgabewerte
Ein Array von Prototyp-Aufgabenobjekten oder Build-Aufgabenobjekten, passend zur Stufe im Pfad.
Das Fidget-Pixel-Prototyp-Task-Objekt
Ein Prototyp-Task verwandelt ein Foto in ein Pixel-Art-Bild. Um das Bild in 3D-druckbare Teile umzuwandeln, übergeben Sie die ID des Tasks als input_task_id an den Build-Endpunkt.
Eigenschaften
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
Die Task-ID. Verlassen Sie sich nicht auf ihr Format.
- Name
- type
- Type
- string
- Description
Der Task-Typ, immer
creative-lab-fidget-pixel-prototype.
- Name
- name
- Type
- string
- Description
Der
name, den Sie beim Erstellen des Tasks gesendet haben, oder"", falls Sie keinen gesendet haben.
- Name
- status
- Type
- string
- Description
Der Status des Tasks.
Verfügbare Werte:
PENDING: wartet in der WarteschlangeIN_PROGRESS: generiert das ErgebnisSUCCEEDED: final, mit ErgebnisFAILED: final, mit dem Grund intask_errorCANCELED: final, ohne Ergebnis
- Name
- progress
- Type
- integer
- Description
Prozentsatz der erledigten Arbeit, von
0bis100. Er ist0, bis der Task beginnt, und100, wenn er erfolgreich ist.
- Name
- created_at
- Type
- timestamp
- Description
Zeitpunkt der Erstellung des Tasks, in Unix-Millisekunden.
- Name
- started_at
- Type
- timestamp
- Description
Zeitpunkt, zu dem ein Worker den Task gestartet hat, in Unix-Millisekunden. Bis dahin
null.
- Name
- finished_at
- Type
- timestamp
- Description
Zeitpunkt, zu dem der Task einen finalen Status erreicht hat, in Unix-Millisekunden. Bis dahin
null.
- Name
- expires_at
- Type
- timestamp
- Description
Zeitpunkt, zu dem das Ergebnis des Tasks abläuft, in Unix-Millisekunden. Das ist 3 Tage nach
finished_at, oder 3 Tage nachcreated_at, solange der Task noch nicht abgeschlossen ist. Bei Enterprise-Konten, die API-Ergebnisse unbegrenzt aufbewahren, liegt er etwa 100 Jahre später. Siehe Aufbewahrung von Assets.
- Name
- preceding_tasks
- Type
- integer
- Description
Die Position des Tasks in der Warteschlange, solange er
PENDINGist.1bedeutet, dass er als Nächstes startet.0, nachdem der Task die Warteschlange verlassen hat, und immer0in Listenergebnissen.
- Name
- task_error
- Type
- object
- Description
Warum der Task fehlgeschlagen ist.
null, sofernstatusnichtFAILEDist. Siehe Fehler.
- Name
- consumed_credits
- Type
- integer
- Description
Anzahl der für den Task berechneten Credits, nach etwaiger Rückerstattung. Eine Anfrage, die einen Fehler zurückgibt, wird nicht berechnet. Ein fehlgeschlagener Task hat den Wert
0, da Meshy ihn erstattet. Ein Abbruch erstattet einen Task nur, solange erPENDINGist. Wenn Meshy die Belastung nicht auslesen kann, lässt eine Get- oder Stream-Antwort das Feld weg, und eine Listenanfrage liefert500. Wiederholen Sie die Anfrage in diesem Fall.
- Name
- image_urls
- Type
- array of strings
- Description
Download-URLs für das Pixel-Art-Bild. Das Array enthält eine URL, nachdem der Task erfolgreich war, und ist bis dahin leer.
Die URLs sind signiert, rufen Sie sie daher ohne
Authorization-Header ab. Sie bleiben bisexpires_atgültig. Wird der Task vor diesem Zeitpunkt erneut abgerufen, liefert er dieselben URLs, nicht neu signierte. Eine abgelaufene URL kann nicht erneuert werden, laden Sie die Dateien daher vorher herunter und speichern Sie sie.
Das Fidget Pixel Build-Task-Objekt
Ein Build-Task erzeugt die 3D-druckbaren Teile aus einem erfolgreichen Prototyp-Task. Meshy tastet das Pixel-Art-Bild auf das Raster ab und liefert die Teile in einer einzigen mehrfarbigen 3MF-Datei zurück.
Eigenschaften
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
Die Task-ID. Verlassen Sie sich nicht auf ihr Format.
- Name
- type
- Type
- string
- Description
Der Task-Typ, immer
creative-lab-fidget-pixel-build.
- Name
- name
- Type
- string
- Description
Der
name, den Sie beim Erstellen des Tasks gesendet haben, oder"", wenn Sie keinen gesendet haben.
- Name
- status
- Type
- string
- Description
Der Status des Tasks.
Verfügbare Werte:
PENDING: wartet in der WarteschlangeIN_PROGRESS: generiert das ErgebnisSUCCEEDED: final, mit dem ErgebnisFAILED: final, mit dem Grund intask_errorCANCELED: final, ohne Ergebnis
- Name
- progress
- Type
- integer
- Description
Prozentsatz der erledigten Arbeit, von
0bis100. Er ist0, bis der Task beginnt, und100, wenn er erfolgreich ist.
- Name
- created_at
- Type
- timestamp
- Description
Zeitpunkt der Erstellung des Tasks, in Unix-Millisekunden.
- Name
- started_at
- Type
- timestamp
- Description
Zeitpunkt, zu dem ein Worker den Task gestartet hat, in Unix-Millisekunden. Bis dahin
null.
- Name
- finished_at
- Type
- timestamp
- Description
Zeitpunkt, zu dem der Task einen finalen Status erreicht hat, in Unix-Millisekunden. Bis dahin
null.
- Name
- expires_at
- Type
- timestamp
- Description
Zeitpunkt, zu dem das Ergebnis des Tasks abläuft, in Unix-Millisekunden. Das ist 3 Tage nach
finished_at, oder 3 Tage nachcreated_at, bis der Task abgeschlossen ist. Bei Enterprise-Konten, die API-Ergebnisse unbegrenzt aufbewahren, liegt er etwa 100 Jahre später. Siehe Aufbewahrung von Assets.
- Name
- preceding_tasks
- Type
- integer
- Description
Die Position des Tasks in der Warteschlange, solange er
PENDINGist.1bedeutet, dass er als Nächstes startet.0, nachdem der Task die Warteschlange verlassen hat, und immer0in Listenergebnissen.
- Name
- task_error
- Type
- object
- Description
Warum der Task fehlgeschlagen ist.
null, sofernstatusnichtFAILEDist. Siehe Fehler.
- Name
- consumed_credits
- Type
- integer
- Description
Anzahl der für den Task berechneten Credits, nach einer eventuellen Rückerstattung. Eine Anfrage, die einen Fehler zurückgibt, wird nicht berechnet. Ein fehlgeschlagener Task ist
0, da Meshy ihn erstattet. Das Abbrechen erstattet einen Task nur, solange erPENDINGist. Wenn Meshy die Belastung nicht lesen kann, lässt eine Get- oder Stream-Antwort das Feld weg, und eine Listenanfrage gibt500zurück. In diesem Fall wiederholen Sie die Anfrage.
- Name
- model_urls
- Type
- object
- Description
Download-URLs für das Ergebnis, mit dem Dateiformat als Schlüssel. Das Objekt enthält einen Eintrag für das von Ihnen gesendete
output.formatund ist leer, bis der Task erfolgreich ist.Die URLs sind signiert, rufen Sie sie daher ohne
Authorization-Header ab. Sie bleiben bisexpires_atgültig. Wird der Task vor diesem Zeitpunkt erneut abgerufen, werden dieselben URLs zurückgegeben, keine neu signierten. Eine abgelaufene URL kann nicht erneuert werden, laden Sie die Dateien also vorher herunter und speichern Sie sie.- Name
3mf- Type
- string
- Description
Download-URL für die mehrfarbige 3MF-Datei. Jedes Teil hat einen grauen Körper und eine Oberseite in der Farbe seines Pixels. Vorhanden, wenn
output.formatden Wert3mfhat, was der Standard ist.
End-to-end example
Die folgenden cURL- und Python-Skripte führen den gesamten Ablauf aus. Jedes Skript erstellt aus einem Foto einen Prototyp-Task und wartet, bis dieser erfolgreich abgeschlossen ist. Anschließend erstellt es einen Build-Task, wartet auf diesen Task und lädt die 3MF-Datei von model_urls.3mf herunter.
Das cURL-Skript benötigt curl und jq, das Python-Skript benötigt das Paket requests. Um ein Skript auszuführen, gehen Sie wie folgt vor:
- Setzen Sie
MESHY_API_KEYauf Ihren API-Schlüssel. - Setzen Sie
IMAGE_PATHauf den Pfad eines lokalen Fotos, oderIMAGE_URLauf eine öffentlich zugängliche Bild-URL. - Optional: Um ein anderes Motiv als eine Person zu pixeln, setzen Sie
PIXEL_TYPEaufother. - Führen Sie das Skript aus.
Ein Prototyp-Task ist normalerweise innerhalb weniger Minuten abgeschlossen. Ein Build-Task ist normalerweise in deutlich unter einer Minute abgeschlossen.
Zeigen Sie in Ihrer App das Bild aus image_urls Ihrem Nutzer, bevor Sie den Build-Task erstellen. Falls es ihm nicht gefällt, erstellen Sie stattdessen einen weiteren Prototyp-Task. So geben Sie Build-Credits nur für ein Bild aus, das der Nutzer genehmigt hat.
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"