Verwandeln Sie ein Ausgangsfoto in zwei Stufen in ein mehrfarbiges, 3D-druckbares Pixel-Art-Fidget-Board:
Prototype pixeliert Ihr Foto zu einem Pixel-Art-Bild, dann
tastet Build dieses Bild auf ein 16×16- oder 32×32-Raster ab und wandelt jeden Pixel
in ein ineinandergreifendes quadratisches oder sechseckiges Teil um, ausgeliefert als einzelne 3MF-Datei,
deren Objekte ihre Farben tragen, sodass ein Multifilament-Slicer jedes Teil
in der richtigen Farbe druckt. Die beiden Stufen sind über input_task_id verknüpft.
POST /openapi/creative-lab/fidget-pixel/v1/prototype
POST /openapi/creative-lab/fidget-pixel/v1/build
Beide POST-Endpunkte erfordern ein kostenpflichtiges Abonnement. Anfragen von
Konten mit kostenlosem Plan werden mit 402 Payment Required abgelehnt.
Erzeugt ein einzelnes Pixel-Art-Bild aus dem Quellfoto. Die zurückgegebene Task-ID
wird als input_task_id an den Build-Endpunkt übergeben. Rufen Sie diesen
Endpunkt erneut auf, um einen weiteren Versuch zu erhalten, falls das Ergebnis nicht Ihren Vorstellungen entspricht – jeder
Aufruf wird separat abgerechnet. Für die Form der Antwort siehe
Das Fidget Pixel Prototype Task Objekt.
Parameter
Name
image_url
Type
string
Erforderlich
Description
Quellfoto, das Meshy pixeln soll. Wir unterstützen derzeit die Formate .jpg, .jpeg, .png und .webp.
Das Format wird durch das Dekodieren der Bilddaten ermittelt, nicht anhand der Dateiendung der URL – eine URL ohne Erweiterung oder eine, die weiterleitet, funktioniert, solange die Bytes zu einem unterstützten Format dekodiert werden. HTTP-Weiterleitungen werden befolgt.
Es gibt zwei Möglichkeiten, das Bild bereitzustellen:
Öffentlich zugängliche URL: Eine URL, die aus dem öffentlichen Internet erreichbar ist.
Data URI: Ein base64-kodierter Data URI des Bildes. Beispiel für einen Data URI: data:image/jpeg;base64,<Ihre base64-kodierten Bilddaten>.
Name
type
Type
string
Erforderlich
Description
Was das Foto zeigt. Wählt den Pixelisierungsstil aus, wählen Sie also bewusst – die beiden Optionen erzeugen sichtbar unterschiedliche Ergebnisse. Verfügbare Werte:
person — das Motiv ist eine Person (Porträt oder Ganzkörper). Erzeugt ein Pixel-Sprite des Motivs im Chibi-Stil.
other — alles andere: Haustiere, Objekte, Maskottchen, Logos, Landschaften. Erzeugt ein Pixel-Icon des Motivs im Perlenkunst-Stil.
Name
name
Type
string
Description
Optionaler Task-Name zu Anzeigezwecken. Maximal 100 Zeichen.
Rückgabe
Die result-Eigenschaft der Antwort enthält die Task-id der neu erstellten Fidget Pixel Prototype Task. Fragen Sie den Get a Task-Endpunkt ab oder abonnieren Sie den Stream, bis die Task den Status SUCCEEDED erreicht, und übergeben Sie diese ID dann als input_task_id an den Build-Endpunkt.
Fehlermodi
Name
400 - Bad Request
Description
Die Anfrage war nicht akzeptabel. Häufige Ursachen:
Fehlender Parameter: image_url und type sind beide erforderlich.
Ungültiger type: type muss person oder other sein.
Ungültiges Bildformat: Die angegebene image_url hat kein unterstütztes Format (.jpg, .jpeg, .png, .webp).
Bildabmessungen außerhalb des zulässigen Bereichs: Das Bild ist zu klein, überschreitet die maximale Dateigröße oder überschreitet die maximale Pixelanzahl.
Nicht erreichbare URL: Die image_url konnte nicht heruntergeladen werden (404 oder timeout).
Ungültiger Data URI: Die base64-Zeichenfolge ist fehlerhaft.
Inhalt markiert: Das Eingabebild wurde durch die NSFW-moderation markiert.
Name
401 - Unauthorized
Description
Die Authentifizierung ist fehlgeschlagen. Bitte überprüfen Sie Ihren API-Schlüssel.
Name
402 - Payment Required
Description
Nicht genügend Credits, um diese Task auszuführen, oder der API-Schlüssel gehört zu einem Konto mit kostenlosem Plan.
Name
403 - Forbidden
Description
Das Eingabebild wurde durch die moderation für geistiges Eigentum markiert (Content flagged for intellectual property violation). Blockiert werden nur Enterprise-Konten mit aktivierter Filterung für geistiges Eigentum; es wird nichts berechnet.
Name
429 - Too Many Requests
Description
Sie haben Ihre Ratenbegrenzung überschritten.
Name
500 - Internal Server Error
Description
Die Prüfung auf geistiges Eigentum selbst konnte nicht abgeschlossen werden (Unable to perform intellectual property check, please try again). Enterprise-Konten mit aktivierter Filterung für geistiges Eigentum schlagen bei dieser Prüfung im Zweifel ab; es wird nichts berechnet – wiederholen Sie die Anfrage.
Request
POST
/openapi/creative-lab/fidget-pixel/v1/prototype
# Stage 1: pixelize the source photocurlhttps://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/prototype \-XPOST \-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" }'
Generiert die 3D-druckbaren Teile aus einer erfolgreich abgeschlossenen Prototyp-Aufgabe. Der Build tastet das Pixel-Art-Bild des Prototyps auf das angeforderte Raster ab, quantisiert es auf höchstens color_count Farben und erzeugt für jede Rasterzelle ein ineinandergreifendes Teil. Das Ergebnis ist eine einzelne 3MF-Datei, in der jedes Teil ein separates Objekt ist, das mit seiner Farbe getaggt ist und für einen Multi-Filament-Slicer bereitsteht. Für die Form der Antwort siehe
Das Fidget-Pixel-Build-Aufgabenobjekt.
Parameter
Name
input_task_id
Type
string
Erforderlich
Description
Die Aufgaben-ID einer Prototyp-Aufgabe, die über denselben OpenAPI-Endpunkt erstellt wurde. Der Prototyp muss vom selben Meshy-Konto erstellt worden sein und den Status SUCCEEDED erreicht haben.
Prototyp-Aufgaben, die über die Webapp erstellt wurden, werden nicht akzeptiert – der Build-Endpunkt akzeptiert nur Prototyp-Aufgaben, die von POST /openapi/creative-lab/fidget-pixel/v1/prototype erzeugt wurden, und lehnt jede andere Quelle mit 404 ab.
Name
name
Type
string
Description
Optionaler Aufgabenname für Anzeigezwecke. Maximal 100 Zeichen.
options
Optionale Teile-Geometrie. Jedes Feld hat einen Standardwert – senden Sie nur die Felder, die Sie überschreiben möchten. Dies sind dieselben Regler, die die Creative-Lab-Webapp anbietet; Steckhöhe, Kappenskalierung und die übrigen Fertigungsvorgaben werden aus shape und piece_size_mm abgeleitet und sind nicht zugänglich.
Name
shape
Type
string
Standard square
Description
Grundriss jedes Teils. Verfügbare Werte:
square (Standard) — quadratische Teile auf einem quadratischen Raster.
hex — sechseckige Teile auf einem hexagonalen Raster. Hex-Teile sind nur in 6 und 8 mm verfügbar.
Name
grid_size
Type
integer
Standard 32
Description
Anzahl der Teile entlang jeder Seite des Bretts. Verfügbare Werte: 16 oder 32. Ein 32-Raster erhält mehr Details; ein 16-Raster bedeutet weniger, dafür größere Teile für dasselbe Motiv.
Name
piece_size_mm
Type
integer
Standard 8
Description
Kantenlänge jedes Teils in Millimetern. Verfügbare Werte: 6, 8 oder 10. Zusammen mit grid_size legt dies die gedruckte Brettgröße fest – zum Beispiel 32 × 8 mm ≈ 26 cm pro Seite. 10 ist bei shape: "hex" nicht verfügbar (die schräge Hex-Fläche überhängt bei den meisten FDM-Druckern für Endverbraucher).
Name
color_count
Type
integer
Standard 8
Description
Maximale Anzahl an Farben in der Palette, auf die das Bild quantisiert wird. Bereich: [1, 8]. Jede Farbe wird in Ihrem Slicer zu einem Filament.
Name
piece_height_mm
Type
integer
Standard 15
Description
Höhe jedes Teils in Millimetern. Bereich: [10, 80].
output
Optionaler Auswahlparameter für das Übertragungsformat. Standardmäßig 3mf, was derzeit der einzige unterstützte Wert ist.
Name
format
Type
string
Standard 3mf
Description
Vom Build zurückgegebenes Artefakt. Verfügbare Werte:
3mf (Standard) — gibt eine einzelne model.3mf unter model_urls.3mf zurück, mit einem Objekt pro Teil und der jeweiligen Teilfarbe, die an jedes Objekt angehängt ist.
Rückgabewerte
Die Eigenschaft result der Antwort enthält die Aufgaben-id der neu erstellten Fidget-Pixel-Build-Aufgabe. Fragen Sie den Endpunkt Eine Aufgabe abrufen ab oder abonnieren Sie den Stream, bis die Aufgabe den Status SUCCEEDED erreicht, und laden Sie anschließend das Artefakt von model_urls.3mf herunter.
Fehlerfälle
Name
400 - Bad Request
Description
Die Anfrage war nicht akzeptabel. Häufige Ursachen:
Fehlender Parameter: input_task_id ist erforderlich.
Ungültige UUID: input_task_id ist keine gültige UUID.
Übergeordnete Aufgabe nicht abgeschlossen: Die referenzierte Prototyp-Aufgabe hat den Status SUCCEEDED noch nicht erreicht.
Kein Kandidat: Die Prototyp-Aufgabe war erfolgreich, hat aber kein Pixel-Art-Bild erzeugt; erstellen Sie einen neuen Prototyp.
Optionen außerhalb des zulässigen Bereichs: Eines der options-Felder liegt außerhalb der erlaubten Menge oder des erlaubten Bereichs — zum Beispiel options.grid_size must be 16 or 32, oder options.piece_size_mm=10 is not supported for shape=hex; hex pieces are available in 6 and 8 mm.
Nicht unterstütztes Format: output.format muss 3mf sein.
Name
401 - Unauthorized
Description
Die Authentifizierung ist fehlgeschlagen. Bitte überprüfen Sie Ihren API-Schlüssel.
Name
402 - Payment Required
Description
Unzureichende Credits, um diese Aufgabe auszuführen, oder der API-Schlüssel gehört zu einem Konto mit kostenlosem Tarif.
Name
403 - Forbidden
Description
Das Bild des referenzierten Prototyps wurde durch die Prüfung auf geistiges Eigentum (moderation) markiert. Blockiert werden nur Enterprise-Konten mit aktivierter Filterung geistigen Eigentums; es werden keine Credits berechnet.
Name
404 - Not Found
Description
Die referenzierte Prototyp-Aufgabe existiert nicht, gehört einem anderen Benutzer oder wurde über die Webapp erstellt (nur im API-Modus erstellte Prototyp-Aufgaben können mit einem Build verkettet werden).
Name
429 - Too Many Requests
Description
Sie haben Ihre Ratenbegrenzung überschritten.
Name
500 - Internal Server Error
Description
Die Beurteilung des geistigen Eigentums des referenzierten Prototyps konnte nicht ermittelt werden (Unable to perform intellectual property check, please try again). Enterprise-Konten mit aktivierter Filterung geistigen Eigentums schlagen bei dieser Prüfung im Zweifel ab; es werden keine Credits berechnet — wiederholen Sie die Anfrage.
Ruft einen Prototyp- oder Build-Task anhand einer gültigen Task-id ab. Der URL-Pfad
muss zur Stufe des Tasks passen — ein Build-Task, der über
/prototype/:id abgerufen wird, liefert 404, und umgekehrt.
Eindeutige Kennung des abzurufenden Fidget-Pixel-Tasks.
Rückgabewerte
Die Antwort enthält das Fidget-Pixel-Task-Objekt. Die Form hängt davon ab,
welche Stufe angefordert wurde.
Fehlermodi
Name
400 - Bad Request
Description
id ist keine gültige UUID (Invalid ID).
Name
403 - Forbidden
Description
Das Bild des Tasks wurde von der moderation für geistiges Eigentum markiert. Nur Enterprise-Konten mit aktivierter Filterung für geistiges Eigentum werden blockiert.
Name
404 - Not Found
Description
Der Task existiert nicht, gehört einem anderen Benutzer, oder seine Stufe stimmt nicht mit dem URL-Pfad überein.
Name
500 - Internal Server Error
Description
Die Prüfung auf geistiges Eigentum konnte nicht abgeschlossen werden (Unable to perform intellectual property check, please try again); Enterprise-Konten mit aktivierter Filterung für geistiges Eigentum schlagen im Zweifel fehl (fail closed). Wiederholen Sie die Anfrage.
Bricht eine Fidget-Pixel-Aufgabe ab. Wenn sich die Aufgabe noch im Status PENDING
befindet, werden die bei der Erstellung verbrauchten Credits zurückerstattet. Aufgaben,
die sich bereits IN_PROGRESS befinden, werden ohne Rückerstattung abgebrochen (der
Worker verbraucht möglicherweise bereits Ressourcen). Aufgaben, die bereits einen
Endzustand erreicht haben (SUCCEEDED, FAILED, CANCELED), können nicht abgebrochen
werden.
Der URL-Pfad muss mit der Phase der Aufgabe übereinstimmen — DELETE auf
/prototype/:buildId gibt 404 zurück.
Pfadparameter
Name
id
Type
path
Description
Eindeutige Kennung der abzubrechenden Fidget-Pixel-Aufgabe.
Rückgabewerte
Gibt bei Erfolg 204 No Content mit leerem Body zurück.
Fehlermodi
Name
400 - Bad Request
Description
Die Anfrage war nicht akzeptabel. Häufige Ursachen:
Ungültige ID: id ist keine gültige UUID.
Endzustand: Die Aufgabe befindet sich bereits im Status SUCCEEDED, FAILED oder CANCELED und kann nicht abgebrochen werden.
Name
404 - Not Found
Description
Die Aufgabe existiert nicht, gehört einem anderen Benutzer, oder ihre Phase stimmt nicht mit dem URL-Pfad überein.
Streamt Echtzeit-Updates für einen Fidget-Pixel-Task über Server-Sent Events (SSE).
Der URL-Pfad muss zur Phase des Tasks passen — wird ein Stream unter
/prototype/:buildId/stream geöffnet, wird ein einzelner event: error-Payload mit
status_code: 404 ausgegeben und der Stream geschlossen; eine fehlerhafte id verhält sich
genauso, jedoch mit status_code: 400 (Invalid ID).
Parameter
Name
id
Type
path
Description
Eindeutiger Bezeichner des zu streamenden Fidget-Pixel-Tasks.
Rückgabewerte
Gibt einen Stream von Fidget Pixel Prototype-
oder Fidget Pixel Build-Task-Objekten als
Server-Sent Events zurück. Jeder Frame enthält das vollständige Task-Objekt für die jeweilige Phase — dieselbe Struktur, die auch der
Get-Endpunkt zurückgibt — solange der Task also PENDING oder IN_PROGRESS ist, sind die
Ausgabefelder einfach noch nicht befüllt (null, [] oder {}) und
finished_at ist null.
Ruft eine paginierte Liste Ihrer Fidget-Pixel-Aufgaben für eine einzelne Stufe ab.
Der URL-Pfad wählt die Stufe aus — /prototype liefert Prototyp-Aufgaben zurück;
/build liefert Build-Aufgaben zurück. Aufgaben der jeweils anderen Stufe sind in
keiner der beiden Antworten enthalten.
Pfadparameter
Name
stage
Type
path
Erforderlich
Description
Entweder prototype oder build. Die Sammlung liefert nur Aufgaben zurück,
deren Stufe mit der URL übereinstimmt — das Abrufen von /prototype liefert
niemals Build-Aufgaben zurück und umgekehrt.
Abfrageparameter
Name
page_num
Type
integer
Standard 1
Description
Seitenzahl für die Paginierung.
Name
page_size
Type
integer
Standard 10
Description
Begrenzung der Seitengröße. Maximal zulässig sind 100 Einträge.
Name
sort_by
Type
string
Standard -created_at
Description
Feld, nach dem sortiert werden soll. Verfügbare Werte:
+created_at: Sortierung nach Erstellungszeit in aufsteigender Reihenfolge.
-created_at: Sortierung nach Erstellungszeit in absteigender Reihenfolge.
Das Fidget Pixel Prototype Task Object ist eine Arbeitseinheit, die Meshy verwaltet,
um ein Ausgangsfoto in ein Pixel-Art-Bild zu pixelieren. Die Ausgabe dieser
Stufe wird über input_task_id mit
der Build-Stufe verkettet.
Eigenschaften
Name
id
Type
string
Description
Eindeutige Kennung für die Aufgabe. Auch wenn wir als Implementierungsdetail eine k-sortierbare UUID für Task-IDs verwenden, solltest du keine Annahmen über das Format der ID treffen.
Name
type
Type
string
Description
Typ der Aufgabe. Der Wert ist creative-lab-fidget-pixel-prototype.
Name
name
Type
string
Description
Der bei der Erstellung der Aufgabe angegebene Aufgabenname. Leerer String, wenn kein Name angegeben wurde.
Name
status
Type
string
Description
Status der Aufgabe. Mögliche Werte sind einer von PENDING, IN_PROGRESS, SUCCEEDED, FAILED, CANCELED.
Name
progress
Type
integer
Description
Fortschritt der Aufgabe. Wenn die Aufgabe noch nicht gestartet wurde, ist dieser Wert 0. Sobald die Aufgabe erfolgreich abgeschlossen wurde, wird er 100.
Name
created_at
Type
timestamp
Description
Zeitstempel, wann die Aufgabe erstellt wurde, in Millisekunden.
Ein Zeitstempel repräsentiert die Anzahl der Millisekunden seit dem 1. Januar 1970 UTC, gemäß
dem Standard RFC 3339.
Zum Beispiel wird Freitag, 1. September 2023, 12:00:00 Uhr GMT als 1693569600000 dargestellt. Dies gilt
für alle Zeitstempel in der Meshy API.
Name
started_at
Type
timestamp
Description
Zeitstempel, wann die Aufgabe gestartet wurde, in Millisekunden. Wenn die Aufgabe noch nicht gestartet wurde, ist dieser Wert null.
Name
finished_at
Type
timestamp
Description
Zeitstempel, wann die Aufgabe beendet wurde, in Millisekunden. Wenn die Aufgabe noch nicht beendet wurde, ist dieser Wert null.
Name
expires_at
Type
timestamp
Description
Zeitstempel, wann das Ergebnis der Aufgabe abläuft, in Millisekunden — 3 Tage nachdem die Aufgabe beendet wurde. Enterprise-Konten behalten API-Ergebnisse unbegrenzt (siehe Aufbewahrung von Assets); für sie ist dieser Zeitstempel auf etwa 100 Jahre in der Zukunft gesetzt.
Name
preceding_tasks
Type
integer
Description
Die Anzahl der vorausgehenden Aufgaben.
Der Wert dieses Felds ist nur dann aussagekräftig, wenn der Aufgabenstatus PENDING ist.
Name
task_error
Type
object
Description
Fehlerdetails für fehlgeschlagene Aufgaben. Siehe Fehler für die vollständige Referenz des task_error-Objekts.
Name
consumed_credits
Type
integer
Description
Die Anzahl der von dieser Aufgabe verbrauchten Credits. Einer Aufgabe, die SUCCEEDED erreicht, wird der volle Betrag für ihre Stufe berechnet. Eine Aufgabe, die nie erstellt wird (ein 4xx zum Zeitpunkt der Anfrage, einschließlich einer Ablehnung durch die moderation), wird überhaupt nicht berechnet. Eine Aufgabe, die FAILED erreicht, gibt 0 zurück — die Belastung wird erstattet. Ein Abbruch per DELETE erstattet nur, solange die Aufgabe noch PENDING ist; eine bereits IN_PROGRESS befindliche Aufgabe bleibt belastet, da die Arbeit bereits aufgewendet wurde.
Name
image_urls
Type
array of strings
Description
Herunterladbare URLs für das von dieser Prototyp-Aufgabe erzeugte Pixel-Art-Bild. Derzeit gibt die API immer genau ein Bild zurück; das Feld ist ein Array, damit zukünftige Überarbeitungen mehrere Kandidaten anzeigen können, ohne eine Breaking Change zu verursachen. Leer, bis die Aufgabe SUCCEEDED erreicht.
Dies sind signierte URLs: rufe sie ohne einen Authorization-Header ab. Sie bleiben bis expires_at gültig, also 3 Tage nach finished_at, und ein erneutes Auslesen der Aufgabe innerhalb dieses Zeitfensters liefert dieselbe URL zurück, statt eine neu signierte. Lade die Dateien vorher selbst herunter und speichere sie — es gibt keine Möglichkeit, einen abgelaufenen Link zu erneuern.
Das Fidget Pixel Build Task Objekt ist eine Arbeitseinheit, die Meshy verfolgt, um die druckbaren Teile aus einer erfolgreich abgeschlossenen Prototyp-Aufgabe zu generieren. Der Build tastet das Pixel-Art-Bild des Prototyps auf das angeforderte Raster ab und veröffentlicht eine einzelne farblich gekennzeichnete 3MF-Datei.
Eigenschaften
Name
id
Type
string
Description
Eindeutige Kennung für die Aufgabe.
Name
type
Type
string
Description
Typ der Aufgabe. Der Wert ist creative-lab-fidget-pixel-build.
Name
name
Type
string
Description
Der Aufgabenname, der bei der Erstellung der Aufgabe angegeben wurde. Leerer String, wenn kein Name angegeben wurde.
Name
status
Type
string
Description
Status der Aufgabe. Mögliche Werte sind einer von PENDING, IN_PROGRESS, SUCCEEDED, FAILED, CANCELED.
Name
progress
Type
integer
Description
Fortschritt der Aufgabe. Wenn die Aufgabe noch nicht gestartet wurde, ist dieser Wert 0. Sobald die Aufgabe erfolgreich abgeschlossen wurde, wird er 100.
Name
created_at
Type
timestamp
Description
Zeitstempel der Erstellung der Aufgabe, in Millisekunden.
Name
started_at
Type
timestamp
Description
Zeitstempel des Starts der Aufgabe, in Millisekunden. null, bis die Aufgabe startet.
Name
finished_at
Type
timestamp
Description
Zeitstempel des Abschlusses der Aufgabe, in Millisekunden. null, bis die Aufgabe abgeschlossen ist.
Name
expires_at
Type
timestamp
Description
Zeitstempel, wann das Ergebnis der Aufgabe abläuft, in Millisekunden — 3 Tage nach Abschluss der Aufgabe. Enterprise-Konten behalten API-Ergebnisse unbegrenzt (siehe Aufbewahrung von Assets); für sie ist dieser Zeitstempel auf etwa 100 Jahre in der Zukunft festgelegt.
Name
preceding_tasks
Type
integer
Description
Die Anzahl der vorausgehenden Aufgaben. Nur relevant, wenn der Status PENDING ist.
Name
task_error
Type
object
Description
Fehlerdetails für fehlgeschlagene Aufgaben. Siehe Fehler für die vollständige Referenz des task_error-Objekts.
Name
consumed_credits
Type
integer
Description
Die Anzahl der von dieser Aufgabe verbrauchten Credits. Eine Aufgabe, die SUCCEEDED erreicht, wird mit dem vollen Betrag für ihre Stufe belastet. Eine Aufgabe, die nie erstellt wird (ein 4xx zum Zeitpunkt der Anfrage, einschließlich einer moderation-Ablehnung), wird überhaupt nicht belastet. Eine Aufgabe, die FAILED erreicht, gibt 0 zurück — die Belastung wird erstattet. Das Abbrechen über DELETE erstattet nur, solange die Aufgabe noch PENDING ist; eine bereits IN_PROGRESS befindliche Aufgabe bleibt belastet, da die Arbeit bereits geleistet wurde.
Name
model_urls
Type
object
Description
Herunterladbare URLs für das generierte Artefakt, indiziert nach Format. Enthält genau einen Eintrag — das über output.format der Build-Anfrage angeforderte Format. Leer, bis die Aufgabe SUCCEEDED erreicht.
Dies sind signierte URLs: Rufen Sie sie ohneAuthorization-Header ab. Sie bleiben gültig bis expires_at, das ist 3 Tage nach finished_at, und ein erneutes Auslesen der Aufgabe innerhalb dieses Zeitfensters liefert dieselbe URL zurück statt einer neu signierten. Laden Sie die Dateien vorher selbst herunter und speichern Sie sie — es gibt keine Möglichkeit, einen abgelaufenen Link zu erneuern.
Name
3mf
Type
string
Description
Herunterladbare URL zur 3MF-Datei. Ein Objekt pro Teil, jeweils mit seiner Palettenfarbe gekennzeichnet, sodass ein Multi-Filament-Slicer Filamente pro Farbe zuweist. Vorhanden, wenn output.format3mf war (Standardwert).
Der vollständige Ablauf: Erstellen eines Prototyps aus einem Foto, Abfragen bis
SUCCEEDED, Erstellen eines Builds daraus, Abfragen des Builds bis SUCCEEDED
und anschließend Herunterladen der 3MF aus model_urls.
Ein Prototyp ist in der Regel innerhalb weniger Minuten fertig; ein Build wird
typischerweise in deutlich unter einer Minute abgeschlossen. In einer echten
Integration würden Sie dem Endnutzer den Eintrag image_urls des Prototyps
anzeigen und ihn bestätigen lassen (oder den Prototyp erneut ausführen lassen),
bevor Credits für den Build ausgegeben werden.
Complete flow
POST
/openapi/creative-lab/fidget-pixel/v1
#!/usr/bin/env bashset-euopipefail# 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:-}" ]]; thenecho"export IMAGE_PATH (local file) or IMAGE_URL (public url) first">&2exit1fiPIXEL_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 bodyshift2 out=$(curl--silent--show-error--max-time60--write-out$'\n%{http_code}' \-X"$method""$url"-H"$AUTH""$@") ||return1 http_code=${out##*$'\n'} body=${out%$'\n'*}if ((http_code >=400)); thenecho"HTTP $http_code for $url: $body">&2return1fiprintf'%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:; doif (($(date +%s) >= deadline)); thenecho"gave up waiting for $kind $id">&2return1fi task_status=$(apiGET"$BASE/$kind/$id"|jq-r'.status')echo"$kind: $task_status"case"$task_status"inSUCCEEDED)return0 ;;FAILED|CANCELED)return1 ;;esacsleep"$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"'EXITif [[ -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')"inpng) 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"elsejq-n--argt"$PIXEL_TYPE"--argu"$IMAGE_URL" \'{type: $t, image_url: $u}'>"$BODY"fi# 1. Create the prototype taskPROTO_ID=$(apiPOST"$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)pollprototype"$PROTO_ID"# 3. Create the build task (defaults: square pieces, 32x32 grid, 8 mm, 8 colors, 15 mm tall)jq-n--argp"$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=$(apiPOST"$BASE/build" \-H'Content-Type: application/json'--data-binary@"$BODY"|jq-r'.result')# 4. Wait for the piecespollbuild"$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=$(apiGET"$BASE/build/$BUILD_ID")curl--silent--show-error--fail--max-time900 \-ofidget-pixel.3mf"$(jq-r '.model_urls["3mf"]' <<<"$TASK")"echo"Done: fidget-pixel.3mf"