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.
Auto Split obsługuje obecnie wyłącznie modele bez tekstur. W przypadku Obraz na 3D i Wiele obrazów na 3D, wygeneruj dane wejściowe z ustawionym should_texture na false. Dane wejściowe z teksturą są odrzucane z kodem 400. Obsługa tekstur jest w trakcie realizacji.
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_modelmeshy-6,meshy-7lublatest). 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ęć.promptjest ignorowany.by_parts: Cięcie wzdłuż nazwanych wpromptczęści strukturalnych, takich jak głowa, ramiona i tułów.by_color: Cięcie wzdłuż obszarów kolorystycznych nazwanych wprompt. 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 kodem400.
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ęlubgł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ładpodziel na poszczególne części), jest odrzucany z kodem400i nic nie jest naliczane; opis, którego Meshy w ogóle nie potrafi odczytać, przechodzi w tryb awaryjnyauto, 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.
glbjest zawsze generowany i zwracany wmodel_urls; wymień dodatkowo dowolne inne formaty, których potrzebujesz.Dostępne wartości:
glb,obj,fbx,usdz,blend,3mf.3mfjest 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. Przylayout: "on_plate"limit odnosi się do całego rozłożonego stołu, dzięki czemu plik jest gotowy do cięcia na warstwy; przyassembledczęści pozostają w położeniu, jakie miały w modelu źródłowym, i to Ty rozmieszczasz je w slicerze.stlnie jest obsługiwany, ponieważ ten format nie może przechowywać osobnych części.
- 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.
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.1do0.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.1do0.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:
promptjest wymagany, gdymodema wartośćby_partslubby_color. - Prompt nazywa mniej niż dwie części:
by_parts/by_colorwymaga co najmniej dwóch nazwanych elementów (na przykładgłowa, tułów, podstawa); ogólne polecenie, takie jakpodziel na poszczególne części, jest odrzucane. Nic nie jest naliczane. - Nieobsługiwane zadanie wejściowe:
input_task_idmusi 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_colorwymaga danych wejściowych wygenerowanych na podstawie przesłanego obrazu. - Nieobsługiwany format:
target_formatszawierastl. - Łącznik poza zakresem:
connector_sizelubconnector_heightznajduje się poza zakresem od0.1do0.8.
- Brak promptu:
- 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_idnie istnieje lub nie należy do Twojego konta.
- Name
429 - Too Many Requests- Description
Przekroczono limit szybkości. Żądania
by_partsiby_colormają wspólny limit analizy promptu wynoszący 12 żądań na minutę na konto.
- Name
503 - Service Unavailable- Description
Podział oparty na promptach (
by_partsiby_color) jest tymczasowo niedostępny. Spróbuj ponownie później lub użyjmode: "auto", na który to ograniczenie nie ma wpływu. Nic nie jest naliczane.
Request
# 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"
}
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
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
}
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
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.
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
1i domyślnie ma tę wartość.
- Name
- page_size
- Type
- integer
- Description
Limit rozmiaru strony. Domyślnie
10elementów. Maksymalna dozwolona wartość to100elementów; większe wartości są ograniczane do100.
- 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
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
}
]
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
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, gdypromptżądaniaby_partslubby_colornie 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 statusuPENDING. Pomijane dla zadańautooraz 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ń.
Wartość tego pola ma znaczenie tylko wtedy, gdy status zadania to
PENDING.
- 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_errorznajduje się w Błędy.
- Name
- consumed_credits
- Type
- integer
- Description
Liczba kredytów zużytych przez to zadanie. Zawsze obecne:
10po przyjęciu zadania oraz0dla zadańFAILED, ponieważ opłata jest zwracana w przypadku niepowodzenia. Usunięcie zadania, gdy nadal ma statusPENDING, 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
}