Auto Split API
Разделите 3D-модель на отдельно печатаемые детали — автоматически, по указанным вами частям или по цветовым областям — с возможностью добавления соединителей; тонкие участки, оставшиеся после разреза, всегда усиливаются, чтобы каждая деталь печаталась цельной.
Auto Split в настоящее время поддерживает только модели без текстур. Для Изображение в 3D и Мульти-изображение в 3D создавайте входные данные с параметром should_texture, установленным в false. Текстурированные входные данные отклоняются с ошибкой 400. Поддержка текстур находится в разработке.
Создание задачи 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илиlatest). Низкополигональные модели и модели Smart Topology (meshy-t2) не поддерживаются.
- Name
- mode
- Type
- string
- по умолчанию auto
- Description
Как модель делится на части.
Доступные значения:
auto: Meshy сам выбирает места разрезов.promptигнорируется.by_parts: Разрезать по структурным частям, указанным вprompt, таким как голова, руки и торс.by_color: Разрезать по цветовым областям, указанным вprompt. Требует ввода, сгенерированного из загруженного изображения (Изображение в 3D или Мульти-изображение в 3D); другие входные данные отклоняются с кодом400.
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. До 600 символов. Есть два режима отказа: описание, которое читается как указание на разделение, но называет менее двух частей (например,split into individual parts), отклоняется с кодом400, и списание не производится; описание, которое Meshy вообще не может распознать, приводит к откату наauto— задача всё равно выполняется и оплачивается, а в её ответе указываетсяprompt_ignored: true.
- Name
- target_formats
- Type
- array
- по умолчанию ["glb"]
- Description
Форматы, в которых экспортируется разделённая модель. В каждом формате каждая часть представлена отдельным объектом.
glbсоздаётся всегда и возвращается вmodel_urls; перечислите любые другие нужные вам форматы дополнительно.Доступные значения:
glb,obj,fbx,usdz,blend,3mf.3mfсоздаётся для слайсеров: один объект на часть, каждый в своём собственном слоте филамента, поэтому Bambu Studio открывает файл как отдельно окрашенные, отдельно выбираемые части (архив содержит конфигурацию проекта Bambu Studio; другие слайсеры считывают только геометрию). Как и другие форматы для печати в Meshy, этот формат использует миллиметры, и, поскольку этот эндпоинт не принимает целевой размер, вся модель масштабируется так, чтобы её самая длинная сторона составляла 150 мм — тот же предел, который используется в других экспортах для печати, выбранный так, чтобы модель поместилась на большинстве стандартных столов для печати. Приlayout: "on_plate"этот предел применяется ко всей разложенной на столе модели целиком, поэтому файл сразу готов к нарезке в слайсере; приassembledчасти остаются на тех местах, где они находились в исходной модели, и вы располагаете их в слайсере самостоятельно.stlне поддерживается, так как этот формат не может содержать отдельные части.
- Name
- layout
- Type
- string
- по умолчанию assembled
- Description
Как части расположены в каждом выходном формате и на миниатюре.
Доступные значения:
assembled: части остаются на тех местах, где они находились в исходной модели.on_plate: части расположены плоско и разложены на столе для печати, готовые к нарезке в слайсере — так же, как в режиме On Plate веб-приложения.
В обоих вариантах компоновки экспортированные файлы содержат только по одному объекту на каждую часть и ничего лишнего: схлопнувшийся тонкий срез или точкообразный фрагмент, оставшийся после разреза, удаляется перед экспортом, поэтому каждый объект, найденный в файле, пригоден для печати.
- 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требуется как минимум две названные детали (например,head, torso, base); общая инструкция вродеsplit into individual partsотклоняется. Списание не производится. - Неподдерживаемая исходная задача:
input_task_idдолжен ссылаться на успешно выполненную задачу поддерживаемого типа, сгенерированную с использованием Meshy 6 или Meshy 7. - Текстурированный ввод: у исходной модели есть текстуры. На данный момент поддерживаются только модели без текстур.
- Нет референсного изображения:
by_colorтребует ввода, сгенерированного из загруженного изображения. - Неподдерживаемый формат:
target_formatsсодержитstl. - Значение соединителя вне диапазона:
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, которую нужно удалить.
Возвращаемые данные
Возвращает 200 OK при успешном выполнении.
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
// Returns 200 Ok on success.
Список задач 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 и parts появляются после перехода в состояние 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 содержит только приведённые ниже свойства. Поля с параметрами генерации, которые присутствуют в других объектах задач (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
Скачиваемые URL-адреса разделённой модели, по одному на каждый запрошенный формат. Каждая часть представлена отдельным объектом в файле. Свойство для формата будет отсутствовать, если этот формат не был запрошен.
- Name
glb- Type
- string
- Description
Скачиваемый URL-адрес разделённой модели в формате GLB.
- Name
obj- Type
- string
- Description
Скачиваемый URL-адрес разделённой модели в формате OBJ.
- Name
fbx- Type
- string
- Description
Скачиваемый URL-адрес разделённой модели в формате FBX.
- Name
usdz- Type
- string
- Description
Скачиваемый URL-адрес разделённой модели в формате USDZ.
- Name
blend- Type
- string
- Description
Скачиваемый URL-адрес разделённой модели в формате Blender.
- Name
3mf- Type
- string
- Description
Скачиваемый URL-адрес разделённой модели в формате 3MF: по одному объекту на каждую часть, каждая на своём слоте филамента, в миллиметрах, масштабировано так, чтобы наибольшая сторона составляла 150 мм, с конфигурацией проекта Bambu Studio.
- Name
- thumbnail_url
- Type
- string
- Description
Скачиваемый URL-адрес отрендеренного превью разделённой модели, где каждая часть окрашена в отдельный цвет, в запрошенной раскладке
layout.
- Name
- prompt_ignored
- Type
- boolean
- Description
true, если в запросеby_partsилиby_colorвpromptне были указаны названия частей, из-за чего Meshy выполнил разделение модели автоматически — названия частей в результате присвоены Meshy, а не вами. Присутствует начиная со статусаPENDING. Отсутствует для задачautoи в тех случаях, когда prompt был учтён.
- Name
- part_count
- Type
- integer
- Description
Количество печатаемых частей в разделённой модели — по одной на каждый объект в экспортированных файлах. Схлопнувшиеся тонкие фрагменты, которые сегментация не смогла превратить в печатаемую деталь, удаляются из файлов перед экспортом и не учитываются в подсчёте.
- 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
}