Auto Split API

Podziel model 3D na oddzielnie drukowalne części — automatycznie, według nazwanych przez Ciebie części lub według regionów kolorystycznych — z opcjonalnymi łącznikami; cienkie obszary pozostawione przez cięcie są zawsze wzmacniane, dzięki czemu każda część drukuje się w pełni.


POST/openapi/v1/print/split

Utwórz zadanie Auto Split

Ten punkt końcowy tworzy nowe zadanie Auto Split. Zadanie przecina model z poprzedniego zadania na osobne, drukowalne części i zwraca podzielony model, w którym każda część jest osobnym obiektem w pliku.

Parametry

  • Name
    input_task_id
    Type
    string
    Wymagane
    Description

    ID zakończonego powodzeniem zadania, którego model ma zostać podzielony. Obsługiwane typy zadań: Obraz na 3D, Wiele obrazów na 3D, Tekst na 3D (podgląd), Remesh, Konwertuj oraz Zmień rozmiar. Zadanie musi mieć status SUCCEEDED, a jego model musi być wygenerowany za pomocą Meshy 6 lub Meshy 7 (ai_model meshy-6, meshy-7 lub latest). Modele low-poly oraz Smart Topology (meshy-t2) nie są obsługiwane.

  • Name
    mode
    Type
    string
    domyślne auto
    Description

    Sposób podziału modelu na części.

    Dostępne wartości:

    • auto: Meshy samodzielnie wybiera miejsca cięć. prompt jest ignorowany.
    • by_parts: Cięcie wzdłuż nazwanych w prompt części strukturalnych, takich jak głowa, ramiona i tułów.
    • by_color: Cięcie wzdłuż obszarów kolorystycznych nazwanych w prompt. Wymaga danych wejściowych wygenerowanych na podstawie przesłanego obrazu (Obraz na 3D lub Wiele obrazów na 3D); inne dane wejściowe są odrzucane z kodem 400.
Dotyczy tylko gdy mode = by_parts or by_color
  • Name
    prompt
    Type
    string
    Wymagane
    Description

    Opisuje części, na jakie ma nastąpić podział, w dowolnym języku. Meshy odczytuje z niego od 1 do 10 nazw części, więc należy nazywać elementy, a nie opisywać model — na przykład podziel na figurkę i podstawę lub głowa, tułów, lewe ramię, prawe ramię, nogi. Maksymalnie 600 znaków. Istnieją dwa tryby niepowodzenia: opis, który brzmi jak podział, ale nazywa mniej niż dwie części (na przykład podziel na poszczególne części), jest odrzucany z kodem 400 i nic nie jest naliczane; opis, którego Meshy w ogóle nie potrafi odczytać, przechodzi w tryb awaryjny auto, zadanie mimo to jest wykonywane i naliczane, a w odpowiedzi pojawia się prompt_ignored: true.

  • Name
    target_formats
    Type
    array
    domyślne ["glb"]
    Description

    Formaty, w jakich ma zostać wyeksportowany podzielony model. Każda część jest osobnym obiektem w każdym formacie. glb jest zawsze generowany i zwracany w model_urls; wymień dodatkowo dowolne inne formaty, których potrzebujesz.

    Dostępne wartości: glb, obj, fbx, usdz, blend, 3mf.

    3mf jest zapisywany z myślą o slicerach: jeden obiekt na część, każdy na własnym slocie filamentu, dzięki czemu Bambu Studio otwiera plik jako indywidualnie kolorowane, oddzielnie zaznaczalne części (archiwum zawiera konfigurację projektu Bambu Studio; inne slicery odczytują samą geometrię). Podobnie jak inne formaty wydruku w Meshy, jest on wyrażony w milimetrach i ponieważ ten punkt końcowy nie przyjmuje docelowego rozmiaru, cały model jest skalowany tak, aby jego najdłuższy bok wynosił 150 mm — taki sam limit stosowany jest w eksportach do pozostałych formatów wydruku, dobrany tak, aby zmieścić się na każdym typowym stole roboczym. Przy layout: "on_plate" limit odnosi się do całego rozłożonego stołu, dzięki czemu plik jest gotowy do cięcia na warstwy; przy assembled części pozostają w położeniu, jakie miały w modelu źródłowym, i to Ty rozmieszczasz je w slicerze.

  • Name
    layout
    Type
    string
    domyślne assembled
    Description

    Sposób rozmieszczenia części w każdym formacie wyjściowym oraz na miniaturze.

    Dostępne wartości:

    • assembled: Części pozostają w położeniu, jakie miały w modelu źródłowym.
    • on_plate: Części są ułożone płasko i rozłożone na stole roboczym, gotowe do cięcia na warstwy — tak samo jak w widoku On Plate w aplikacji webowej.

    W obu układach eksportowane pliki zawierają jeden obiekt na część i nic poza tym: zapadnięty fragment lub przypominająca punkt resztka pozostała po cięciu jest usuwana przed eksportem, więc każdy obiekt znaleziony w pliku nadaje się do druku.

  • Name
    connectors
    Type
    boolean
    domyślne false
    Description

    Dodaje łączniki typu czop-gniazdo w każdym miejscu cięcia, aby wydrukowane części do siebie pasowały.

Dotyczy tylko gdy connectors = true
  • Name
    connector_type
    Type
    string
    domyślne cube
    Description

    Kształt łącznika na każdej powierzchni cięcia.

    Dostępne wartości: cube, cylinder.

  • Name
    connector_size
    Type
    number
    domyślne 0.5
    Description

    Rozmiar łącznika względem powierzchni cięcia.

    Prawidłowy zakres: od 0.1 do 0.8.

  • Name
    connector_height
    Type
    number
    domyślne 0.1
    Description

    Jak daleko łącznik wystaje z powierzchni cięcia, względem powierzchni cięcia.

    Prawidłowy zakres: od 0.1 do 0.8.

Zwracane wartości

Właściwość result odpowiedzi zawiera id nowo utworzonego zadania Auto Split.

Tryby niepowodzenia

  • Name
    400 - Bad Request
    Description

    Żądanie było nieprawidłowe. Typowe przyczyny:

    • Brak promptu: prompt jest wymagany, gdy mode ma wartość by_parts lub by_color.
    • Prompt nazywa mniej niż dwie części: by_parts / by_color wymaga co najmniej dwóch nazwanych elementów (na przykład głowa, tułów, podstawa); ogólne polecenie, takie jak podziel na poszczególne części, jest odrzucane. Nic nie jest naliczane.
    • Nieobsługiwane zadanie wejściowe: input_task_id musi wskazywać zakończone powodzeniem zadanie obsługiwanego typu, wygenerowane za pomocą Meshy 6 lub Meshy 7.
    • Teksturowane dane wejściowe: Model wejściowy zawiera tekstury. Na razie obsługiwane są tylko modele bez tekstur.
    • Brak obrazu referencyjnego: by_color wymaga danych wejściowych wygenerowanych na podstawie przesłanego obrazu.
    • Nieobsługiwany format: target_formats zawiera stl.
    • Łącznik poza zakresem: connector_size lub connector_height znajduje się poza zakresem od 0.1 do 0.8.
  • Name
    401 - Unauthorized
    Description

    Uwierzytelnianie nie powiodło się. Sprawdź swój klucz API.

  • Name
    402 - Payment Required
    Description

    Niewystarczająca liczba kredytów, aby wykonać to zadanie.

  • Name
    404 - Not Found
    Description

    input_task_id nie istnieje lub nie należy do Twojego konta.

  • Name
    429 - Too Many Requests
    Description

    Przekroczono limit szybkości. Żądania by_parts i by_color mają wspólny limit analizy promptu wynoszący 12 żądań na minutę na konto.

  • Name
    503 - Service Unavailable
    Description

    Podział oparty na promptach (by_parts i by_color) jest tymczasowo niedostępny. Spróbuj ponownie później lub użyj mode: "auto", na który to ograniczenie nie ma wpływu. Nic nie jest naliczane.

Request

POST
/openapi/v1/print/split
# Simple request: let Meshy choose the cuts
curl https://api.meshy.ai/openapi/v1/print/split \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
    "input_task_id": "018a210d-8ba4-705c-b111-1f1776f7f578"
  }'

# Advanced request: name the parts, add connectors, export glb and obj
curl https://api.meshy.ai/openapi/v1/print/split \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
    "input_task_id": "018a210d-8ba4-705c-b111-1f1776f7f578",
    "mode": "by_parts",
    "prompt": "split into the figure and the base",
    "target_formats": ["glb", "obj"],
    "layout": "on_plate",
    "connectors": true,
    "connector_type": "cylinder",
    "connector_size": 0.4
  }'

Response

{
  "result": "0193bfc5-ee4f-73f8-8525-44b398884ce9"
}

GET/openapi/v1/print/split/:id

Pobierz zadanie Auto Split

Ten punkt końcowy pobiera zadanie Auto Split na podstawie jego ID.

Parametry

  • Name
    id
    Type
    path
    Description

    ID zadania Auto Split, które ma zostać pobrane.

Zwraca

Obiekt zadania Auto Split.

Request

GET
/openapi/v1/print/split/a43b5c6d-7e8f-901a-234b-567c890d1e2f
curl https://api.meshy.ai/openapi/v1/print/split/a43b5c6d-7e8f-901a-234b-567c890d1e2f \
-H "Authorization: Bearer ${YOUR_API_KEY}"

Response

{
  "id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
  "type": "print-split",
  "model_urls": {
    "glb": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.glb?Expires=***",
    "obj": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.obj?Expires=***"
  },
  "thumbnail_url": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/preview.png?Expires=***",
  "part_count": 4,
  "progress": 100,
  "status": "SUCCEEDED",
  "created_at": 1699999999000,
  "started_at": 1700000000000,
  "finished_at": 1700000082000,
  "task_error": null,
  "consumed_credits": 10
}

DELETE/openapi/v1/print/split/:id

Usuń zadanie Auto Split

Ten punkt końcowy trwale usuwa zadanie Auto Split, wraz ze wszystkimi powiązanymi modelami i danymi. Ta czynność jest nieodwracalna.

Parametry ścieżki

  • Name
    id
    Type
    path
    Description

    ID zadania Auto Split do usunięcia.

Zwraca

Zwraca 200 OK w przypadku powodzenia.

Request

DELETE
/openapi/v1/print/split/a43b5c6d-7e8f-901a-234b-567c890d1e2f
curl --request DELETE \
  --url https://api.meshy.ai/openapi/v1/print/split/a43b5c6d-7e8f-901a-234b-567c890d1e2f \
  -H "Authorization: Bearer ${YOUR_API_KEY}"

Response

// Returns 200 Ok on success.

GET/openapi/v1/print/split

Lista zadań Auto Split

Ten punkt końcowy umożliwia pobranie listy zadań Auto Split.

Parametry

Opcjonalne atrybuty

  • Name
    page_num
    Type
    integer
    Description

    Numer strony na potrzeby stronicowania. Zaczyna się od 1 i domyślnie ma tę wartość.

  • Name
    page_size
    Type
    integer
    Description

    Limit rozmiaru strony. Domyślnie 10 elementów. Maksymalna dozwolona wartość to 100 elementów; większe wartości są ograniczane do 100.

  • Name
    sort_by
    Type
    string
    Description

    Pole, według którego ma nastąpić sortowanie. Dostępne wartości:

    • +created_at: Sortowanie według czasu utworzenia w kolejności rosnącej.
    • -created_at: Sortowanie według czasu utworzenia w kolejności malejącej.

Zwraca

Zwraca stronicowaną listę obiektów zadania Auto Split.

Request

GET
/openapi/v1/print/split
curl https://api.meshy.ai/openapi/v1/print/split?page_size=10 \
-H "Authorization: Bearer ${YOUR_API_KEY}"

Response

[
  {
    "id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
    "type": "print-split",
    "model_urls": {
      "glb": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.glb?Expires=***"
    },
    "thumbnail_url": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/preview.png?Expires=***",
    "part_count": 4,
    "progress": 100,
    "status": "SUCCEEDED",
    "preceding_tasks": 0,
    "created_at": 1699999999000,
    "started_at": 1700000000000,
    "finished_at": 1700000082000,
    "task_error": null,
    "consumed_credits": 10
  }
]

GET/openapi/v1/print/split/:id/stream

Strumieniowanie zadania Auto Split

Ten punkt końcowy strumieniuje aktualizacje w czasie rzeczywistym dla zadania Auto Split przy użyciu Server-Sent Events (SSE).

Parametry

  • Name
    id
    Type
    path
    Description

    Unikalny identyfikator zadania Auto Split, które ma być strumieniowane.

Zwraca

Zwraca strumień obiektów zadania Auto Split jako Server-Sent Events.

Każde zdarzenie message zawiera pełny obiekt zadania, tak jak jest on zwracany przez Pobieranie zadania Auto Split, w tym consumed_credits, znaczniki czasu oraz prompt_ignored; gdy zadanie ma status PENDING lub IN_PROGRESS, pola, które zmieniają się między klatkami, to progress, status, started_at oraz preceding_tasks, natomiast model_urls, thumbnail_url, part_count i parts pojawiają się dopiero po osiągnięciu statusu SUCCEEDED. Zdarzenie error zawiera wyłącznie status_code i message, dlatego przed odczytaniem status należy rozgałęzić logikę na podstawie nazwy zdarzenia.

Request

GET
/openapi/v1/print/split/a43b5c6d-7e8f-901a-234b-567c890d1e2f/stream
curl -N https://api.meshy.ai/openapi/v1/print/split/a43b5c6d-7e8f-901a-234b-567c890d1e2f/stream \
-H "Authorization: Bearer ${YOUR_API_KEY}"

Response Stream

// Error event example
event: error
data: {
  "status_code": 404,
  "message": "Task not found"
}

// Message event examples illustrate task progress (other task fields omitted here for brevity;
// each frame is the full task object).
event: message
data: {
  "id": "a43b5c6d-7e8f-901a-234b-567c890d1e2f",
  "progress": 0,
  "status": "PENDING"
}

event: message
data: {
  "id": "a43b5c6d-7e8f-901a-234b-567c890d1e2f",
  "type": "print-split",
  "model_urls": {
    "glb": "https://assets.meshy.ai/***/tasks/a43b5c6d-7e8f-901a-234b-567c890d1e2f/output/model.glb?Expires=***"
  },
  "thumbnail_url": "https://assets.meshy.ai/***/tasks/a43b5c6d-7e8f-901a-234b-567c890d1e2f/output/preview.png?Expires=***",
  "part_count": 4,
  "progress": 100,
  "status": "SUCCEEDED",
  "preceding_tasks": 0,
  "created_at": 1699999999000,
  "started_at": 1700000000000,
  "finished_at": 1700000082000,
  "task_error": null,
  "consumed_credits": 10
}

The Auto Split Task Object

Zadanie Auto Split zawiera wyłącznie poniższe właściwości. Pola dotyczące promptu generowania, które zawierają inne obiekty zadań (name, object_prompt, texture_prompt i tak dalej), pojedyncze model_url oraz texture_urls nigdy nie są wypełniane w przypadku podziału i nie są zwracane. Właściwości, które są uzupełniane w trakcie wykonywania zadania (thumbnail_url, model_urls, znaczniki czasu), są zawsze obecne, puste do momentu uzyskania wartości, więc zestaw kluczy nie zmienia się między PENDING a SUCCEEDED.

  • Name
    id
    Type
    string
    Description

    Unikalny identyfikator zadania. Choć jako szczegół implementacyjny używamy dla identyfikatorów zadań UUID z możliwością sortowania po kluczu (k-sortable), nie należy zakładać niczego co do formatu tego identyfikatora.

  • Name
    type
    Type
    string
    Description

    Typ zadania. Wartość to print-split.

  • Name
    model_urls
    Type
    object
    Description

    Adresy URL do pobrania podzielonego modelu, po jednym dla każdego żądanego formatu. Każda część jest osobnym obiektem w pliku. Właściwość dla danego formatu zostanie pominięta, jeśli ten format nie został zażądany.

    • Name
      glb
      Type
      string
      Description

      Adres URL do pobrania podzielonego modelu w formacie GLB.

    • Name
      obj
      Type
      string
      Description

      Adres URL do pobrania podzielonego modelu w formacie OBJ.

    • Name
      fbx
      Type
      string
      Description

      Adres URL do pobrania podzielonego modelu w formacie FBX.

    • Name
      usdz
      Type
      string
      Description

      Adres URL do pobrania podzielonego modelu w formacie USDZ.

    • Name
      blend
      Type
      string
      Description

      Adres URL do pobrania podzielonego modelu w formacie Blender.

    • Name
      3mf
      Type
      string
      Description

      Adres URL do pobrania podzielonego modelu w formacie 3MF: jeden obiekt na część, każda na własnym slocie filamentu, w milimetrach, przeskalowany tak, aby najdłuższy bok miał 150 mm, wraz z konfiguracją projektu Bambu Studio.

  • Name
    thumbnail_url
    Type
    string
    Description

    Adres URL do pobrania renderowanego podglądu podzielonego modelu, z każdą częścią w odrębnym kolorze, w żądanym layout.

  • Name
    prompt_ignored
    Type
    boolean
    Description

    true, gdy prompt żądania by_parts lub by_color nie wskazywał żadnych części, więc Meshy podzieliło model automatycznie — nazwy części w wyniku pochodzą od Meshy, a nie od Ciebie. Obecne od statusu PENDING. Pomijane dla zadań auto oraz zawsze wtedy, gdy prompt został uwzględniony.

  • Name
    part_count
    Type
    integer
    Description

    Liczba drukowalnych części w podzielonym modelu — jedna na obiekt w eksportowanych plikach. Zapadnięte odłamki, których segmentacja nie mogła przekształcić w drukowalną część, są usuwane z plików przed eksportem i nie są liczone.

  • Name
    progress
    Type
    integer
    Description

    Postęp zadania. Jeśli zadanie jeszcze się nie rozpoczęło, ta właściwość będzie miała wartość 0. Gdy zadanie zakończy się powodzeniem, przyjmie wartość 100.

  • Name
    status
    Type
    string
    Description

    Status zadania. Możliwe wartości to jedna z: PENDING, IN_PROGRESS, SUCCEEDED, FAILED, CANCELED.

  • Name
    preceding_tasks
    Type
    integer
    Description

    Liczba poprzedzających zadań.

  • Name
    created_at
    Type
    timestamp
    Description

    Znacznik czasu utworzenia zadania, w milisekundach.

  • Name
    started_at
    Type
    timestamp
    Description

    Znacznik czasu rozpoczęcia zadania, w milisekundach. Jeśli zadanie jeszcze się nie rozpoczęło, ta właściwość będzie miała wartość 0.

  • Name
    finished_at
    Type
    timestamp
    Description

    Znacznik czasu zakończenia zadania, w milisekundach. Jeśli zadanie jeszcze się nie zakończyło, ta właściwość będzie miała wartość 0.

  • Name
    task_error
    Type
    object
    Description

    Szczegóły błędu dla nieudanych zadań. Pełny opis obiektu task_error znajduje się w Błędy.

  • Name
    consumed_credits
    Type
    integer
    Description

    Liczba kredytów zużytych przez to zadanie. Zawsze obecne: 10 po przyjęciu zadania oraz 0 dla zadań FAILED, ponieważ opłata jest zwracana w przypadku niepowodzenia. Usunięcie zadania, gdy nadal ma status PENDING, również powoduje zwrot.

The Auto Split Task Object

{
  "id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
  "type": "print-split",
  "model_urls": {
    "glb": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.glb?Expires=***",
    "obj": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.obj?Expires=***"
  },
  "thumbnail_url": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/preview.png?Expires=***",
  "part_count": 4,
  "progress": 100,
  "status": "SUCCEEDED",
  "preceding_tasks": 0,
  "created_at": 1699999999000,
  "started_at": 1700000000000,
  "finished_at": 1700000082000,
  "task_error": null,
  "consumed_credits": 10
}