Auto Split API
將一個 3D 模型拆分為多個可分別列印的部件——可以自動拆分,也可以按照你指定的部件拆分,或依顏色區域拆分——並可選擇加入連接件;切割後留下的薄弱區域一律會被強化,以確保每個部件都能被實心列印出來。
拆分結果不會保留輸入的紋理。 Auto Split 接受帶有紋理的輸入,因此你不需要使用 should_texture: false 重新生成模型。它會重建切割後的部件,並為每個部件賦予單一的頂點顏色;輸入的紋理貼圖不會被帶入任何匯出格式中。
建立 Auto Split 任務
此端點會建立一個新的 Auto Split 任務。該任務會將先前任務生成的模型切割為可分別列印的多個部件,並回傳分割後的模型,其中每個部件在檔案中都是獨立的物件。
參數
- Name
- input_task_id
- Type
- string
- 必選
- Description
要分割其模型的成功任務的 ID。支援的任務類型:Image to 3D、Multi-Image to 3D、Text to 3D(預覽)、Remesh、Convert 以及 Resize。該任務的狀態必須為
SUCCEEDED,且其模型必須由 Meshy 6 或 Meshy 7 生成(ai_model為meshy-6、meshy-7、meshy-7.1或latest)。不支援低多邊形和 Smart Topology(meshy-t2)模型。可以接受帶紋理的模型,但其紋理不會帶入結果中。
- Name
- mode
- Type
- string
- 預設值 auto
- Description
模型如何被劃分為多個部件。
可用取值:
auto:由 Meshy 自行選擇切割方式。此時會忽略prompt。by_parts:沿著你在prompt中指定的結構部件(如頭部、手臂、軀幹)進行切割。by_color:沿著你在prompt中指定的顏色區域進行切割。要求輸入來自上傳圖片生成的結果(Image to 3D 或 Multi-Image to 3D);其他輸入將被拒絕並回傳400。顏色區域的邊界來自來源圖片,而不是輸入模型的紋理。對於多圖生成 3D,Auto Split 使用第一張來源圖片。
mode = by_parts or by_color- Name
- prompt
- Type
- string
- 必選
- Description
以任意語言描述要拆分成的部件。Meshy 會從中讀取 1 到 10 個部件名稱,因此請為部件命名,而不是描述整個模型——例如
split into the figure and the base,或head, torso, left arm, right arm, legs。只命名一個部件也是可以的:所有未被命名的部分會合併成剩餘的一個部件,因此the head會將模型拆分為「頭部」和「其餘部分」,與網頁應用程式中的行為一致。最多 600 個字元。有兩種失敗情形:如果描述要求完全不拆分,或指定了超過 10 個部件,將回傳400且不收費;如果 Meshy 完全無法解析該描述,會回退到auto模式,任務仍會執行並收費,且回應中會帶有prompt_ignored: true。
- Name
- target_formats
- Type
- array
- 預設值 ["glb"]
- Description
匯出分割後模型所使用的格式。支援場景物件的格式(
glb、obj、fbx、usdz、blend、3mf)會將每個部件作為獨立物件儲存;stl沒有獨立物件的概念,因此會將所有部件融合為單一實體,並依layout排列(如需在切片軟體中分別選取各部件,請選擇3mf)。glb一律會生成,並在model_urls中回傳;如需其他格式,請在此列出。可用取值:
glb、obj、fbx、stl、usdz、blend、3mf。
- Name
- layout
- Type
- string
- 預設值 assembled
- Description
各個輸出格式以及縮圖中部件的排列方式。
可用取值:
assembled:部件保持在來源模型中的原始位置。on_plate:部件被平鋪展開放置在列印平台上,可直接用於切片——與網頁應用程式中的 On Plate 視圖排列方式相同。
在這兩種排列方式中,切割後留下的塌陷薄片或近似點狀的碎片都會在匯出前被移除,因此你得到的每個部件都是可列印的。支援場景物件的格式會為每個部件儲存一個物件;
stl會將它們融合為單一實體。
- Name
- connectors
- Type
- boolean
- 預設值 false
- Description
在每個切割處加入榫卯連接件,使列印出的部件可以拼合在一起。
connectors = true- Name
- connector_type
- Type
- string
- 預設值 cube
- Description
每個切割面上連接件的形狀。
可用取值:
cube、cylinder。
- Name
- connector_size
- Type
- number
- 預設值 0.5
- Description
連接件相對於切割面的尺寸大小。
有效範圍:
0.1到0.8。
- Name
- connector_height
- Type
- number
- 預設值 0.1
- Description
連接件相對於切割面向外延伸的距離。
有效範圍:
0.1到0.8。
回傳值
回應中的 result 屬性包含新建立的 Auto Split 任務的 id。
失敗情形
- Name
400 - Bad Request- Description
請求不可接受。常見原因:
- 缺少 prompt:當
mode為by_parts或by_color時,prompt為必填項。 - prompt 描述不拆分,或部件數量過多:
by_parts/by_color接受 1 到 10 個命名部件。若描述要求保持模型完整不拆分,或命名了超過 10 個部件,請求將被拒絕。此情況不收費。 - 不支援的輸入任務:
input_task_id必須指向一個由 Meshy 6 或 Meshy 7 生成的、狀態為成功的受支援類型任務。 - 缺少參考圖片:
by_color要求輸入來自上傳圖片生成的結果。 - 連接件參數超出範圍:
connector_size或connector_height超出了0.1到0.8的範圍。
- 缺少 prompt:當
- Name
401 - Unauthorized- Description
身份驗證失敗。請檢查你的 API 金鑰。
- Name
402 - Payment Required- Description
積分不足,無法執行此任務。
- Name
404 - Not Found- Description
input_task_id不存在,或不屬於你的帳戶。
- Name
429 - Too Many Requests- Description
你已超出速率限制。
by_parts和by_color請求還共用一個 prompt 解析限制,即每個帳戶每分鐘 12 次請求。
- Name
503 - Service Unavailable- Description
基於 prompt 的拆分功能(
by_parts和by_color)暫時無法使用。請稍後重試,或使用不受影響的mode: "auto"。此情況不收費。
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"
}
取得 Auto Split 任務
此 endpoint 透過 ID 取得一個 Auto Split 任務。
參數
- Name
- id
- Type
- path
- Description
要取得的 Auto Split 任務的 ID。
回傳
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
}
刪除一個 Auto Split 任務
此 endpoint 將永久刪除一個 Auto Split 任務,包括所有關聯的模型和資料。此操作不可復原。
路徑參數
- Name
- id
- Type
- path
- Description
要刪除的 Auto Split 任務的 ID。
任務狀態
仍處於 PENDING 狀態的任務會被刪除,建立時消耗的積分將被退還。
已處於 IN_PROGRESS 狀態的任務無法刪除:請求會被拒絕並回傳 409 Conflict,任務將繼續執行。工作程序已經開始處理的任務所消耗的積分不可退還,因此在執行過程中刪除該任務會讓你同時損失積分和結果。請等待其到達 SUCCEEDED、FAILED 或 CANCELED 狀態後再刪除。
處於終止狀態(SUCCEEDED、FAILED 或 CANCELED)的任務將被刪除,且不予退還積分。
回傳值
成功時回傳 200 OK;當任務處於 IN_PROGRESS 狀態時回傳 409 Conflict。
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."
}
取得 Auto Split 任務清單
此端點允許您取得 Auto Split 任務清單。
參數
可選屬性
- Name
- page_num
- Type
- integer
- Description
用於分頁的頁碼。起始值及預設值為
1。
- Name
- page_size
- Type
- integer
- Description
每頁數量限制。預設為
10項。最大允許值為100項;超過該值將被限制為100。
- Name
- sort_by
- Type
- string
- Description
用於排序的欄位。可用值:
+created_at:依建立時間升冪排序。-created_at:依建立時間降冪排序。
回傳值
回傳一個分頁清單,其中包含 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
}
]
流式取得 Auto Split 任務
此 endpoint 使用 Server-Sent Events(SSE)串流傳輸 Auto Split 任務的即時更新。
參數
- Name
- id
- Type
- path
- Description
要串流傳輸的 Auto Split 任務的唯一識別碼。
回傳
以 Server-Sent Events 的形式回傳 Auto Split 任務物件 的串流。
每個 message 事件都攜帶 取得 Auto Split 任務 回傳的完整任務物件,包括 consumed_credits、時間戳記以及 prompt_ignored;當任務處於 PENDING 或 IN_PROGRESS 狀態時,各帧之間會變化的欄位是 progress、status、started_at 和 preceding_tasks,而 model_urls、thumbnail_url 和 part_count 會在任務達到 SUCCEEDED 狀態後出現。error 事件只攜帶 status_code 和 message,因此在讀取 status 之前應先依事件名稱進行分支處理。
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
Auto Split 任務僅攜帶以下屬性。其他任務物件中包含的生成提示詞欄位(name、object_prompt、texture_prompt 等)、單一 model_url 以及 texture_urls,在拆分任務中永遠不會被填入,也不會被回傳。隨著任務執行而逐步填入的屬性(thumbnail_url、model_urls、時間戳)始終存在,只是在有值之前為空,因此這組鍵在 PENDING 和 SUCCEEDED 之間不會發生變化。
- Name
- id
- Type
- string
- Description
任務的唯一識別碼。雖然我們在實作細節上使用 k-可排序的 UUID 作為任務 id,但你不應對 id 的格式做任何假設。
- Name
- type
- Type
- string
- Description
任務的類型。此值為
print-split。
- Name
- model_urls
- Type
- object
- Description
指向拆分模型的可下載 URL,每個請求的格式對應一個。支援 場景 物件的格式會將每個部件保留為獨立物件;
stl會將它們熔合為一個整體。如果未請求某種格式,則該格式對應的屬性將被省略。- Name
glb- Type
- string
- Description
指向 GLB 格式拆分模型的可下載 URL。
- Name
obj- Type
- string
- Description
指向 OBJ 格式拆分模型的可下載 URL。
- Name
fbx- Type
- string
- Description
指向 FBX 格式拆分模型的可下載 URL。
- Name
stl- Type
- string
- Description
指向 STL 格式拆分模型的可下載 URL。所有部件都會熔合為一個整體;如需分別可選的部件,請請求
3mf。
- Name
usdz- Type
- string
- Description
指向 USDZ 格式拆分模型的可下載 URL。
- Name
blend- Type
- string
- Description
指向 Blender 格式拆分模型的可下載 URL。
- Name
3mf- Type
- string
- Description
指向 3MF 格式拆分模型的可下載 URL。
- Name
- thumbnail_url
- Type
- string
- Description
指向拆分模型渲染預覽圖的可下載 URL,其中每個部件以不同顏色顯示,採用所請求的
layout。
- Name
- prompt_ignored
- Type
- boolean
- Description
當
by_parts或by_color請求的prompt未指定任何部件名稱時,此值為true,表示 Meshy 轉而自動拆分了模型——結果中的部件名稱是 Meshy 生成的,而不是你提供的。從PENDING起就會出現該欄位。對於auto任務,以及任何遵循了提示詞的情況,此欄位會被省略。
- Name
- part_count
- Type
- integer
- Description
拆分產生的可列印部件數量。支援 場景 物件的格式會為每個部件攜帶一個物件;
stl會將它們熔合為一個整體,但計數仍回報部件數量。分割過程中無法生成可列印部件的塌陷薄片,會在匯出前從檔案中移除,且不計入計數。
- Name
- progress
- Type
- integer
- Description
任務的 progress。如果任務尚未開始,此屬性值為
0。任務成功後,此值將變為100。
- Name
- status
- Type
- string
- Description
任務的狀態。可能的值為
PENDING、IN_PROGRESS、SUCCEEDED、FAILED、CANCELED之一。
- Name
- preceding_tasks
- Type
- integer
- Description
排在此任務之前的任務數量。
此欄位的值僅在任務狀態為
PENDING時才有意義。
- Name
- created_at
- Type
- timestamp
- Description
任務建立時間的時間戳,單位為毫秒。
- Name
- started_at
- Type
- timestamp
- Description
任務開始時間的時間戳,單位為毫秒。如果任務尚未開始,此屬性值為
0。
- Name
- finished_at
- Type
- timestamp
- Description
任務完成時間的時間戳,單位為毫秒。如果任務尚未完成,此屬性值為
0。
- Name
- task_error
- Type
- object
- Description
失敗任務的錯誤詳情。完整的
task_error物件參考請參見 Errors。
- Name
- consumed_credits
- Type
- integer
- Description
此任務消耗的 積分 數量。始終存在:任務被接受後為
10,對於FAILED任務則為0,因為失敗時費用會被退還。在任務仍處於PENDING狀態時刪除它,也會退還費用。
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
}