Auto Split API
Podziel model 3D na osobne, drukowalne części — automatycznie, według nazwanych przez Ciebie części lub według obszarów kolorystycznych — z opcjonalnymi łącznikami; cienkie obszary pozostawione przez cięcie są zawsze wzmacniane, aby każda część drukowała się jako pełna bryła.
Wynik podziału nie zachowuje tekstury wejściowej. Auto Split akceptuje dane wejściowe z teksturą, więc nie musisz ponownie generować modelu z should_texture: false. Funkcja odbudowuje przecięte części i przypisuje każdej z nich jednolity kolor wierzchołków; żadna wejściowa mapa tekstury nie jest przenoszona do żadnego eksportowanego formatu.
Create an Auto Split Task
Ten punkt końcowy tworzy nowe zadanie Auto Split. Zadanie dzieli model z poprzedniego zadania na osobne, drukowalne części i zwraca podzielony model, w którym każda część jest osobnym obiektem w pliku.
Zadanie działa w tle. Informacje o tym, ile zwykle to trwa, znajdziesz w sekcji Czasy przetwarzania.
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 (wersja wstępna), Remesh, Konwertuj oraz Zmień rozmiar. Zadanie musi mieć status
SUCCEEDED, a jego model musi zostać wygenerowany za pomocą Meshy 6 lub Meshy 7 (ai_modelmeshy-6,meshy-7,meshy-7.1lublatest). Modele low-poly i Smart Topology (meshy-t2,meshy-t2.5) nie są obsługiwane. Model z teksturą jest akceptowany, ale jego tekstura nie jest przenoszona do wyniku.
- Name
- mode
- Type
- string
- domyślne auto
- Description
Sposób podziału modelu na części.
Dostępne wartości:
auto: Meshy samo wybiera cięcia.promptjest ignorowany.by_parts: Tnij wzdłuż części strukturalnych nazwanych wprompt, takich jak głowa, ręce i tułów.by_color: Tnij wzdłuż obszarów kolorystycznych nazwanych wprompt. Wymaga danych wejściowych wygenerowanych z przesłanego obrazu (Obraz na 3D lub Wiele obrazów na 3D); inne dane wejściowe są odrzucane z kodem400. Granice obszarów kolorystycznych pochodzą z obrazu źródłowego, a nie z tekstury modelu wejściowego. W przypadku Wiele obrazów na 3D, Auto Split korzysta z pierwszego obrazu źródłowego.
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, dlatego nazywaj elementy zamiast opisywać model, na przykład
split into the figure and the basealbohead, torso, left arm, right arm, legs. Podanie jednej części jest w porządku: wszystko, czego nie nazwałeś, staje się jedną pozostałą częścią, więcthe headdzieli model na głowę i resztę, tak jak w aplikacji webowej. Maksymalnie 600 znaków. Opis, który w ogóle nie prosi o podział, lub nazywa więcej niż 10 części, jest odrzucany z kodem400i nic nie jest naliczane. Jeśli Meshy nie potrafi odczytać z opisu żadnych nazw części, dokonuje podziału wzdłuż części, które rozpoznaje na obrazie referencyjnym modelu, w wybranym przez Ciebie mode: zadanie i tak jest wykonywane i naliczane, a w jego wyniku pojawia sięprompt_ignored: true. Jeśli model nie ma obrazu referencyjnego lub Meshy znajdzie w nim mniej niż dwie części, takie żądanie jest zamiast tego odrzucane z kodem400i nic nie jest naliczane.
- Name
- target_formats
- Type
- array
- domyślne ["glb"]
- Description
Formaty, w jakich ma zostać wyeksportowany podzielony model. Formaty obsługujące obiekty sceny (
glb,obj,fbx,usdz,blend,3mf) przenoszą każdą część jako osobny obiekt;stlnie ma pojęcia osobnych obiektów, więc łączy każdą część w jedną bryłę ułożoną zgodnie zlayout(jeśli potrzebujesz osobno zaznaczalnych części w slicerze, zażądaj3mf).glbjest zawsze generowany i zwracany wmodel_urls; wymień dodatkowo wszystkie inne formaty, których potrzebujesz.Dostępne wartości:
glb,obj,fbx,stl,usdz,blend,3mf.
- Name
- layout
- Type
- string
- domyślne assembled
- Description
Sposób ułożenia części w każdym formacie wyjściowym oraz na miniaturze.
Dostępne wartości:
assembled: Części pozostają tam, gdzie znajdowały się w modelu źródłowym.on_plate: Części są ułożone płasko i rozłożone na płycie roboczej, gotowe do pocięcia w slicerze — tak samo jak w widoku On Plate w aplikacji webowej.
W obu układach przed eksportem usuwany jest zapadnięty skrawek lub fragment przypominający punkt, pozostały po cięciu, dzięki czemu każda uzyskana część jest drukowalna. Formaty obsługujące obiekty sceny zawierają jeden obiekt na część;
stlłączy je w jedną bryłę.
- Name
- connectors
- Type
- boolean
- domyślne false
- Description
Dodaje łączniki typu czop-gniazdo przy każdym cięciu, 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 od powierzchni cięcia, względem powierzchni cięcia.
Prawidłowy zakres: od
0.1do0.8.
Zwracane dane
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:
- Brakujący prompt:
promptjest wymagany, gdymodetoby_partslubby_color. - Prompt nie opisuje żadnego podziału lub podaje zbyt wiele części:
by_parts/by_colorakceptuje od 1 do 10 nazwanych elementów. Opis, który prosi o pozostawienie modelu w jednej części lub nazywa więcej niż 10 części, jest odrzucany. Nic nie jest naliczane. - Nieobsługiwane zadanie wejściowe:
input_task_idmusi odnosić się do zakończonego powodzeniem zadania obsługiwanego typu, wygenerowanego za pomocą Meshy 6 lub Meshy 7. - Brak obrazu referencyjnego:
by_colorwymaga danych wejściowych wygenerowanych z przesłanego obrazu. - Łącznik poza zakresem:
connector_sizelubconnector_heightznajduje się poza zakresem od0.1do0.8.
- Brakujący prompt:
- Name
401 - Unauthorized- Description
Uwierzytelnianie nie powiodło się. Sprawdź swój klucz API.
- Name
402 - Payment Required- Description
Niewystarczająca liczba kredytów do wykonania tego zadania.
- 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_colordzielą również limit parsowania promptów wynoszący 12 żądań na minutę na konto.
- Name
503 - Service Unavailable- Description
Dzielenie oparte na promptach (
by_partsiby_color) jest tymczasowo niedostępne. Spróbuj ponownie później lub użyjmode: "auto", na który ta sytuacja 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"
}
Pobieranie zadania 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, w tym wszystkie powiązane modele i dane. Ta operacja jest nieodwracalna.
Parametry ścieżki
- Name
- id
- Type
- path
- Description
ID zadania Auto Split do usunięcia.
Status zadania
Zadanie, które ma wciąż status PENDING, zostaje usunięte, a kredyty
zużyte w momencie jego utworzenia są zwracane.
Zadanie, które jest już IN_PROGRESS, nie może zostać usunięte: żądanie
zostaje odrzucone z kodem 409 Conflict, a zadanie nadal się wykonuje. Kredyty za zadanie,
które zostało już rozpoczęte przez workera, nie podlegają zwrotowi, więc usunięcie go
w trakcie wykonywania kosztowałoby zarówno kredyty, jak i wynik. Poczekaj, aż osiągnie
status SUCCEEDED, FAILED lub CANCELED, a następnie je usuń.
Zadanie w stanie końcowym (SUCCEEDED, FAILED lub CANCELED) jest usuwane
bez zwrotu kredytów.
Zwraca
Zwraca 200 OK w przypadku powodzenia lub 409 Conflict, gdy zadanie jest
IN_PROGRESS.
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
// 200 OK on success, with an empty body.
//
// 409 Conflict when the task is IN_PROGRESS — the task is left running:
{
"message": "Task is IN_PROGRESS and cannot be deleted. Credits for a task the worker has already started are not refundable; wait for it to reach SUCCEEDED, FAILED or CANCELED, then delete it."
}
List Auto Split Tasks
Ten punkt końcowy umożliwia pobranie listy zadań Auto Split.
Parametry
Atrybuty opcjonalne
- Name
- page_num
- Type
- integer
- Description
Numer strony na potrzeby stronicowania. Zaczyna się i domyślnie wynosi
1.
- 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 odbywać się 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.
Zwracane dane
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
}
]
Przesyłaj strumieniowo zadanie Auto Split
Ten punkt końcowy przesyła strumieniowo 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ć przesyłane strumieniowo.
Zwraca
Zwraca strumień obiektów zadania Auto Split jako Server-Sent Events.
Każde zdarzenie message zawiera pełny obiekt zadania, zwracany przez Pobierz zadanie Auto Split, w tym consumed_credits, znaczniki czasu i prompt_ignored; dopóki zadanie ma status PENDING lub IN_PROGRESS, pola zmieniające się między klatkami to progress, status, started_at i preceding_tasks, natomiast model_urls, thumbnail_url i part_count pojawiają się po osiągnięciu statusu SUCCEEDED. Zdarzenie error zawiera jedynie 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
}
Obiekt zadania Auto Split
Zadanie Auto Split zawiera wyłącznie poniższe właściwości. Pola prompta generowania, które znajdują się w innych obiektach zadań (name, object_prompt, texture_prompt itd.), pojedyncze pole model_url oraz texture_urls nigdy nie są wypełniane dla podziału i nie są zwracane. Właściwości, które uzupełniają się w trakcie wykonywania zadania (thumbnail_url, model_urls, znaczniki czasu), są zawsze obecne, puste do momentu uzyskania wartości, dzięki czemu zestaw kluczy nie zmienia się pomiędzy PENDING a SUCCEEDED.
- Name
- id
- Type
- string
- Description
Unikalny identyfikator zadania. Mimo że jako szczegół implementacyjny używamy identyfikatorów zadań w formacie k-sortable UUID, nie należy przyjmować żadnych założeń co do formatu id.
- 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. Formaty obsługujące obiekty sceny zachowują każdą część jako osobny obiekt;
stlłączy je w jedną bryłę. Właściwość dla danego formatu zostanie pominięta, jeśli format nie był żą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
stl- Type
- string
- Description
Adres URL do pobrania podzielonego modelu w formacie STL. Wszystkie części są łączone w jedną bryłę; aby uzyskać osobno wybieralne części, zażądaj formatu
3mf.
- 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.
- Name
- thumbnail_url
- Type
- string
- Description
Adres URL do pobrania wyrenderowanego podglądu podzielonego modelu, z każdą częścią w innym kolorze, w żądanym
layout.
- Name
- prompt_ignored
- Type
- boolean
- Description
true, gdypromptw żądaniuby_partslubby_colornie wskazywał nazw żadnych części, przez co 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ł zastosowany.
- Name
- part_count
- Type
- integer
- Description
Liczba drukowalnych części uzyskanych w wyniku podziału. Formaty obsługujące obiekty sceny zawierają jeden obiekt na część;
stlłączy je w jedną bryłę, ale liczba nadal odnosi się do liczby części. Zapadnięte fragmenty, których segmentacja nie mogła przekształcić w drukowalny element, są usuwane z plików przed eksportem i nie są wliczane do tej liczby.
- Name
- progress
- Type
- integer
- Description
Postęp zadania. Jeśli zadanie jeszcze się nie rozpoczęło, ta właściwość przyjmuje wartość
0. Gdy zadanie zakończy się powodzeniem, wartość ta zmieni się na100.
- 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ść przyjmuje 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ść przyjmuje wartość
0.
- Name
- task_error
- Type
- object
- Description
Szczegóły błędu dla nieudanych zadań. Pełny opis obiektu
task_errorznajdziesz w sekcji Błędy. Jeśli kontrola bezpieczeństwa dostawcy modelu odrzuci model wejściowy, zadanie kończy się niepowodzeniem ztask_error.typeustawionym nainvalid_inputicodeustawionym naprovider_content_refused. Zobacz Błędy.
- Name
- consumed_credits
- Type
- integer
- Description
Liczba kredytów zużytych przez to zadanie. Zawsze obecne:
10po przyjęciu zadania i0dla zadańFAILED, ponieważ opłata jest zwracana w przypadku niepowodzenia. Usunięcie zadania, gdy nadal ma statusPENDING, również skutkuje zwrotem środków.
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
}