Remesh API
Remesh API umożliwia remesh oraz eksportowanie istniejących modeli 3D wygenerowanych przez inne API Meshy (takie jak Obraz na 3D lub Tekst na 3D) do różnych formatów. Ta sekcja zawiera szczegóły dotyczące korzystania z Remesh API.
Create a Remesh Task
Ten punkt końcowy tworzy nowe zadanie remesh.
Do konwersji formatu i zmiany rozmiaru skorzystaj z dedykowanych interfejsów: Convert API oraz Resize API. Poniższe przestarzałe parametry będą nadal działać, ale w przypadku nowych integracji zalecamy korzystanie z nowych punktów końcowych.
Parametry
Wymagany jest tylko jeden z parametrów input_task_id lub model_url. Jeśli podano oba, priorytet ma input_task_id.
- Name
- input_task_id
- Type
- string
- Wymagane
- Description
ID ukończonego zadania Obraz na 3D lub Tekst na 3D, które chcesz poddać operacji remesh. To zadanie musi być jednym z następujących: Tekst na 3D Preview, Tekst na 3D Refine, Obraz na 3D lub Reteksturowanie. Dodatkowo musi mieć status
SUCCEEDED.
- Name
- model_url
- Type
- string
- Wymagane
- Description
Podaj model 3D, który Meshy ma poddać operacji remesh, za pomocą publicznie dostępnego adresu URL lub Data URI. Obsługiwane formaty:
.glb,.gltf,.obj,.fbx,.stl.W przypadku Data URI użyj typu MIME:
application/octet-stream.
- Name
- target_formats
- Type
- string[]
- domyślne ["glb"]
- Description
Lista docelowych formatów dla modelu po remeshu. Jeśli pominięto, generowany jest tylko GLB.
Dostępne wartości:
glb,fbx,obj,usdz,blend,stl,3mf.
- Name
- topology
- Type
- string
- domyślne triangle
- Description
Określ topology generowanego modelu.
Dostępne wartości:
quad: Generuje siatkę z przewagą czworokątów.triangle: Generuje zdecymowaną siatkę trójkątów.
- Name
- target_polycount
- Type
- integer
- domyślne 30,000
- Description
Określ docelową liczbę wielokątów w generowanym modelu. Rzeczywista liczba wielokątów może odbiegać od wartości docelowej w zależności od złożoności geometrii.
Prawidłowy zakres wartości zależy od poziomu użytkownika:
- od 100 do 300 000 (włącznie)
- Name
- decimation_mode
- Type
- integer
- Description
Włącz adaptacyjną decymację, ustawiając poziom liczby wielokątów. Gdy ustawiono tę wartość,
target_polycountjest ignorowane.Dostępne wartości:
1: Adaptacyjna — ultra liczba wielokątów.2: Adaptacyjna — wysoka liczba wielokątów.3: Adaptacyjna — średnia liczba wielokątów.4: Adaptacyjna — niska liczba wielokątów.
- Name
- resize_height
- Type
- number
- ⚠ przestarzałe
- domyślne 0
- Description
Zmień rozmiar modelu do określonej wysokości mierzonej w metrach. Zalecamy korzystanie z dedykowanego Resize API.
auto_size,resize_heightiresize_longest_sidewzajemnie się wykluczają.
- Name
- resize_longest_side
- Type
- number
- ⚠ przestarzałe
- domyślne 0
- Description
Zmień rozmiar modelu tak, aby najdłuższy wymiar bounding-box był równy podanej wartości w metrach. Zalecamy korzystanie z dedykowanego Resize API.
auto_size,resize_heightiresize_longest_sidewzajemnie się wykluczają.
- Name
- auto_size
- Type
- boolean
- ⚠ przestarzałe
- domyślne false
- Description
Gdy ustawione na
true, usługa wykorzystuje sztuczną inteligencję wizyjną do automatycznego oszacowania rzeczywistej wysokości obiektu i odpowiedniej zmiany rozmiaru modelu. Zalecamy korzystanie z dedykowanego Resize API.auto_size,resize_heightiresize_longest_sidewzajemnie się wykluczają.
auto_size = true- Name
- origin_at
- Type
- string
- ⚠ przestarzałe
- domyślne bottom
- Description
Pozycja punktu początkowego. Zalecamy korzystanie z dedykowanego Resize API.
Dostępne wartości:
bottom,center.
- Name
- convert_format_only
- Type
- boolean
- ⚠ przestarzałe
- Description
Jeśli
true, usługa zmieni jedynie format pliku modelu wejściowego, ignorując inne dane wejściowe, takie jaktopology,resize_heightitarget_polycount. Zalecamy korzystanie z dedykowanego Convert API.target_formatsmusi zostać podane, jeśliconvert_format_onlyjest ustawione natrue.
- Name
- alpha_thumbnail
- Type
- boolean
- domyślne false
- Description
Gdy ustawione na
true, zadanie dodatkowo renderuje wersję podglądu z przezroczystym tłem (RGBA) i zwraca ją jakoalpha_thumbnail_urlw odpowiedzi GET. Istniejące polethumbnail_urlpozostaje bez zmian.
Zwracane wartości
Właściwość result odpowiedzi zawiera id nowo utworzonego zadania remesh.
Tryby błędów
- Name
400 - Bad Request- Description
Żądanie było niepoprawne. Typowe przyczyny:
- Brakujący parametr: Musi zostać podane
model_urllubinput_task_id. - Nieprawidłowe zadanie wejściowe:
input_task_idmusi odnosić się do pomyślnie zakończonego zadania z obsługiwanego modelu. - Nieprawidłowy format modelu:
model_urlwskazuje na plik o nieobsługiwanym rozszerzeniu. - Nieosiągalny adres URL: Nie udało się pobrać pliku spod
model_url. - Nieprawidłowe topology: Parametr
topologyjest nieprawidłowy. - Wzajemnie wykluczające się parametry:
auto_sizeiresize_heightnie mogą być ustawione jednocześnie.
- Brakujący parametr: Musi zostać podane
- 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
429 - Too Many Requests- Description
Przekroczono limit szybkości.
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"
}
Pobierz zadanie Remesh
Ten punkt końcowy pobiera zadanie remesh na podstawie jego ID.
Parametry
- Name
- id
- Type
- path
- Description
ID zadania remesh do pobrania.
Zwraca
Obiekt zadania Remesh.
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,
}
Usuwanie zadania Remesh
Ten punkt końcowy trwale usuwa zadanie remesh, w tym wszystkie powiązane modele i dane. Ta operacja jest nieodwracalna.
Parametry ścieżki
- Name
- id
- Type
- path
- Description
ID zadania remesh, które ma zostać usunięte.
Status zadania
Zadanie, które nadal ma status PENDING, jest usuwane, a kredyty pobrane
w momencie utworzenia są zwracane.
Zadania, które ma już status IN_PROGRESS, nie można usunąć: żądanie
zostaje odrzucone z kodem 409 Conflict, a zadanie nadal się wykonuje. Kredyty za zadanie,
które worker już rozpoczął przetwarzać, nie podlegają zwrotowi, więc usunięcie go w trakcie
wykonywania kosztowałoby Cię zarówno kredyty, jak i wynik. Poczekaj, aż osiągnie ono
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.
Zwracane wartości
Zwraca 200 OK w przypadku powodzenia lub 409 Conflict, gdy zadanie ma status
IN_PROGRESS.
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 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 Remesh Tasks
Ten punkt końcowy umożliwia pobranie listy zadań Remesh.
Parametry
- Name
- page_num
- Type
- integer
- domyślne 1
- Description
Numer strony do stronicowania.
- Name
- page_size
- Type
- integer
- domyślne 10
- Description
Limit rozmiaru strony. Maksymalna dozwolona wartość to
100elementów.
- Name
- sort_by
- Type
- string
- Description
Pole, według którego ma nastąpić sortowanie.
Dostępne wartości:
+created_at: Sortuj według czasu utworzenia rosnąco.-created_at: Sortuj według czasu utworzenia malejąco.
Zwraca
Zwraca stronicowaną listę Obiektów zadania 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
}
]
Strumieniowanie zadania Remesh
Ten punkt końcowy strumieniuje aktualizacje zadania Remesh w czasie rzeczywistym za pomocą Server-Sent Events (SSE).
Parametry
- Name
- id
- Type
- path
- Description
Unikalny identyfikator zadania Remesh do strumieniowania.
Zwraca
Zwraca strumień Obiektów zadania Remesh jako Server-Sent Events.
W przypadku zadań PENDING lub IN_PROGRESS strumień odpowiedzi będzie zawierał tylko niezbędne pola progress i status.
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.
// For PENDING or IN_PROGRESS tasks, the response stream will not include all fields.
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,
}
Obiekt zadania Remesh
Obiekt zadania Remesh reprezentuje jednostkę pracy, której Meshy używa do wykonania remeshingu i eksportu istniejącego modelu 3D do różnych formatów. Obiekt ma następujące właściwości:
Właściwości
- Name
- id
- Type
- string
- Description
Unikalny identyfikator zadania. Chociaż jako szczegół implementacyjny używamy k-sortowalnego UUID dla identyfikatorów zadań, nie należy przyjmować żadnych założeń co do formatu tego identyfikatora.
- Name
- type
- Type
- string
- Description
Typ zadania Remesh. Wartość to
remesh.
- Name
- model_urls
- Type
- object
- Description
Adres URL do pobrania pliku modelu 3D z teksturami wygenerowanego przez Meshy. Właściwość dla danego formatu zostanie pominięta, jeśli dany format nie został wygenerowany, zamiast zwracać pusty ciąg znaków.
- Name
glb- Type
- string
- Description
Adres URL do pobrania pliku GLB.
- Name
fbx- Type
- string
- Description
Adres URL do pobrania pliku FBX.
- Name
obj- Type
- string
- Description
Adres URL do pobrania pliku OBJ.
- Name
usdz- Type
- string
- Description
Adres URL do pobrania pliku USDZ.
- Name
blend- Type
- string
- Description
Adres URL do pobrania pliku Blender.
- Name
stl- Type
- string
- Description
Adres URL do pobrania pliku STL.
- Name
3mf- Type
- string
- Description
Adres URL do pobrania pliku 3MF. Obecny tylko wtedy, gdy
3mfzostało zażądane poprzeztarget_formats.
- Name
- thumbnail_url
- Type
- string
- Description
Adres URL do pobrania podglądu obrazu wyrenderowanego z modelu po remeshingu.
- 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 przezroczysty podgląd został pomyślnie wyrenderowany; w przeciwnym razie to pole jest pomijane.
- 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, wartość ta zmieni się na100.
- Name
- status
- Type
- string
- Description
Status zadania. Możliwe wartości to jedna z:
PENDING,IN_PROGRESS,SUCCEEDED,FAILED.
- Name
- preceding_tasks
- Type
- integer
- Description
Liczba zadań poprzedzających.
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_errorznajdziesz w sekcji Błędy.
- Name
- consumed_credits
- Type
- integer
- Description
Liczba kredytów zużytych przez to zadanie. Obecna, gdy status zadania to
PENDING,IN_PROGRESSlubSUCCEEDED. Zwraca0dla zadańFAILED(kredyty są zwracane w przypadku niepowodzenia).
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
}