Remesh API
Przebuduj siatkę modelu 3D z nową topology i liczbą ścian, a następnie wyeksportuj ją w wybranych formatach. Model może pochodzić z innego zadania Meshy, takiego jak Obraz na 3D lub Tekst na 3D, albo z pliku modelu.
Utwórz zadanie Remesh
Tworzy zadanie Remesh. Zadanie jest wykonywane w tle. Informacje o tym, jak długo zwykle trwa zadanie, znajdziesz w sekcji Czasy przetwarzania.
Aby skonwertować format modelu lub zmienić jego rozmiar, użyj Convert API lub Resize API. Przestarzałe parametry na tej stronie nadal działają, ale nowe integracje powinny korzystać z tych punktów końcowych.
Request
# Basic remesh with custom formats and resize
curl https://api.meshy.ai/openapi/v1/remesh \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"input_task_id": "018a210d-8ba4-705c-b111-1f1776f7f578",
"target_formats": ["glb", "fbx"],
"topology": "quad",
"target_polycount": 50000,
"resize_height": 1.0,
"origin_at": "bottom"
}'
# Quad remesh with auto-size
curl https://api.meshy.ai/openapi/v1/remesh \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"input_task_id": "018a210d-8ba4-705c-b111-1f1776f7f578",
"target_formats": ["glb", "fbx"],
"topology": "quad",
"target_polycount": 50000,
"auto_size": true
}'
Response
{
"result": "0193bfc5-ee4f-73f8-8525-44b398884ce9"
}
Parametry
- Name
- input_task_id
- Type
- string
- Wymagane
- Description
Wymagane, chyba że wyślesz
model_url. ID zadania, którego model chcesz poddać operacji remesh, na przykład zadania Tekst na 3D, Obraz na 3D, Reteksturowanie lub Remesh. Zadanie musi być utworzone przez Ciebie za pomocą API i mieć statusSUCCEEDED.
- Name
- model_url
- Type
- string
- Wymagane
- Description
Wymagane, chyba że wyślesz
input_task_id. Model do remeshu, podany jako publiczny URL lub data URI. Jeśli wyślesz oba, Meshy użyjeinput_task_id.Model musi być plikiem GLB, glTF, OBJ, FBX lub STL o rozmiarze maksymalnie 400 MB, jeśli pochodzi z adresu
httplubhttps, lub 100 MB, jeśli jest przesyłany jako data URI. W przypadku data URI użyj typu MIMEapplication/octet-stream.Plik przekraczający 100 MB musi dodatkowo spełniać następujące zasady:
- Plik GLB, glTF, FBX lub OBJ może mieć maksymalnie 10 000 000 ścianek. Meshy liczy ścianki jako trójkąty, więc czworokąt liczony jest jako 2, a siatka narysowana więcej niż raz liczona jest raz na każdą kopię.
- Plik FBX musi być binarnym plikiem FBX 7.1 lub nowszym.
- Plik GLB lub glTF nie może używać kompresji Draco.
- Name
- target_formats
- Type
- string[]
- domyślne ["glb"]
- Description
Formaty plików do wygenerowania.
Dostępne wartości:
glbfbxobjusdzblendstl3mf
- Name
- topology
- Type
- string
- domyślne triangle
- Description
Typ ścianek modelu po remeshu.
Dostępne wartości:
quad: siatka z przewagą czworokątówtriangle: zdecymowana siatka trójkątna
- Name
- target_polycount
- Type
- integer
- domyślne 30000
- Description
Docelowa liczba ścianek, od
100do300000. Wynik może różnić się od wartości docelowej, w zależności od geometrii modelu. Wartość spoza tego zakresu zwraca400.
- Name
- decimation_mode
- Type
- integer
- Description
Adaptacyjna liczba ścianek, według poziomu. Gdy ustawisz ten parametr, Meshy ignoruje
target_polycount.Dostępne wartości:
1: ultra2: wysoki3: średni4: niski
- Name
- resize_height
- Type
- number
- ⚠ przestarzałe
- domyślne 0
- Description
Zamiast tego użyj Resize API. Wysokość, do której ma zostać przeskalowany model, w metrach. Wyślij co najwyżej jeden z parametrów
resize_height,resize_longest_sideiauto_size.
- Name
- resize_longest_side
- Type
- number
- ⚠ przestarzałe
- domyślne 0
- Description
Zamiast tego użyj Resize API. Długość, do której ma zostać przeskalowany najdłuższy bok prostopadłościanu ograniczającego modelu, w metrach. Wyślij co najwyżej jeden z parametrów
resize_height,resize_longest_sideiauto_size.
- Name
- auto_size
- Type
- boolean
- ⚠ przestarzałe
- domyślne false
- Description
Zamiast tego użyj Resize API. Czy oszacować rzeczywistą wysokość obiektu za pomocą wizji AI i przeskalować model do niej. Wyślij co najwyżej jeden z parametrów
resize_height,resize_longest_sideiauto_size.
- Name
- origin_at
- Type
- string
- ⚠ przestarzałe
- domyślne bottom
- Description
Zamiast tego użyj Resize API. Gdzie umieścić punkt początkowy modelu,
bottomlubcenter. Wartość domyślna obowiązuje, gdy wyśleszresize_height,resize_longest_sidelubauto_size. Bez żadnego z nich Meshy przesuwa punkt początkowy tylko wtedy, gdy wyśleszorigin_at.
- Name
- convert_format_only
- Type
- boolean
- ⚠ przestarzałe
- Description
Zamiast tego użyj Convert API. Czy tylko skonwertować model na
target_formats. Gdytrue, Meshy ignorujetopology,target_polycount,decimation_mode,resize_height,resize_longest_sideiauto_size, ale nadal sprawdza ich wartości, więc nieprawidłowa wartość zwraca400. Przyconvert_format_only: truepusty lubnulltarget_formatszwraca400.
- Name
- alpha_thumbnail
- Type
- boolean
- domyślne false
- Description
Czy wygenerować również podgląd z przezroczystym tłem (RGBA), zwracany w
alpha_thumbnail_urlpodczas pobierania zadania.thumbnail_urlsię nie zmienia.
Zwracane dane
Pole result odpowiedzi zawiera ID nowego zadania Remesh.
Tryby niepowodzenia
- Name
400 - Bad Request- Description
Żądanie nie może zostać wykonane. Komunikat o błędzie wskazuje, jaki problem wystąpił. Na przykład:
- Brakujący parametr: Nie wysłano ani
model_url, aniinput_task_id. - Nieprawidłowe zadanie wejściowe:
input_task_idnie jest zakończonym powodzeniem zadaniem API lub jego model AI nie obsługuje remeshu. - Nieprawidłowy format modelu: Plik
model_urlma nieobsługiwane rozszerzenie. - Nieosiągalny URL: Meshy nie może pobrać pliku
model_url. - Plik modelu zbyt duży: Plik
model_urlprzekracza 400 MB, jeśli pochodzi z adresuhttplubhttps, lub 100 MB jako data URI. - Zbyt wiele ścianek: Plik
model_urlprzekracza 100 MB i ma więcej niż 10 000 000 ścianek. Zmniejsz liczbę ścianek i wyślij plik ponownie. - ASCII FBX powyżej 100 MB: Plik
model_urlto plik ASCII FBX przekraczający 100 MB. Wyślij go jako binarny FBX lub GLB. - Nieczytelny plik modelu: Plik
model_urlprzekracza 100 MB, a Meshy nie może odczytać jego nagłówka. Na przykład jest to plik GLB lub glTF skompresowany Draco, albo binarny plik FBX starszy niż 7.1. - Nagłówek modelu zbyt złożony: Plik
model_urlprzekracza 100 MB, a jego nagłówek zawiera zbyt wiele siatek, węzłów lub rekordów do sprawdzenia. Zmniejsz liczbę obiektów w pliku i wyślij go ponownie. - Nieprawidłowa topologia:
topologynie jestquadanitriangle. - Wzajemnie wykluczające się parametry: Żądanie zawiera więcej niż jeden z parametrów
auto_size,resize_heightiresize_longest_side. Wyślij tylko jeden z nich.
Popraw żądanie i wyślij je ponownie. Zobacz Błędy.
- Brakujący parametr: Nie wysłano ani
- Name
401 - Unauthorized- Description
Brakuje klucza API lub jest on nieprawidłowy. Sprawdź nagłówek
Authorization.
- Name
402 - Payment Required- Description
Na przykład:
- Niewystarczające kredyty: Konto nie ma wystarczającej liczby kredytów na to zadanie lub konto osiągnęło limit kredytów. Sprawdź saldo kredytów, a następnie spróbuj ponownie.
- Plan darmowy: Tworzenie zadania wymaga płatnego planu. Uaktualnij swój plan w ustawieniach subskrypcji, a następnie spróbuj ponownie.
- Name
403 - Forbidden- Description
input_task_idwskazuje model płaskorzeźby, którego ten punkt końcowy nie może poddać remeshowi. Komunikat brzmiThis model type does not support this operation. Wyślij inny model.
- Name
404 - Not Found- Description
input_task_idnie pasuje do żadnego z Twoich zadań. Sprawdź ID zadania i wyślij żądanie ponownie.
- Name
429 - Too Many Requests- Description
Przekroczono limit szybkości. Poczekaj, a następnie spróbuj ponownie. Zobacz Limity szybkości.
Pobierz zadanie Remesh
Zwraca zadanie Remesh na podstawie jego ID.
Request
curl https://api.meshy.ai/openapi/v1/remesh/a43b5c6d-7e8f-901a-234b-567c890d1e2f \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
{
"id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
"type": "remesh",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.glb?Expires=***",
"fbx": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.fbx?Expires=***",
"obj": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.obj?Expires=***",
"usdz": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.usdz?Expires=***",
"blend": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.blend?Expires=***",
"stl": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.stl?Expires=***"
},
"progress": 100,
"status": "SUCCEEDED",
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000001000,
"task_error": null
}
Usuń zadanie Remesh
Trwale usuwa zadanie Remesh, w tym jego modele i dane. Nie można cofnąć usunięcia.
Request
curl --request DELETE \
--url https://api.meshy.ai/openapi/v1/remesh/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 keeps 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."
}
Parametry ścieżki
- Name
- id
- Type
- path
- Description
ID zadania do usunięcia.
Status zadania
Usunięcie zadania o statusie PENDING zwraca kredyty, które zostały wykorzystane podczas jego tworzenia.
Zadania o statusie IN_PROGRESS nie można usunąć. Żądanie zwraca 409 Conflict,
a zadanie nadal się wykonuje. Meshy nie zwraca kredytów za zadanie, które już się
rozpoczęło, więc usunięcie go kosztowałoby Cię zarówno kredyty, jak i wynik. Poczekaj,
aż osiągnie status SUCCEEDED, FAILED lub CANCELED, a następnie je usuń.
Usunięcie zadania w statusie końcowym (SUCCEEDED, FAILED lub CANCELED)
nie powoduje zwrotu kredytów.
Zwraca
200 OK, gdy zadanie zostanie usunięte, lub 409 Conflict, gdy zadanie ma status
IN_PROGRESS.
Pobierz listę zadań Remesh
Zwraca listę Twoich zadań Remesh.
Request
curl https://api.meshy.ai/openapi/v1/remesh?page_size=10 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
[
{
"id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
"type": "remesh",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.glb?Expires=***",
"fbx": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.fbx?Expires=***",
"obj": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.obj?Expires=***",
"usdz": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.usdz?Expires=***",
"blend": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.blend?Expires=***",
"stl": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.stl?Expires=***"
},
"progress": 100,
"status": "SUCCEEDED",
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000001000,
"task_error": null
}
]
Parametry
- Name
- page_num
- Type
- integer
- domyślne 1
- Description
Numer strony do zwrócenia, maksymalnie
255. Większa wartość zwróci400.
- Name
- page_size
- Type
- integer
- domyślne 10
- Description
Liczba zadań na stronę, maksymalnie
100.
- Name
- sort_by
- Type
- string
- Description
Kolejność sortowania.
Dostępne wartości:
+created_at: od najstarszych-created_at: od najnowszych
Zwraca
Stronicowaną listę obiektów zadań Remesh.
Strumieniuj zadanie Remesh
Strumieniuje aktualizacje zadania Remesh jako Server-Sent Events (SSE).
Request
curl -N https://api.meshy.ai/openapi/v1/remesh/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.
// These examples are shortened. Each event holds the full task object.
event: message
data: {
"id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
"progress": 0,
"status": "PENDING"
}
event: message
data: {
"id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
"type": "remesh",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.glb?Expires=***",
"fbx": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.fbx?Expires=***",
"obj": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.obj?Expires=***",
"usdz": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.usdz?Expires=***",
"blend": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.blend?Expires=***",
"stl": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.stl?Expires=***"
},
"progress": 100,
"status": "SUCCEEDED",
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000001000,
"task_error": null,
}
Parametry
- Name
- id
- Type
- path
- Description
Identyfikator zadania z odpowiedzi tworzącej zadanie.
Zwraca
Strumień obiektów zadania Remesh jako Server-Sent Events.
Każde zdarzenie zawiera pełny obiekt zadania, w tej samej formie, jaką zwraca punkt końcowy Get. Gdy zadanie ma status PENDING lub IN_PROGRESS, jego pola wynikowe nie mają jeszcze wartości.
Obiekt zadania Remesh
Obiekt zadania Remesh opisuje jeden remesh modelu 3D. Przechowuje status, progress oraz pliki modelu, gdy zadanie zakończy się powodzeniem.
Właściwości
Example Remesh Task Object
{
"id": "0193bfc5-ee4f-73f8-8525-44b398884ce9",
"type": "remesh",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.glb?Expires=***",
"fbx": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.fbx?Expires=***",
"obj": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.obj?Expires=***",
"usdz": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.usdz?Expires=***",
"blend": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.blend?Expires=***",
"stl": "https://assets.meshy.ai/***/tasks/0193bfc5-ee4f-73f8-8525-44b398884ce9/output/model.stl?Expires=***"
},
"progress": 100,
"status": "SUCCEEDED",
"preceding_tasks": 0,
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000001000,
"task_error": {
"message": ""
},
"consumed_credits": 5
}
- Name
- id
- Type
- string
- Description
ID zadania. Traktuj go jako nieprzezroczysty ciąg znaków i nie polegaj na jego formacie.
- Name
- type
- Type
- string
- Description
Typ zadania, zawsze
remesh.
- Name
- model_urls
- Type
- object
- Description
Adresy URL do pobrania remeshowanego modelu, po jednym dla każdego formatu pliku. Format, którego zadanie nie wygenerowało, nie ma klucza, zamiast pustego ciągu znaków.
- Name
glb- Type
- string
- Description
Plik GLB.
- Name
fbx- Type
- string
- Description
Plik FBX.
- Name
obj- Type
- string
- Description
Plik OBJ.
- Name
usdz- Type
- string
- Description
Plik USDZ.
- Name
blend- Type
- string
- Description
Plik Blender.
- Name
stl- Type
- string
- Description
Plik STL.
- Name
3mf- Type
- string
- Description
Plik 3MF. Obecny tylko wtedy, gdy
target_formatszawiera3mf.
- Name
- thumbnail_url
- Type
- string
- Description
Adres URL do pobrania podglądu remeshowanego modelu.
- Name
- alpha_thumbnail_url
- Type
- string
- Description
Adres URL do pobrania wersji
thumbnail_urlz przezroczystym tłem (RGBA). Obecny tylko wtedy, gdy zadanie zostało utworzone zalpha_thumbnail: true, a Meshy wyrenderował przezroczysty podgląd.
- Name
- progress
- Type
- integer
- Description
Jaka część zadania została ukończona, w procentach. Wynosi
0do momentu rozpoczęcia zadania i100, gdy zakończy się powodzeniem.
- Name
- status
- Type
- string
- Description
Status zadania, jeden z:
PENDING,IN_PROGRESS,SUCCEEDED,FAILEDlubCANCELED.
- Name
- preceding_tasks
- Type
- integer
- Description
Liczba zadań poprzedzających to zadanie w kolejce. Wartość ma znaczenie tylko wtedy, gdy zadanie ma status
PENDING.
- Name
- created_at
- Type
- timestamp
- Description
Czas utworzenia zadania, w milisekundach Unix.
- Name
- started_at
- Type
- timestamp
- Description
Czas rozpoczęcia zadania, w milisekundach Unix. Wynosi
0do momentu rozpoczęcia zadania.
- Name
- finished_at
- Type
- timestamp
- Description
Czas zakończenia zadania, w milisekundach Unix. Wynosi
0do momentu zakończenia zadania.
- Name
- expires_at
- Type
- timestamp
- Description
Czas wygaśnięcia adresów URL do pobrania zadania, w milisekundach Unix. Wynosi
0do momentu zakończenia zadania.
- Name
- texture_urls
- Type
- array
- Description
Adresy URL do pobrania map tekstur modelu, gdy zadanie zakończy się powodzeniem: tablica obiektów, po jednym dla każdego zestawu tekstur. Każdy obiekt zawiera adres URL
base_color, a także może zawierać adresy URLmetallic,roughness,normal,emissionimetallic_roughness. Wynosinulldo momentu zakończenia zadania powodzeniem i jest pustą tablicą, gdy model nie ma map tekstur.
- Name
- task_error
- Type
- object
- Description
Szczegóły błędu, gdy zadanie zakończy się niepowodzeniem. Zobacz Błędy.
- Name
- consumed_credits
- Type
- integer
- Description
Liczba kredytów zużytych przez zadanie. Obecna, gdy status to
PENDING,IN_PROGRESSlubSUCCEEDED. Wynosi0dla zadaniaFAILED, ponieważ Meshy zwraca kredyty, gdy zadanie zakończy się niepowodzeniem.