API Рельефа
Превратите одну фотографию в 3D-модель барельефа и 16-битную карту глубины для 3D-печати, лазерной гравировки и ЧПУ-резьбы.
Создание задачи Relief
Создаёт задачу Relief. Задача превращает фотографию в барельефную модель. При успешном выполнении задача создаёт модель в виде файла GLB и файла STL, 16-битную карту глубины в оттенках серого и изображение-превью. Чтобы получить только карту глубины, установите should_generate_model в false.
Задача выполняется в фоновом режиме.
Задача Relief не может быть входными данными для другого эндпоинта, например Remesh, Convert или Auto Split. Такие запросы возвращают 403.
Request
# Simple request: a low relief, 60 mm on its longer side
curl https://api.meshy.ai/openapi/v1/relief \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"image_url": "<your publicly accessible image url or base64-encoded data URI>"
}'
# Advanced request: a deep 120 mm relief with a thicker base, curved from side to side
curl https://api.meshy.ai/openapi/v1/relief \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"image_url": "<your publicly accessible image url or base64-encoded data URI>",
"variant": "high",
"size_mm": 120,
"carving_depth_mm": 10,
"base_thickness_mm": 3,
"bend_mode": "convex",
"bend_angle": 90
}'
Response
{
"result": "0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20"
}
Параметры
- Name
- image_url
- Type
- string
- Обязательный
- Description
Фотография для превращения в рельеф, в виде публичного URL или data URI (
data:image/png;base64,...).Изображение должно быть файлом JPG, JPEG, PNG или WebP размером не более 20 МБ и не менее 32 × 32 пикселей. Его более длинная сторона может быть не более чем примерно в 16 раз больше короткой. Любое другое изображение приводит к
400. Meshy заполняет прозрачные области чёрным цветом перед построением рельефа.
- Name
- variant
- Type
- string
- по умолчанию low
- Description
Стиль рельефа. Он определяет форму карты глубины и задаёт значение
carving_depth_mmпо умолчанию.Доступные значения:
high: более глубокая резьба, для деталей, напечатанных на 3D-принтере.low: неглубокая резьба, для лазерной гравировки, ЧПУ-резьбы и тонких табличек.
Отправка
nullили""эквивалентна отсутствию этого параметра. Любое другое значение приводит к400.
- Name
- should_generate_model
- Type
- boolean
- по умолчанию true
- Description
Строить ли модель рельефа. Установите
falseдля задачи, создающей только карту глубины — без модели и без изображения-превью. Meshy всё равно проверяет параметры размера, резьбы, основания, изгиба и разрешения, но не использует их. Это не меняет стоимость в кредитах.
- Name
- size_mm
- Type
- number
- по умолчанию 60
- Description
Длина более длинной стороны фотографии на модели, измеренная в плоском виде до любого изгиба, от
20до250миллиметров. При включённомremove_baseмодель может быть меньше.
- Name
- carving_mode
- Type
- string
- по умолчанию emboss
- Description
Выступает ли объект над плитой или вырезан в ней.
Доступные значения:
emboss: более близкие части фотографии выступают вперёд.engrave: глубина инвертируется, так что более близкие части вырезаются внутрь.
Карта глубины одинакова в обоих режимах.
- Name
- carving_depth_mm
- Type
- number
- по умолчанию 6 (high), 3 (low)
- Description
Насколько глубоко вырезан рельеф, от
0до60миллиметров. Еслиremove_baseустановлен вtrue, значение0оставляет пустую модель. Задача всё равно завершается успешно и стоит 20 кредитов, а её файлы GLB и STL не содержат геометрии.
- Name
- remove_base
- Type
- boolean
- по умолчанию false
- Description
Удалять ли фон и не строить плиту основания. Если
true, параметрremoval_thresholdопределяет, что считается фоном. Meshy проверяетremoval_thresholdв любом случае.
remove_base = true- Name
- removal_threshold
- Type
- number
- по умолчанию 0.01
- Description
Глубина, ниже которой Meshy вырезает фон, от
0.01до1, при этом карта глубины изменяется от0до1. Высокое значение может вырезать весь рельеф и оставить пустую модель, которая всё равно успешно создаётся и оплачивается.
- Name
- base_thickness_mm
- Type
- number
- по умолчанию 1, or 0 with remove_base
- Description
Толщина плиты основания, от
0.1до10миллиметров. Еслиremove_baseустановлен вtrue, оставьте этот параметр пустым или отправьте0.
- Name
- bend_mode
- Type
- string
- по умолчанию off
- Description
Изгибать ли рельеф и в какую сторону. Если значение отличается от
off, параметрыbend_axisиbend_angleопределяют форму изгиба. Meshy проверяет их в любом случае.Доступные значения:
off: плоский рельеф.convex: передняя сторона выпячивается наружу.concave: передняя сторона изгибается внутрь.
bend_mode = convex or concave- Name
- bend_axis
- Type
- string
- по умолчанию xz
- Description
Какие края закручивает изгиб.
Доступные значения:
xz: левый и правый края.yz: верхний и нижний края.
- Name
- bend_angle
- Type
- number
- по умолчанию 60
- Description
Дуга, которую охватывает изгиб, от
0до360градусов. Ниже1рельеф остаётся плоским.
- Name
- mesh_resolution
- Type
- integer
- по умолчанию 1024
- Description
Количество точек сетки вдоль более длинной стороны фотографии, от
512до2048. Более высокое значение сохраняет более мелкие детали и создаёт более крупные файлы. При значении по умолчанию1024файл GLB имеет размер около 40–50 МБ, а файл STL — около 80–105 МБ. Квадратная фотография даёт более крупные размеры. При2048они составляют около 150 МБ и 300 МБ. Изгиб увеличивает размеры: файл STL может достигать около 800 МБ при2048.
Возвращаемые данные
202 Accepted, с ID новой задачи Relief в result.
Режимы сбоя
- Name
400 - Bad Request- Description
Запрос не может быть выполнен. Сообщение об ошибке указывает, какая проблема была обнаружена. Например:
- Отсутствующий параметр:
image_urlне был отправлен. - Недопустимый параметр: Параметр имеет неверный тип, выходит за пределы допустимого диапазона или не является одним из доступных значений. Например,
variantне равенhighилиlow, илиmesh_resolutionне является целым числом от512до2048. - Толщина основания:
base_thickness_mmне равен0приremove_base, установленном вtrue, или меньше0.1без него. - Недоступный URL: Meshy не может загрузить изображение по
image_url, например, потому что URL возвращает404или истекло время ожидания. - Недопустимое изображение: Изображение не является файлом JPG, JPEG, PNG или WebP, превышает 20 МБ, меньше 32 × 32 пикселей, содержит слишком много пикселей или не может быть прочитано.
- Экстремальное соотношение сторон: Более длинная сторона изображения более чем примерно в 16 раз превышает короткую сторону.
Исправьте запрос и отправьте его снова. Meshy не взимает плату за это. См. Ошибки.
- Отсутствующий параметр:
- Name
401 - Unauthorized- Description
API-ключ отсутствует или недействителен. Проверьте заголовок
Authorization.
- Name
402 - Payment Required- Description
Например:
- Недостаточно кредитов: У аккаунта недостаточно кредитов для этой задачи, или аккаунт достиг лимита кредитов. Проверьте баланс кредитов, затем повторите попытку.
- Бесплатный план: Для создания задачи требуется платный план. Обновите свой план в настройках подписки, затем повторите попытку.
- Name
403 - Forbidden- Description
Модерация контента заблокировала изображение. Meshy не взимает плату за этот запрос. Отправьте другое изображение.
- Name
429 - Too Many Requests- Description
Был достигнут один из следующих лимитов:
- Вы отправили слишком много запросов. Подождите, затем повторите попытку. См. Лимиты скорости.
- Слишком много ваших задач находятся в очереди или выполняются. Дождитесь завершения некоторых из них, затем повторите попытку.
- На безлимитном плане без оставшихся кредитов вы достигли количества задач, которые могут выполняться без кредитов. Дождитесь завершения задачи или добавьте кредиты.
Если проверка безопасности отклоняет изображение во время выполнения задачи, задача завершается ошибкой с task_error.type, установленным в invalid_input, и task_error.code, установленным в provider_content_refused. Meshy возвращает кредиты, затраченные на задачу. Отправьте другое изображение. См. Ошибки.
Получение задачи Рельефа
Возвращает задачу Рельефа по её ID.
Request
curl https://api.meshy.ai/openapi/v1/relief/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
{
"id": "0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20",
"type": "relief",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/model.glb?Expires=***",
"stl": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/model.stl?Expires=***"
},
"depth_map_url": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/depth.png?Expires=***",
"thumbnail_url": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/preview.png?Expires=***",
"progress": 100,
"status": "SUCCEEDED",
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000060000,
"expires_at": 1700259260000,
"task_error": null,
"consumed_credits": 20
}
Удаление задачи Рельефа
Безвозвратно удаляет задачу Рельефа, включая её модель, карту глубины и данные. Отменить удаление нельзя.
Request
curl --request DELETE \
--url https://api.meshy.ai/openapi/v1/relief/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20 \
-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 keeps 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."
}
Параметры пути
- Name
- id
- Type
- path
- Description
ID задачи, которую нужно удалить.
Статус задачи
Удаление задачи со статусом PENDING возвращает кредиты, потраченные при её создании.
Задачу со статусом IN_PROGRESS удалить нельзя. Запрос вернёт 409 Conflict,
и задача продолжит выполняться. Meshy не возвращает кредиты за уже начатую задачу,
поэтому её удаление означало бы потерю и кредитов, и результата. Дождитесь, пока
она перейдёт в статус SUCCEEDED или FAILED, и только потом удаляйте её.
Удаление задачи со статусом SUCCEEDED не возвращает потраченные на неё кредиты. За задачу со статусом FAILED кредиты уже были возвращены при её сбое.
Возвращает
200 OK, когда задача удалена, или 409 Conflict, если задача имеет статус
IN_PROGRESS.
Список задач Рельефа
Возвращает список ваших задач Рельефа.
Request
curl https://api.meshy.ai/openapi/v1/relief?page_size=10 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
[
{
"id": "0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20",
"type": "relief",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/model.glb?Expires=***",
"stl": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/model.stl?Expires=***"
},
"depth_map_url": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/depth.png?Expires=***",
"thumbnail_url": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/preview.png?Expires=***",
"progress": 100,
"status": "SUCCEEDED",
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000060000,
"expires_at": 1700259260000,
"task_error": null,
"consumed_credits": 20
}
]
Параметры
- Name
- page_num
- Type
- integer
- Description
Номер страницы для возврата. Начинается с
1и по умолчанию равен1.
- Name
- page_size
- Type
- integer
- Description
Количество задач на странице, до
100. По умолчанию10. Meshy трактует значение от101до255как100, а большее значение возвращает400.
- Name
- sort_by
- Type
- string
- Description
Порядок сортировки.
Доступные значения:
+created_at: сначала самые старые-created_at: сначала самые новые
Возвращает
Постраничный список объектов задачи Рельефа.
Потоковая передача задачи Рельефа
Передаёт обновления задачи Рельефа в виде событий Server-Sent Events (SSE).
Request
curl -N https://api.meshy.ai/openapi/v1/relief/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/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": "0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20",
"progress": 0,
"status": "PENDING"
}
event: message
data: {
"id": "0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20",
"type": "relief",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/model.glb?Expires=***",
"stl": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/model.stl?Expires=***"
},
"depth_map_url": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/depth.png?Expires=***",
"thumbnail_url": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/preview.png?Expires=***",
"progress": 100,
"status": "SUCCEEDED",
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000060000,
"expires_at": 1700259260000,
"task_error": null,
"consumed_credits": 20
}
Параметры
- Name
- id
- Type
- path
- Description
ID задачи из ответа на запрос создания.
Возвращает
Поток объектов задачи Рельефа в виде событий Server-Sent Events.
Каждое событие message содержит полный объект задачи — тот же самый, что возвращает Получение задачи Рельефа. Пока задача находится в состоянии PENDING или IN_PROGRESS, между событиями изменяются поля progress, status, started_at и preceding_tasks (присутствует только пока перед этой задачей есть другие задачи). Поля model_urls, depth_map_url и thumbnail_url получают значения, когда задача достигает статуса SUCCEEDED. Задача только с картой глубины сохраняет model_urls равным {} и пустое значение thumbnail_url.
Событие error содержит только status_code и message, поэтому перед чтением status проверяйте название события.
Объект задачи Relief
Объект задачи Relief описывает один рельеф, созданный из фотографии. model_urls, depth_map_url и thumbnail_url присутствуют всегда и остаются пустыми до тех пор, пока задача не будет выполнена успешно.
The Relief Task Object
{
"id": "0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20",
"type": "relief",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/model.glb?Expires=***",
"stl": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/model.stl?Expires=***"
},
"depth_map_url": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/depth.png?Expires=***",
"thumbnail_url": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/preview.png?Expires=***",
"progress": 100,
"status": "SUCCEEDED",
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000060000,
"expires_at": 1700259260000,
"task_error": null,
"consumed_credits": 20
}
Depth map only
{
"id": "0199c3d2-6b8f-7c25-8f3a-4d9e2b7c5a31",
"type": "relief",
"model_urls": {},
"depth_map_url": "https://assets.meshy.ai/***/tasks/0199c3d2-6b8f-7c25-8f3a-4d9e2b7c5a31/output/depth.png?Expires=***",
"thumbnail_url": "",
"progress": 100,
"status": "SUCCEEDED",
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000030000,
"expires_at": 1700259230000,
"task_error": null,
"consumed_credits": 20
}
- Name
- id
- Type
- string
- Description
ID задачи. Рассматривайте его как непрозрачную строку и не полагайтесь на его формат.
- Name
- type
- Type
- string
- Description
Тип задачи, всегда
relief.
- Name
- model_urls
- Type
- object
- Description
URL-адреса для загрузки модели рельефа. Файлы могут быть большими;
mesh_resolutionприводит типичные размеры.- Name
glb- Type
- string
- Description
Файл GLB без текстуры. Его единицы измерения — метры. Отсутствует для задачи, создающей только карту глубины.
- Name
stl- Type
- string
- Description
Та же модель в виде бинарного файла STL. Её единицы измерения — миллиметры, поэтому она открывается в реальном размере рельефа, с осью Z вверх. Отсутствует для задачи, создающей только карту глубины.
- Name
- depth_map_url
- Type
- string
- Description
URL-адрес для загрузки 16-битной карты глубины в градациях серого, на основе которой построен рельеф. Более светлые пиксели соответствуют большей высоте. Значения представляют собой относительные высоты, а не миллиметры. Программное обеспечение для лазерной гравировки и ЧПУ может использовать её как карту высот. Размер файла составляет примерно 1–2 МБ. Пусто, если карта отсутствует.
- Name
- thumbnail_url
- Type
- string
- Description
URL-адрес для загрузки превью-изображения модели рельефа. Пусто, если изображение не было отрендерено, в том числе для задачи, создающей только карту глубины.
- Name
- progress
- Type
- integer
- Description
Насколько выполнена задача, в процентах. Значение равно
0, пока задача не начата, и100, когда она выполнена успешно.
- Name
- status
- Type
- string
- Description
Статус задачи, один из:
PENDING,IN_PROGRESS,SUCCEEDEDилиFAILED.
- Name
- preceding_tasks
- Type
- integer
- Description
Количество задач перед данной в очереди. Это поле не включается в ответ, когда его значение равно
0, поэтому оно появляется только пока перед этой задачей есть другие.
- Name
- created_at
- Type
- timestamp
- Description
Время создания задачи, в миллисекундах Unix.
- Name
- started_at
- Type
- timestamp
- Description
Время начала выполнения задачи, в миллисекундах Unix. Равно
0, пока задача не начата.
- Name
- finished_at
- Type
- timestamp
- Description
Время завершения задачи, в миллисекундах Unix. Равно
0, пока задача не завершена.
- Name
- expires_at
- Type
- timestamp
- Description
Время истечения срока действия результата задачи, в миллисекундах Unix. Равно
0, пока задача не завершена.
- Name
- task_error
- Type
- object
- Description
Сведения об ошибке при неудачном выполнении задачи. См. Ошибки.
- Name
- consumed_credits
- Type
- integer
- Description
Количество кредитов, использованных задачей:
20, либо0для задачи со статусомFAILED, которые Meshy возвращает.