Auto Split API
Разделите 3D-модель на отдельно печатаемые части — автоматически, по частям, которые вы называете, или по цветовым областям — с опциональными соединителями; тонкие участки, оставшиеся после разреза, всегда усиливаются, чтобы каждая часть печаталась цельной.
Результат разделения не сохраняет исходную текстуру. Auto Split принимает текстурированные входные данные, поэтому вам не нужно регенерировать модель с should_texture: false. Функция перестраивает разрезанные части и присваивает каждой из них сплошной цвет вершин; ни одна исходная карта текстуры не переносится ни в один из экспортируемых форматов.
Создание задачи Auto Split
Этот эндпоинт создаёт новую задачу Auto Split. Задача разрезает модель предыдущей задачи на отдельно печатаемые части и возвращает сегментированную модель, где каждая часть представлена как отдельный объект в файле.
Параметры
- Name
- input_task_id
- Type
- string
- Обязательный
- Description
ID успешно завершённой задачи, чью модель нужно разделить. Поддерживаемые типы задач: Изображение в 3D, Мульти-изображение в 3D, Текст в 3D (превью), Ремешинг, Конвертировать и Изменить размер. Задача должна иметь статус
SUCCEEDED, а её модель должна быть сгенерирована с помощью Meshy 6 или Meshy 7 (ai_modelmeshy-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. Требует входные данные, сгенерированные из загруженного изображения (Изображение в 3D или Мульти-изображение в 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 ответа содержит id вновь созданной задачи Auto Split.
Режимы сбоя
- Name
400 - Bad Request- Description
Запрос был некорректным. Распространённые причины:
- Отсутствует prompt:
promptобязателен, когдаmodeравноby_partsилиby_color. - 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
Этот эндпоинт получает задачу Auto Split по её ID.
Параметры
- Name
- id
- Type
- path
- Description
ID задачи Auto Split, которую нужно получить.
Возвращает
Объект задачи 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
Этот эндпоинт безвозвратно удаляет задачу Auto Split, включая все связанные модели и данные. Это действие необратимо.
Параметры пути
- Name
- id
- Type
- path
- Description
ID задачи Auto Split, которую нужно удалить.
Статус задачи
Задача, которая всё ещё находится в статусе PENDING, удаляется, а кредиты,
списанные при создании, возвращаются.
Задачу, которая уже находится в статусе IN_PROGRESS, удалить нельзя: запрос
отклоняется с ошибкой 409 Conflict, и задача продолжает выполняться. Кредиты
за задачу, которую воркер уже начал выполнять, не возвращаются, поэтому
удаление в процессе выполнения обойдётся вам одновременно и потерей кредитов,
и потерей результата. Дождитесь, пока она перейдёт в статус
SUCCEEDED, FAILED или CANCELED, а затем удалите её.
Задача в конечном состоянии (SUCCEEDED, FAILED или CANCELED) удаляется
без возврата средств.
Возвращает
Возвращает 200 OK при успехе, либо 409 Conflict, если задача находится в
статусе 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."
}
Список задач 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
Этот эндпоинт передаёт обновления в реальном времени для задачи Auto Split с помощью Server-Sent Events (SSE).
Параметры
- Name
- id
- Type
- path
- Description
Уникальный идентификатор задачи Auto Split, для которой запрашивается стрим.
Возвращает
Возвращает поток объектов задачи Auto Split в виде Server-Sent Events.
Каждое событие 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
}
Объект задачи Auto Split
Задача Auto Split содержит только приведённые ниже свойства. Поля с prompt для генерации, которые есть в других объектах задач (name, object_prompt, texture_prompt и так далее), одно поле model_url и texture_urls для разбиения никогда не заполняются и не возвращаются. Свойства, которые заполняются по мере выполнения задачи (thumbnail_url, model_urls, временные метки), присутствуют всегда, оставаясь пустыми до появления значения, поэтому набор ключей не меняется между PENDING и SUCCEEDED.
- Name
- id
- Type
- string
- Description
Уникальный идентификатор задачи. Хотя в качестве деталей реализации мы используем k-sortable UUID для идентификаторов задач, вам не следует делать каких-либо предположений о формате id.
- Name
- type
- Type
- string
- Description
Тип задачи. Значение —
print-split.
- Name
- model_urls
- Type
- object
- Description
Ссылки для скачивания разбитой модели, по одной на каждый запрошенный формат. Форматы, поддерживающие объекты сцены, сохраняют каждую часть как отдельный объект;
stlобъединяет их в одно твёрдое тело. Свойство для формата будет отсутствовать, если этот формат не был запрошен.- Name
glb- Type
- string
- Description
Ссылка для скачивания разбитой модели в формате GLB.
- Name
obj- Type
- string
- Description
Ссылка для скачивания разбитой модели в формате OBJ.
- Name
fbx- Type
- string
- Description
Ссылка для скачивания разбитой модели в формате FBX.
- Name
stl- Type
- string
- Description
Ссылка для скачивания разбитой модели в формате STL. Все части объединяются в одно твёрдое тело; запросите
3mf, если нужны отдельно выбираемые части.
- Name
usdz- Type
- string
- Description
Ссылка для скачивания разбитой модели в формате USDZ.
- Name
blend- Type
- string
- Description
Ссылка для скачивания разбитой модели в формате Blender.
- Name
3mf- Type
- string
- Description
Ссылка для скачивания разбитой модели в формате 3MF.
- Name
- thumbnail_url
- Type
- string
- Description
Ссылка для скачивания отрендеренного превью разбитой модели, где каждая часть выделена своим цветом, в запрошенной
layout.
- Name
- prompt_ignored
- Type
- boolean
- Description
true, если вpromptзапросаby_partsилиby_colorне были названы части, из-за чего Meshy выполнила разбиение модели автоматически — названия частей в результате принадлежат Meshy, а не вам. Присутствует начиная со статусаPENDING. Отсутствует для задачauto, а также во всех случаях, когда prompt был учтён.
- Name
- part_count
- Type
- integer
- Description
Количество печатаемых частей, полученных в результате разбиения. Форматы, поддерживающие объекты сцены, содержат по одному объекту на часть;
stlобъединяет их в одно твёрдое тело, при этом счётчик по-прежнему отражает количество частей. Схлопнувшиеся фрагменты, которые сегментация не смогла превратить в печатаемую деталь, удаляются из файлов перед экспортом и не учитываются в счётчике.
- Name
- progress
- Type
- integer
- Description
Прогресс выполнения задачи. Если задача ещё не началась, это свойство будет равно
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см. в разделе Ошибки.
- Name
- consumed_credits
- Type
- integer
- Description
Количество кредитов, потраченных на выполнение этой задачи. Присутствует всегда:
10после принятия задачи в обработку и0для задач со статусомFAILED, поскольку списание возвращается при неудаче. Удаление задачи, пока она ещё находится в статусе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
}