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.
W celu konwersji formatu i zmiany rozmiaru użyj dedykowanego Convert API oraz Resize API. Poniższe przestarzałe parametry będą nadal działać, ale w przypadku nowych integracji polecamy korzystanie z nowych punktów końcowych.
Parametry
Wymagane jest podanie tylko jednego z input_task_id lub model_url. Jeśli podane zostaną oba, priorytet ma input_task_id.
- Name
- input_task_id
- Type
- string
- Wymagane
- Description
ID zakończonego zadania Obraz na 3D lub Tekst na 3D, które chcesz poddać remeshowi. To zadanie musi być jednym z następujących: Text to 3D Preview, Text to 3D Refine, Image to 3D lub Retexture. Dodatkowo musi mieć status
SUCCEEDED.
- Name
- model_url
- Type
- string
- Wymagane
- Description
Podaj model 3D, który Meshy ma poddać remeshowi, za pomocą publicznie dostępnego URL lub data URI. Wspierane 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 formatów docelowych dla modelu po remeshu. Jeśli parametr zostanie pominięty, generowany jest tylko format GLB.
Dostępne wartości:
glb,fbx,obj,usdz,blend,stl,3mf.
- Name
- topology
- Type
- string
- domyślne triangle
- Description
Określa topology generowanego modelu.
Dostępne wartości:
quad: Generuje siatkę zdominowaną przez czworokąty (quad).triangle: Generuje zdecymowaną siatkę trójkątów.
- Name
- target_polycount
- Type
- integer
- domyślne 30,000
- Description
Określa 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łącza adaptacyjną decymację poprzez ustawienie poziomu liczby wielokątów. Gdy ten parametr jest ustawiony,
target_polycountjest ignorowany.Dostępne wartości:
1: Adaptacyjna — bardzo wysoka 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
Zmienia rozmiar modelu do określonej wysokości mierzonej w metrach. Polecamy 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
Zmienia rozmiar modelu tak, aby najdłuższy wymiar bounding box był równy podanej wartości w metrach. Polecamy 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 wartość jest ustawiona na
true, usługa wykorzystuje wizję AI do automatycznego oszacowania rzeczywistej wysokości obiektu i odpowiedniego przeskalowania modelu. Polecamy 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. Polecamy 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 tylko format wejściowego pliku modelu, ignorując inne parametry, takie jaktopology,resize_heightitarget_polycount. Polecamy 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 wartość jest ustawiona 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 niezmienione.
Zwracane wartości
Właściwość result odpowiedzi zawiera id nowo utworzonego zadania remesh.
Możliwe błędy
- Name
400 - Bad Request- Description
Żądanie było niepoprawne. Częste przyczyny:
- Brakujący parametr: Musi zostać podane
model_urllubinput_task_id. - Nieprawidłowe zadanie wejściowe:
input_task_idmusi wskazywać na zakończone sukcesem zadanie z obsługiwanego modelu. - Nieprawidłowy format modelu:
model_urlwskazuje na plik z nieobsługiwanym rozszerzeniem. - Niedostępny URL: Nie można było pobrać
model_url. - Nieprawidłowa 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
}