lowpoly zostanie wycofany 30 paź 2026. Zmień model przed tymi datami, aby uniknąć błędów żądań. Zobacz wszystkie wycofania

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/prototype
  • POST /openapi/creative-lab/fidget-pixel/v1/build

Oba endpointy POST wymagają płatnego planu. Żądanie z konta na darmowym planie zwraca 402.


POST/openapi/creative-lab/fidget-pixel/v1/prototype

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

POST
/openapi/creative-lab/fidget-pixel/v1/prototype
# 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 name zadania. Dłuższa nazwa zwraca 400.

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_url lub type.
    • type nie ma wartości person ani other.
    • 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 404 lub 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.

  • 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.


POST/openapi/creative-lab/fidget-pixel/v1/build

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

POST
/openapi/creative-lab/fidget-pixel/v1/build
# 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 statusie SUCCEEDED.

    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 name zadania. Dłuższa nazwa zwraca 400.

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 siatce
    • hex: sześciokątne elementy na sześciokątnej siatce, z piece_size_mm ustawionym na 6 lub 8
  • Name
    grid_size
    Type
    integer
    domyślne 32
    Description

    Liczba komórek siatki wzdłuż każdego boku planszy, 16 lub 32. Jakakolwiek inna wartość zwraca 400. Siatka 32 zachowuje więcej szczegółów. Siatka 16 daje 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, 8 lub 10. Jakakolwiek inna wartość zwraca 400. W połączeniu z grid_size ustala rozmiar wydrukowanej planszy. Na przykład siatka 32 złożona z elementów 8 mm ma około 26,5 cm na bok.

    Wartość 10 nie działa z hex i zwraca 400, 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 1 do 8. Wartość spoza zakresu zwraca 400. Aby wydrukować, potrzebujesz do color_count plus 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 10 do 80. Wartość spoza zakresu zwraca 400.

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 plik model.3mf, zwracany w model_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_id jest 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 options wykracza poza dozwolone wartości, na przykład grid_size inny niż 16 lub 32.
    • piece_size_mm wynosi 10, a shape to hex. Elementy sześciokątne występują tylko w rozmiarach 6 i 8 mm.
    • output.format nie jest równy 3mf.

    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_id nie odpowiada żadnemu zadaniu prototypu Fidget Pixel utworzonemu przez Twoje konto za pomocą API. Prototyp utworzony w aplikacji webowej również zwraca 404. Wyślij identyfikator result z 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.


GET/openapi/creative-lab/fidget-pixel/v1/(prototype|build)/:id

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

GET
/openapi/creative-lab/fidget-pixel/v1/prototype/019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7
# 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

    id nie jest prawidłowym ID zadania. Wyślij ID result z 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 /prototype lub /build, aby dopasować zadanie.

  • Name
    500 - Internal Server Error
    Description

    Meshy nie mogło przeprowadzić kontroli własności intelektualnej. Ponów żądanie.


DELETE/openapi/creative-lab/fidget-pixel/v1/(prototype|build)/:id

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

DELETE
/openapi/creative-lab/fidget-pixel/v1/prototype/019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7
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:

    • id nie jest prawidłowym ID zadania. Prześlij ID result z odpowiedzi tworzenia.
    • Zadanie ma już status końcowy (SUCCEEDED, FAILED lub CANCELED), 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 /prototype lub /build, aby dopasować zadanie.


GET/openapi/creative-lab/fidget-pixel/v1/(prototype|build)/:id/stream

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

GET
/openapi/creative-lab/fidget-pixel/v1/build/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98/stream
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.


GET/openapi/creative-lab/fidget-pixel/v1/(prototype|build)

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

GET
/openapi/creative-lab/fidget-pixel/v1/prototype
# 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, prototype lub build.

Parametry zapytania

  • Name
    page_num
    Type
    integer
    domyślne 1
    Description

    Strona do zwrócenia, od 1 do 255. Wartość 0 zwraca pierwszą stronę. Wartość spoza zakresu 0 do 255 zwraca 400.

  • Name
    page_size
    Type
    integer
    domyślne 10
    Description

    Liczba zadań na stronę, maksymalnie 100. Wartość od 101 do 255 zwraca 100 zadań, a 0 oznacza użycie wartości domyślnej. Wartość spoza zakresu 0 do 255 zwraca 400.

  • 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

    name wysł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 kolejce
    • IN_PROGRESS: generowanie wyniku
    • SUCCEEDED: stan końcowy, z wynikiem
    • FAILED: stan końcowy, z powodem w task_error
    • CANCELED: stan końcowy, bez wyniku
  • Name
    progress
    Type
    integer
    Description

    Procent wykonanej pracy, od 0 do 100. Wynosi 0, dopóki zadanie się nie rozpocznie, i 100, 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. null do tego momentu.

  • Name
    finished_at
    Type
    timestamp
    Description

    Czas, w którym zadanie osiągnęło status końcowy, w milisekundach Unix. null do 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 po created_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. 1 oznacza, że zostanie uruchomione jako następne. 0 po opuszczeniu kolejki przez zadanie, a w wynikach list zawsze 0.

  • Name
    task_error
    Type
    object
    Description

    Powód niepowodzenia zadania. null, chyba że status to FAILED. 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 status PENDING. Jeśli Meshy nie może odczytać obciążenia, odpowiedź get lub stream pomija to pole, a żądanie list zwraca 500. 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 do expires_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 kolejce
    • IN_PROGRESS: generowanie wyniku
    • SUCCEEDED: zakończone, z wynikiem
    • FAILED: zakończone, z powodem w task_error
    • CANCELED: zakończone, bez wyniku
  • Name
    progress
    Type
    integer
    Description

    Procent wykonanej pracy, od 0 do 100. Wynosi 0, dopóki zadanie się nie rozpocznie, i 100, 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. null do tego momentu.

  • Name
    finished_at
    Type
    timestamp
    Description

    Czas osiągnięcia przez zadanie statusu końcowego, w milisekundach Unix. null do 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 po created_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. 1 oznacza, że zostanie uruchomione jako następne. 0 po opuszczeniu kolejki przez zadanie i zawsze 0 w wynikach list.

  • Name
    task_error
    Type
    object
    Description

    Powód niepowodzenia zadania. null, chyba że status to FAILED. 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 status PENDING. Jeśli Meshy nie może odczytać obciążenia, odpowiedź typu get lub stream pomija to pole, a żądanie listy zwraca 500. 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 do expires_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.format to 3mf, 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:

  1. Ustaw MESHY_API_KEY na swój klucz API.
  2. Ustaw IMAGE_PATH na ścieżkę lokalnego zdjęcia lub IMAGE_URL na publiczny adres URL obrazu.
  3. Opcjonalnie: aby pikselizować obiekt inny niż osoba, ustaw PIXEL_TYPE na other.
  4. 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

POST
/openapi/creative-lab/fidget-pixel/v1
#!/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"