Text to Motion API
Создавайте клипы с движениями персонажа на основе текстовых описаний. Опишите действие, например «персонаж машет рукой» или «зомби бредёт вперёд», и получите готовый клип с движением. Вы можете перенацелить клип на риггированных персонажей в вашем собственном пайплайне или DCC-инструментах.
Результатом является самостоятельный клип с движением. Он не требует модели персонажа и не привязан к ней. Чтобы сначала выполнить риггинг персонажа, см. Rigging APIid задачи в качестве motion_task_id в Animation API
Создание задачи Text to Motion
Создаёт задачу Text to Motion, которая генерирует анимационный клип на основе текстового prompt.
Задача выполняется в фоновом режиме. Информацию о том, сколько обычно занимает выполнение задачи, см. в разделе Время обработки.
Задача prime стоит 10 кредитов и использует более качественную модель движения Meshy. Задача swift стоит 3 кредита и использует более быструю и дешёвую модель движения.
Request
# Generate a motion clip with required params only
curl https://api.meshy.ai/openapi/v1/text-to-motion \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"prompt": "a character waving",
"duration": 3
}'
# Generate a fast, economical clip with Swift mode
curl https://api.meshy.ai/openapi/v1/text-to-motion \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"prompt": "a character waving",
"mode": "swift",
"duration": 4.5
}'
Response
{
"result": "018c425b-b2c6-727e-d333-3c1887i9h791"
}
Параметры
- Name
- prompt
- Type
- string
- Обязательный
- Description
Текст, описывающий генерируемое движение, до 400 символов. Более длинный текст приводит к ошибке
400.
- Name
- mode
- Type
- string
- по умолчанию prime
- Description
Модель движения, которая также определяет формат файла клипа.
Доступные значения:
prime: более высокое качество, возвращает клип в формате FBXswift: быстрее и дешевле, возвращает клип в формате BVH
Любое другое значение приводит к ошибке
400.
- Name
- duration
- Type
- number
- Обязательный
- Description
Целевая длительность клипа в секундах, от
2до10с шагом0.5, например2,2.5или3. Любое другое значение приводит к ошибке400.
Возвращаемое значение
Поле result в ответе содержит ID новой задачи Text to Motion.
Режимы сбоев
- Name
400 - Bad Request- Description
Запрос не может быть выполнен. В сообщении об ошибке указано, какая проблема была обнаружена. Например:
- Отсутствующий или пустой prompt:
promptотсутствует, пуст или превышает 400 символов. - Недопустимое значение mode:
modeне равноprimeилиswift. - Недопустимая длительность:
durationотсутствует, выходит за пределы диапазона от2до10или не кратна шагу0.5секунды.
Исправьте запрос и отправьте его снова. См. Ошибки.
- Отсутствующий или пустой prompt:
- Name
401 - Unauthorized- Description
API-ключ отсутствует или недействителен. Проверьте заголовок
Authorization.
- Name
402 - Payment Required- Description
Например:
- Недостаточно кредитов: на аккаунте недостаточно кредитов для выполнения этой задачи, либо аккаунт достиг лимита кредитов. Проверьте баланс кредитов и повторите попытку.
- Бесплатный план: для создания задачи требуется платный план. Обновите свой план в настройках подписки, затем повторите попытку.
- Name
403 - Forbidden- Description
Модерация контента отметила prompt. Измените prompt и отправьте запрос снова.
- Name
429 - Too Many Requests- Description
Вы превысили ограничение частоты запросов. Подождите и повторите попытку. См. Ограничения частоты.
Получить задачу Text to Motion
Возвращает задачу Text to Motion по её ID.
Request
curl https://api.meshy.ai/openapi/v1/text-to-motion/018c425b-b2c6-727e-d333-3c1887i9h791 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
{
"id": "018c425b-b2c6-727e-d333-3c1887i9h791",
"type": "text-to-motion",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1787314497437,
"started_at": 1787314498012,
"finished_at": 1787314505881,
"expires_at": 1787573705881,
"task_error": null,
"result": {
"motion_url": "https://assets.meshy.ai/0630d47c-84b8-4d37-bc02-69e45d9272c1/tasks/018c425b-b2c6-727e-d333-3c1887i9h791/output/clip.fbx?Expires=...",
"motion_format": "fbx",
"duration_ms": 3000,
"mode": "prime"
},
"consumed_credits": 10
}
Параметры
- Name
- id
- Type
- path
- Description
ID задачи из ответа на создание.
Возвращает
Получение списка задач Text to Motion
Возвращает постраничный список ваших задач Text to Motion, сначала самые новые. Для постраничного просмотра списка используйте page_num и page_size.
Ответ представляет собой массив объектов задачи Text to Motion.
Задачи, созданные через API, остаются в API и не отображаются в разделе My Assets в веб-приложении. Чтобы найти задачу, идентификатор которой у вас больше не сохранён, используйте этот эндпоинт.
Request
curl "https://api.meshy.ai/openapi/v1/text-to-motion?page_num=1&page_size=20" \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
[
{
"id": "018c425b-b2c6-727e-d333-3c1887i9h791",
"type": "text-to-motion",
"status": "SUCCEEDED",
"...": "..."
}
]
Получение обновлений задачи Text to Motion в режиме стриминга
Передаёт обновления задачи Text to Motion в виде потока событий Server-Sent Events (SSE).
Request
curl -N https://api.meshy.ai/openapi/v1/text-to-motion/018c425b-b2c6-727e-d333-3c1887i9h791/stream \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response Stream
// Error event example
event: error
data: {
"status_code": 404,
"message": "Task not found"
}
// Message events carry the full task object at every stage; the result
// fields stay empty until the task succeeds.
event: message
data: {
"id": "018c425b-b2c6-727e-d333-3c1887i9h791",
"type": "text-to-motion",
"status": "IN_PROGRESS",
"progress": 50,
"created_at": 1787314497437,
"started_at": 1787314498012,
"finished_at": 0,
"expires_at": 0,
"task_error": null,
"result": {
"motion_url": "",
"motion_format": "",
"duration_ms": 0,
"mode": ""
},
"consumed_credits": 10
}
event: message
data: { // Example of a SUCCEEDED task event, with the same fields as the Text to Motion task object
"id": "018c425b-b2c6-727e-d333-3c1887i9h791",
"type": "text-to-motion",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1787314497437,
"started_at": 1787314498012,
"finished_at": 1787314505881,
"expires_at": 1787573705881,
"task_error": null,
"result": {
"motion_url": "https://assets.meshy.ai/.../output/clip.fbx?Expires=...",
"motion_format": "fbx",
"duration_ms": 3000,
"mode": "prime"
},
"consumed_credits": 10
}
Параметры
- Name
- id
- Type
- path
- Description
ID задачи из ответа на создание.
Возвращает
Поток объектов задачи Text to Motion в виде событий Server-Sent Events.
Каждое событие message содержит полный объект задачи. Пока задача имеет статус PENDING или IN_PROGRESS, поля result пусты ("" или 0), а finished_at и expires_at равны 0. Чтобы отслеживать ход выполнения задачи, следите за status и progress.
Удаление задачи Text to Motion
Безвозвратно удаляет задачу Text to Motion, включая её клип движения. Отменить удаление нельзя.
Request
curl --request DELETE \
--url https://api.meshy.ai/openapi/v1/text-to-motion/018c425b-b2c6-727e-d333-3c1887i9h791 \
-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 или CANCELED, и только после этого удаляйте её.
Удаление задачи в финальном статусе (SUCCEEDED, FAILED или CANCELED)
не возвращает кредиты.
Возвращает
200 OK, когда задача удалена, или 409 Conflict, когда задача имеет статус
IN_PROGRESS.
Объект задачи Text to Motion
Объект задачи Text to Motion описывает генерацию одного клипа движения. Он содержит статус, progress и сам клип, когда задача выполнена успешно.
Свойства
Example Text to Motion Task Object
{
"id": "018c425b-b2c6-727e-d333-3c1887i9h791",
"type": "text-to-motion",
"status": "SUCCEEDED",
"progress": 100,
"created_at": 1787314497437,
"started_at": 1787314498012,
"finished_at": 1787314505881,
"expires_at": 1787573705881,
"task_error": null,
"result": {
"motion_url": "https://assets.meshy.ai/.../output/clip.fbx?Expires=...",
"motion_format": "fbx",
"duration_ms": 3000,
"mode": "prime"
},
"consumed_credits": 10
}
- Name
- id
- Type
- string
- Description
ID задачи. Рассматривайте его как непрозрачную строку и не полагайтесь на её формат.
- Name
- type
- Type
- string
- Description
Тип задачи, всегда
text-to-motion.
- Name
- status
- Type
- string
- Description
Статус задачи, один из
PENDING,IN_PROGRESS,SUCCEEDED,FAILEDилиCANCELED.
- Name
- progress
- Type
- integer
- Description
Насколько выполнена задача, в процентах от
0до100.
- 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, пока задача не завершится. Meshy хранит клип в течение 3 дней после завершения задачи, поэтому скачайте его до истечения этого срока.
- Name
- preceding_tasks
- Type
- integer
- Description
Количество задач перед данной в очереди. Значение имеет смысл только пока задача находится в статусе
PENDING. Поле отсутствует, если значение равно0.
- Name
- consumed_credits
- Type
- integer
- Description
Количество кредитов, использованных задачей:
10для режимаprimeили3для режимаswift. Равно0для задачи со статусомFAILED, потому что Meshy возвращает кредиты при неудачном выполнении задачи.
- Name
- task_error
- Type
- object
- Description
Подробности ошибки, если задача завершилась неудачно, и
nullв противном случае. См. Ошибки.
- Name
- result
- Type
- object
- Description
Сгенерированный клип движения, когда задача выполнена успешно. До этого момента поля присутствуют, но пусты (
""или0).- Name
motion_url- Type
- string
- Description
- URL для скачивания клипа движения. Meshy подписывает URL заново при каждом чтении, и его срок действия истекает вместе с окном хранения задачи.
- Name
motion_format- Type
- string
- Description
- Формат файла клипа,
fbxдля режимаprimeилиbvhдля режимаswift.
- Name
duration_ms- Type
- integer
- Description
- Длительность клипа, в миллисекундах.
- Name
mode- Type
- string
- Description
- Режим, который Meshy использовал для генерации клипа,
primeилиswift.