Creative Lab Fidget Pixel API
Zamień zdjęcie w wielokolorową, gotową do druku 3D planszę fidget w stylu pixel-art w dwóch etapach. Zadanie prototypu zamienia zdjęcie w obraz pixel-art. Zadanie budowy zamienia ten obraz w pasujące do siebie elementy w pojedynczym pliku 3MF i wykorzystuje identyfikator zadania prototypu jako input_task_id.
POST /openapi/creative-lab/fidget-pixel/v1/prototypePOST /openapi/creative-lab/fidget-pixel/v1/build
Oba endpointy POST wymagają płatnego planu. Żądanie z konta na darmowym planie zwraca 402.
Utwórz zadanie prototypu Fidget Pixel
Generuje jeden obraz pixel-art na podstawie zdjęcia. Aby zbudować elementy, przekaż ID tego zadania do punktu końcowego budowania jako input_task_id. Informacje o polach zadania znajdziesz w sekcji Obiekt zadania prototypu Fidget Pixel.
Jeśli obraz Ci się nie podoba, utwórz kolejne zadanie prototypu. Każde zadanie jest rozliczane osobno.
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"
}
Parametry
- Name
- image_url
- Type
- string
- Wymagane
- Description
Zdjęcie do przekształcenia w pixel art, podane jako publicznie dostępny URL lub Data URI (
data:image/jpeg;base64,<your base64-encoded image data>).Obraz musi być plikiem JPG, JPEG, PNG lub WebP o rozmiarze maksymalnie 20 MB. Meshy wykrywa format na podstawie danych obrazu, a nie rozszerzenia pliku w URL-u. URL bez rozszerzenia również zadziała, a Meshy podąża za przekierowaniami.
- Name
- type
- Type
- string
- Wymagane
- Description
Co przedstawia zdjęcie — to ustawienie określa styl pixel art. Oba style wyraźnie się od siebie różnią. Każda inna wartość zwraca
400.Dostępne wartości:
person: osoba, na portrecie lub zdjęciu całej sylwetki. Meshy rysuje sprite w stylu chibi pixel art.other: dowolny inny temat, na przykład zwierzę domowe, obiekt, maskotka, logo lub krajobraz. Meshy rysuje ikonę pixelową w stylu koralikowym (bead-art).
- Name
- name
- Type
- string
- Description
Nazwa zadania, do 100 znaków. Jest zwracana w polu
namezadania. Dłuższa nazwa zwraca400.
Zwracane wartości
Pole result zawiera ID nowego zadania prototypu. Pobierz zadanie lub strumieniuj je, aż status przyjmie wartość SUCCEEDED. Następnie przekaż ID do punktu końcowego budowania jako input_task_id.
Tryby niepowodzenia
- Name
400 - Bad Request- Description
Żądanie nie może zostać uruchomione. Na przykład:
- Brakuje
image_urllubtype. typenie ma wartościpersonaniother.- Obraz nie jest plikiem JPG, JPEG, PNG ani WebP.
- Obraz jest zbyt mały, przekracza 20 MB lub przekracza maksymalną liczbę pikseli.
- Meshy nie może pobrać obrazu, na przykład ponieważ URL zwraca
404lub przekroczono limit czasu. - Data URI nie zawiera prawidłowego kodowania base64.
- Obraz został oznaczony jako NSFW.
Komunikat błędu wskazuje, jaki problem został wykryty. Popraw żądanie i wyślij je ponownie.
- Brakuje
- Name
401 - Unauthorized- Description
Brakuje klucza API lub jest on nieprawidłowy. Sprawdź nagłówek
Authorization.
- Name
402 - Payment Required- Description
Zastosowanie ma jedno z poniższych:
- Konto nie ma wystarczającej liczby kredytów.
- Klucz API, obszar roboczy lub członek osiągnął swój limit kredytów.
- Konto korzysta z planu darmowego.
Sprawdź swoje kredyty i plan, a następnie spróbuj ponownie.
- Name
403 - Forbidden- Description
Twój zespół ma włączoną funkcję IP Filtering, a Meshy oznaczyło obraz jako naruszający prawa własności intelektualnej osób trzecich. Wyślij obraz, do którego masz prawa użytkowania.
- Name
429 - Too Many Requests- Description
Osiągnięto jeden z poniższych limitów:
- Wysłano więcej żądań, niż pozwala limit szybkości. Odczekaj kilka sekund, a następnie spróbuj ponownie. Zobacz Limity szybkości.
- Zbyt wiele Twoich zadań znajduje się w kolejce lub jest wykonywanych. Poczekaj, aż niektóre się zakończą, a następnie spróbuj ponownie.
- W planie nielimitowanym bez pozostałych kredytów osiągnięto liczbę zadań, które mogą być uruchomione bez kredytów. Poczekaj na zakończenie zadania lub dodaj kredyty.
- Name
500 - Internal Server Error- Description
Meshy napotkało błąd serwera, na przykład ponieważ nie mogło przeprowadzić sprawdzenia własności intelektualnej obrazu. Meshy nie tworzy zadania i zwraca wszelkie pobrane kredyty. Spróbuj ponownie wysłać żądanie.
Utwórz zadanie budowy Fidget Pixel
Generuje elementy gotowe do druku 3D na podstawie zakończonego powodzeniem zadania prototypu. Meshy próbkuje obraz pixel-art na siatkę i redukuje go do co najwyżej color_count kolorów. Każda komórka obiektu staje się wzajemnie zazębiającym się elementem, a tło nie jest drukowane.
Wynikiem jest pojedynczy, wielokolorowy plik 3MF, gotowy do druku w kolorze. Każdy element ma szare korpus i wierzchnią część w kolorze swojego piksela. Informacje o jego polach znajdziesz w Obiekt zadania budowy 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"
}
Parametry
- Name
- input_task_id
- Type
- string
- Wymagane
- Description
Identyfikator zadania prototypu do zbudowania. Musi to być zadanie utworzone przez Twoje konto za pomocą
POST /openapi/creative-lab/fidget-pixel/v1/prototype, o statusieSUCCEEDED.Identyfikator, który nie odpowiada żadnemu z Twoich zadań prototypu Fidget Pixel z API, zwraca
404, w tym również prototyp utworzony w aplikacji webowej.
- Name
- name
- Type
- string
- Description
Nazwa zadania, maksymalnie 100 znaków. Jest zwracana w polu
namezadania. Dłuższa nazwa zwraca400.
options
Ustawienia kształtu i rozmiaru elementów. Każde pole ma wartość domyślną, więc wyślij tylko te pola, które chcesz zmienić. Wartość 0 używa wartości domyślnej pola. Są to te same ustawienia, co w aplikacji webowej Creative Lab. Pozostałe ustawienia kształtu są stałe, a Meshy ustala je na podstawie shape i piece_size_mm.
- Name
- shape
- Type
- string
- domyślne square
- Description
Zarys każdego elementu. Jakakolwiek inna wartość zwraca
400.Dostępne wartości:
square: kwadratowe elementy na kwadratowej siatcehex: sześciokątne elementy na sześciokątnej siatce, zpiece_size_mmustawionym na6lub8
- Name
- grid_size
- Type
- integer
- domyślne 32
- Description
Liczba komórek siatki wzdłuż każdego boku planszy,
16lub32. Jakakolwiek inna wartość zwraca400. Siatka32zachowuje więcej szczegółów. Siatka16daje mniej elementów o tym samym rozmiarze, więc plansza jest około dwa razy węższa.
- Name
- piece_size_mm
- Type
- integer
- domyślne 8
- Description
Długość krawędzi każdego elementu w milimetrach,
6,8lub10. Jakakolwiek inna wartość zwraca400. W połączeniu zgrid_sizeustala rozmiar wydrukowanej planszy. Na przykład siatka32złożona z elementów 8 mm ma około 26,5 cm na bok.Wartość
10nie działa zhexi zwraca400, ponieważ pochylona ścianka sześciokąta zwisa na większości konsumenckich drukarek FDM.
- Name
- color_count
- Type
- integer
- domyślne 8
- Description
Maksymalna liczba kolorów w palecie pixel-art, od
1do8. Wartość spoza zakresu zwraca400. Aby wydrukować, potrzebujesz docolor_countplus jeden filamentów, po jednym na kolor i jednym na szare korpusy.
- Name
- piece_height_mm
- Type
- integer
- domyślne 15
- Description
Wysokość każdego elementu w milimetrach, od
10do80. Wartość spoza zakresu zwraca400.
output
Ustawienia pliku wynikowego.
- Name
- format
- Type
- string
- domyślne 3mf
- Description
Format pliku wynikowego. Jakakolwiek inna wartość zwraca
400.Dostępne wartości:
3mf: jeden wielokolorowy plikmodel.3mf, zwracany wmodel_urls.3mf
Zwraca
Pole result zawiera identyfikator nowego zadania budowy. Pobierz zadanie lub strumieniuj je, aż status będzie równy SUCCEEDED. Następnie pobierz plik 3MF z model_urls.3mf.
Tryby niepowodzenia
- Name
400 - Bad Request- Description
Żądanie nie może zostać wykonane. Na przykład:
input_task_idjest brakujące lub nie jest poprawnym identyfikatorem zadania.- Status zadania prototypu nie jest
SUCCEEDED. Jeśli nadal trwa, poczekaj i spróbuj ponownie. Jeśli zakończyło się niepowodzeniem lub zostało anulowane, utwórz nowe zadanie prototypu. - Zadanie prototypu zakończyło się powodzeniem, ale nie ma obrazu. Utwórz nowe zadanie prototypu.
- Pole w
optionswykracza poza dozwolone wartości, na przykładgrid_sizeinny niż16lub32. piece_size_mmwynosi10, ashapetohex. Elementy sześciokątne występują tylko w rozmiarach 6 i 8 mm.output.formatnie jest równy3mf.
Komunikat błędu wskazuje, jaki problem wykryto.
- Name
401 - Unauthorized- Description
Brak klucza API lub jest on nieprawidłowy. Sprawdź nagłówek
Authorization.
- Name
402 - Payment Required- Description
Zastosowanie ma jedna z poniższych sytuacji:
- Konto nie ma wystarczającej liczby kredytów.
- Klucz API, obszar roboczy lub członek osiągnął swój limit kredytów.
- Konto korzysta z planu darmowego.
Sprawdź swoje kredyty i plan, a następnie spróbuj ponownie.
- Name
403 - Forbidden- Description
Twój zespół ma włączone IP Filtering, a Meshy oznaczyło obraz zadania prototypu jako naruszający prawa własności intelektualnej osób trzecich. Utwórz zadanie prototypu na podstawie obrazu, do którego masz prawa użycia.
- Name
404 - Not Found- Description
input_task_idnie odpowiada żadnemu zadaniu prototypu Fidget Pixel utworzonemu przez Twoje konto za pomocą API. Prototyp utworzony w aplikacji webowej również zwraca404. Wyślij identyfikatorresultz odpowiedzi tworzenia prototypu.
- Name
429 - Too Many Requests- Description
Osiągnięto jeden z poniższych limitów:
- Wysłano więcej żądań, niż pozwala Twój limit szybkości. Poczekaj kilka sekund, a następnie spróbuj ponownie. Zobacz Limity szybkości.
- Zbyt wiele Twoich zadań jest w kolejce lub w trakcie wykonywania. Poczekaj, aż część z nich się zakończy, a następnie spróbuj ponownie.
- Przy planie nielimitowanym bez pozostałych kredytów osiągnięto liczbę zadań, które mogą być uruchomione bez kredytów. Poczekaj, aż zadanie się zakończy, lub dodaj kredyty.
- Name
500 - Internal Server Error- Description
Meshy napotkało błąd serwera, na przykład z powodu niemożności przeprowadzenia kontroli własności intelektualnej obrazu zadania prototypu. Meshy nie tworzy zadania i zwraca wszelkie pobrane kredyty. Spróbuj ponownie wysłać żądanie.
Pobierz zadanie Fidget Pixel
Zwraca zadanie prototypu lub budowy. Ścieżka musi odpowiadać etapowi zadania. Zadanie budowy, o które poproszono przez /prototype/:id, zwraca 404, podobnie jak zadanie prototypu, o które poproszono przez /build/:id.
Opis pól znajdziesz w sekcjach Obiekt zadania prototypu Fidget Pixel oraz Obiekt zadania budowy 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=***"
}
}
Parametry
- Name
- id
- Type
- path
- Description
ID zadania z odpowiedzi tworzenia.
Zwraca
Obiekt zadania prototypu lub obiekt zadania budowy, zgodnie z etapem wskazanym w ścieżce.
Tryby niepowodzenia
- Name
400 - Bad Request- Description
idnie jest prawidłowym ID zadania. Wyślij IDresultz odpowiedzi tworzenia.
- Name
403 - Forbidden- Description
Twój zespół ma włączone Filtrowanie IP, a Meshy oznaczyło obraz zadania prototypu jako naruszający prawa własności intelektualnej osób trzecich. Zadania budowy oraz zespoły w planie Enterprise nie otrzymują tego błędu. Utwórz zadanie prototypu na podstawie obrazu, do którego masz prawa użytkowania.
- Name
404 - Not Found- Description
Żadne zadanie Fidget Pixel o tym ID nie należy do Twojego konta, lub etap zadania nie odpowiada ścieżce. Sprawdź ID i użyj
/prototypelub/build, aby dopasować zadanie.
- Name
500 - Internal Server Error- Description
Meshy nie mogło przeprowadzić kontroli własności intelektualnej. Ponów żądanie.
Usuwanie zadania Fidget Pixel
Anuluje zadanie Fidget Pixel. Anulowanie zadania o statusie PENDING zwraca kredyty. Zadanie o statusie IN_PROGRESS zostaje anulowane bez zwrotu kredytów, ponieważ worker już je rozpoczął. Zadania ze statusem końcowym (SUCCEEDED, FAILED lub CANCELED) nie można anulować.
Ścieżka musi odpowiadać etapowi zadania. Na przykład DELETE na /prototype/:id z ID zadania typu build zwraca 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).
Parametry ścieżki
- Name
- id
- Type
- path
- Description
ID zadania do anulowania.
Zwraca
204 No Content z pustym ciałem odpowiedzi.
Tryby błędów
- Name
400 - Bad Request- Description
Zastosowanie ma jedno z poniższych:
idnie jest prawidłowym ID zadania. Prześlij IDresultz odpowiedzi tworzenia.- Zadanie ma już status końcowy (
SUCCEEDED,FAILEDlubCANCELED), więc nie można go anulować.
- Name
404 - Not Found- Description
Żadne zadanie Fidget Pixel o tym ID nie należy do Twojego konta lub etap zadania nie odpowiada ścieżce. Sprawdź ID i użyj
/prototypelub/build, aby dopasować zadanie.
Strumieniowanie zadania Fidget Pixel
Strumieniuje aktualizacje zadania Fidget Pixel jako zdarzenia Server-Sent Events (SSE). Ścieżka musi odpowiadać etapowi zadania. Jeśli tak nie jest, na przykład gdy identyfikator zadania typu build zostanie podany pod /prototype/:id/stream, strumień wysyła jedno zdarzenie error ze status_code: 404 i zostaje zamknięty. id, który nie jest prawidłowym identyfikatorem zadania, powoduje to samo ze 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=***"
}
}
Parametry
- Name
- id
- Type
- path
- Description
Identyfikator zadania z odpowiedzi tworzenia.
Zwraca
Strumień obiektów zadania prototype lub build. Każde zdarzenie zawiera pełny obiekt zadania, taki jaki zwraca Pobieranie zadania Fidget Pixel. Gdy zadanie ma status PENDING lub IN_PROGRESS, jego pola wyjściowe są wciąż puste (null, [] lub {}), a finished_at ma wartość null.
Jeśli IP Filtering blokuje wynik zadania, strumień w jego miejsce wysyła jedno zdarzenie error, z status_code, które zwróciłoby zapytanie typu get.
Lista zadań Fidget Pixel
Zwraca Twoje zadania Fidget Pixel z jednego etapu, po jednej stronie na raz. Ścieżka określa etap. /prototype zwraca tylko zadania typu prototype, a /build zwraca tylko zadania typu 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=***"
]
}
]
Parametry ścieżki
- Name
- stage
- Type
- path
- Wymagane
- Description
Etap do wylistowania,
prototypelubbuild.
Parametry zapytania
- Name
- page_num
- Type
- integer
- domyślne 1
- Description
Strona do zwrócenia, od
1do255. Wartość0zwraca pierwszą stronę. Wartość spoza zakresu0do255zwraca400.
- Name
- page_size
- Type
- integer
- domyślne 10
- Description
Liczba zadań na stronę, maksymalnie
100. Wartość od101do255zwraca 100 zadań, a0oznacza użycie wartości domyślnej. Wartość spoza zakresu0do255zwraca400.
- Name
- sort_by
- Type
- string
- domyślne -created_at
- Description
Kolejność sortowania.
Dostępne wartości:
-created_at: od najnowszych+created_at: od najstarszych
Zwraca
Tablicę obiektów zadania prototypu lub obiektów zadania build, odpowiadającą etapowi podanemu w ścieżce.
Obiekt zadania prototypu Fidget Pixel
Zadanie prototypu zamienia zdjęcie w obraz pixel-art. Aby zamienić obraz na elementy gotowe do druku 3D, przekaż ID zadania do punktu końcowego kompilacji jako input_task_id.
Właściwości
Example Fidget Pixel Prototype Task Object
{
"id": "019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7",
"type": "creative-lab-fidget-pixel-prototype",
"name": "",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1757001000000,
"started_at": 1757001005000,
"finished_at": 1757001178000,
"expires_at": 1757260378000,
"preceding_tasks": 0,
"task_error": null,
"consumed_credits": 6,
"image_urls": [
"https://assets.meshy.ai/***/pixel-art.jpg?Expires=***"
]
}
- Name
- id
- Type
- string
- Description
ID zadania. Nie polegaj na jego formacie.
- Name
- type
- Type
- string
- Description
Typ zadania, zawsze
creative-lab-fidget-pixel-prototype.
- Name
- name
- Type
- string
- Description
namewysłana podczas tworzenia zadania, lub"", jeśli jej nie wysłano.
- Name
- status
- Type
- string
- Description
Status zadania.
Dostępne wartości:
PENDING: oczekiwanie w kolejceIN_PROGRESS: generowanie wynikuSUCCEEDED: stan końcowy, z wynikiemFAILED: stan końcowy, z powodem wtask_errorCANCELED: stan końcowy, bez wyniku
- Name
- progress
- Type
- integer
- Description
Procent wykonanej pracy, od
0do100. Wynosi0, dopóki zadanie się nie rozpocznie, i100, gdy zakończy się sukcesem.
- Name
- created_at
- Type
- timestamp
- Description
Czas utworzenia zadania, w milisekundach Unix.
- Name
- started_at
- Type
- timestamp
- Description
Czas, w którym worker rozpoczął zadanie, w milisekundach Unix.
nulldo tego momentu.
- Name
- finished_at
- Type
- timestamp
- Description
Czas, w którym zadanie osiągnęło status końcowy, w milisekundach Unix.
nulldo tego momentu.
- Name
- expires_at
- Type
- timestamp
- Description
Czas wygaśnięcia wyniku zadania, w milisekundach Unix. Przypada 3 dni po
finished_atlub 3 dni pocreated_at, dopóki zadanie się nie zakończy. W przypadku kont Enterprise, które przechowują wyniki API bezterminowo, jest to około 100 lat później. Zobacz Przechowywanie zasobów.
- Name
- preceding_tasks
- Type
- integer
- Description
Pozycja zadania w kolejce, gdy ma status
PENDING.1oznacza, że zostanie uruchomione jako następne.0po opuszczeniu kolejki przez zadanie, a w wynikach list zawsze0.
- Name
- task_error
- Type
- object
- Description
Powód niepowodzenia zadania.
null, chyba żestatustoFAILED. Zobacz Błędy.
- Name
- consumed_credits
- Type
- integer
- Description
Liczba kredytów naliczonych za zadanie, po uwzględnieniu ewentualnego zwrotu. Żądanie, które zwraca błąd, nie jest obciążane. Nieudane zadanie ma wartość
0, ponieważ Meshy zwraca za nie kredyty. Anulowanie powoduje zwrot kredytów za zadanie tylko wtedy, gdy ma ono statusPENDING. Jeśli Meshy nie może odczytać obciążenia, odpowiedź get lub stream pomija to pole, a żądanie list zwraca500. W takim przypadku ponów żądanie.
- Name
- image_urls
- Type
- array of strings
- Description
Adresy URL do pobrania obrazu pixel-art. Tablica zawiera jeden adres URL po pomyślnym zakończeniu zadania, a do tego czasu jest pusta.
Adresy URL są podpisane, więc pobieraj je bez nagłówka
Authorization. Pozostają ważne doexpires_at. Ponowne pobranie zadania przed tym czasem zwraca te same adresy URL, a nie nowo podpisane. Wygasłego adresu URL nie można odświeżyć, więc pobierz i zapisz pliki przed tym terminem.
Obiekt zadania budowy Fidget Pixel
Zadanie budowy generuje elementy do druku 3D na podstawie zakończonego sukcesem zadania prototypu. Meshy próbkuje obraz pixel-art na siatkę i zwraca elementy w jednym wielokolorowym pliku 3MF.
Właściwości
Example Fidget Pixel Build Task Object
{
"id": "019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98",
"type": "creative-lab-fidget-pixel-build",
"name": "",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1757001300000,
"started_at": 1757001304000,
"finished_at": 1757001309000,
"expires_at": 1757260509000,
"preceding_tasks": 0,
"task_error": null,
"consumed_credits": 30,
"model_urls": {
"3mf": "https://assets.meshy.ai/***/tasks/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98/output/model.3mf?Expires=***"
}
}
- Name
- id
- Type
- string
- Description
ID zadania. Nie polegaj na jego formacie.
- Name
- type
- Type
- string
- Description
Typ zadania, zawsze
creative-lab-fidget-pixel-build.
- Name
- name
- Type
- string
- Description
Wartość
name, którą wysłano podczas tworzenia zadania, lub"", jeśli jej nie wysłano.
- Name
- status
- Type
- string
- Description
Status zadania.
Dostępne wartości:
PENDING: oczekuje w kolejceIN_PROGRESS: generowanie wynikuSUCCEEDED: zakończone, z wynikiemFAILED: zakończone, z powodem wtask_errorCANCELED: zakończone, bez wyniku
- Name
- progress
- Type
- integer
- Description
Procent wykonanej pracy, od
0do100. Wynosi0, dopóki zadanie się nie rozpocznie, i100, gdy zakończy się sukcesem.
- Name
- created_at
- Type
- timestamp
- Description
Czas utworzenia zadania, w milisekundach Unix.
- Name
- started_at
- Type
- timestamp
- Description
Czas rozpoczęcia zadania przez worker, w milisekundach Unix.
nulldo tego momentu.
- Name
- finished_at
- Type
- timestamp
- Description
Czas osiągnięcia przez zadanie statusu końcowego, w milisekundach Unix.
nulldo tego momentu.
- Name
- expires_at
- Type
- timestamp
- Description
Czas wygaśnięcia wyniku zadania, w milisekundach Unix. Przypada 3 dni po
finished_at, lub 3 dni pocreated_at, dopóki zadanie się nie zakończy. W przypadku kont Enterprise, które przechowują wyniki API bezterminowo, jest to około 100 lat później. Zobacz Przechowywanie zasobów.
- Name
- preceding_tasks
- Type
- integer
- Description
Pozycja zadania w kolejce, gdy ma status
PENDING.1oznacza, że zostanie uruchomione jako następne.0po opuszczeniu kolejki przez zadanie i zawsze0w wynikach list.
- Name
- task_error
- Type
- object
- Description
Powód niepowodzenia zadania.
null, chyba żestatustoFAILED. Zobacz Błędy.
- Name
- consumed_credits
- Type
- integer
- Description
Liczba kredytów naliczonych za zadanie, po uwzględnieniu ewentualnego zwrotu. Żądanie zwracające błąd nie jest obciążane. Nieudane zadanie ma wartość
0, ponieważ Meshy zwraca za nie kredyty. Anulowanie powoduje zwrot kredytów tylko wtedy, gdy zadanie ma statusPENDING. Jeśli Meshy nie może odczytać obciążenia, odpowiedź typu get lub stream pomija to pole, a żądanie listy zwraca500. W takim przypadku ponów żądanie.
- Name
- model_urls
- Type
- object
- Description
Adresy URL do pobrania wyniku, z kluczem w postaci formatu pliku. Obiekt zawiera jeden wpis, dla formatu
output.format, który został wysłany, i jest pusty, dopóki zadanie nie zakończy się sukcesem.Adresy URL są podpisane, więc pobieraj je bez nagłówka
Authorization. Pozostają ważne doexpires_at. Ponowne pobranie zadania przed tym czasem zwraca te same adresy URL, a nie nowo podpisane. Wygasłego adresu URL nie można odświeżyć, więc pobierz i zapisz pliki przed tym terminem.- Name
3mf- Type
- string
- Description
Adres URL do pobrania wielokolorowego pliku 3MF. Każdy element ma szare korpus i wierzchnią część w kolorze swojego piksela. Obecny, gdy
output.formatto3mf, co jest wartością domyślną.
Kompletny przykład end-to-end
Poniższe skrypty cURL i Python uruchamiają cały przepływ. Każdy skrypt tworzy zadanie prototype ze zdjęcia i czeka na jego powodzenie. Następnie tworzy zadanie build, czeka na jego zakończenie i pobiera plik 3MF z model_urls.3mf.
Skrypt cURL wymaga curl i jq, a skrypt Python wymaga pakietu requests. Aby uruchomić skrypt, wykonaj następujące kroki:
- Ustaw
MESHY_API_KEYna swój klucz API. - Ustaw
IMAGE_PATHna ścieżkę lokalnego zdjęcia lubIMAGE_URLna publiczny adres URL obrazu. - Opcjonalnie: aby pikselizować obiekt inny niż osoba, ustaw
PIXEL_TYPEnaother. - Uruchom skrypt.
Zadanie prototype zwykle kończy się w ciągu kilku minut. Zadanie build zwykle kończy się w znacznie krótszym czasie niż minuta.
W swojej aplikacji pokaż użytkownikowi obraz z image_urls przed utworzeniem zadania build. Jeśli mu się nie spodoba, utwórz zamiast tego kolejne zadanie prototype. Dzięki temu kredyty za build wydajesz tylko na obraz, który użytkownik zaakceptuje.
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"