출력을 후처리할 수도 있습니다. 작업은 백그라운드에서 실행됩니다. 작업이 보통 얼마나 걸리는지는 처리 시간을 참조하세요.
Request
POST
/openapi/v1/animations
# Animate a rigged model with required params onlycurlhttps://api.meshy.ai/openapi/v1/animations \-XPOST \-H"Authorization: Bearer ${YOUR_API_KEY}" \-H'Content-Type: application/json' \-d'{ "rig_task_id": "018b314a-a1b5-716d-c222-2f1776f7f579", "action_id": 92 }'# Apply several preset actions and get one file with one clip per actioncurlhttps://api.meshy.ai/openapi/v1/animations \-XPOST \-H"Authorization: Bearer ${YOUR_API_KEY}" \-H'Content-Type: application/json' \-d'{ "rig_task_id": "018b314a-a1b5-716d-c222-2f1776f7f579", "action_ids": [10, 25, 92] }'# Apply a generated Text to Motion clip instead of a preset actioncurlhttps://api.meshy.ai/openapi/v1/animations \-XPOST \-H"Authorization: Bearer ${YOUR_API_KEY}" \-H'Content-Type: application/json' \-d'{ "rig_task_id": "018b314a-a1b5-716d-c222-2f1776f7f579", "motion_task_id": "018c425b-b2c6-727e-d333-3c1887i9h791" }'# With post-processing to change FPScurlhttps://api.meshy.ai/openapi/v1/animations \-XPOST \-H"Authorization: Bearer ${YOUR_API_KEY}" \-H'Content-Type: application/json' \-d'{ "rig_task_id": "018b314a-a1b5-716d-c222-2f1776f7f579", "action_id": 92, "post_process": { "operation_type": "change_fps", "fps": 24 } }'
Response
{"result":"018c425b-b2c6-727e-d333-3c1887i9h791"}
파라미터
Name
rig_task_id
Type
string
필수
Description
애니메이션을 적용할 캐릭터가 있는 리깅 작업의 ID로, POST /openapi/v1/rigging에서 가져옵니다. 해당 작업의 상태는 SUCCEEDED여야 합니다.
action_id, action_ids, motion_task_id 중 정확히 하나를 보내야 합니다.
Name
action_id
Type
integer
필수
Description
action_ids 또는 motion_task_id를 보내지 않는 한 필수입니다. 적용할 프리셋 애니메이션의 ID입니다. 전체 애니메이션 목록은 애니메이션 라이브러리 레퍼런스 또는 애니메이션 목록 조회를 참조하세요.
Name
action_ids
Type
array of integers
필수
Description
action_id 또는 motion_task_id를 보내지 않는 한 필수입니다. 한 번에 적용할 1개에서 10개의 프리셋 애니메이션 ID로, 중복 없이 지정합니다. 10개를 초과하거나 ID가 중복되면 400을 반환합니다. ID 목록은 애니메이션 라이브러리 레퍼런스를 참조하세요.
Meshy는 액션별로 하나의 애니메이션 클립을 담은 파일 하나를 반환하며, 이는 게임 엔진의 상태 머신에 적합합니다. Meshy는 목록에 있는 각 액션에 대해 요금을 부과합니다. 요금을 참조하세요.
ID 하나로 된 목록은 해당 ID를 action_id로 보낸 것과 동일하게 동작합니다.
Name
motion_task_id
Type
string
필수
Description
action_id 또는 action_ids를 보내지 않는 한 필수입니다. 프리셋 액션 대신 적용할 클립이 있는 Text to Motion 작업의 ID입니다. 해당 작업의 상태는 SUCCEEDED여야 하며, 리그는 2족 보행(biped)이어야 합니다.
Meshy는 리깅된 캐릭터에 클립을 리타깃합니다. 이 작업을 생성할 때 클립을 복사하므로, 이후 Text to Motion 작업이 만료되거나 삭제되더라도 이 작업에는 영향이 없습니다. Meshy는 Text to Motion 작업의 파일을 3일간 보관하므로, 그 전에 클립을 적용하세요.
Name
post_process
Type
object
Description
애니메이션 출력물에 대한 후처리입니다. 표준 애니메이션 파일을 받으려면 생략하세요.
motion_task_id를 사용하면 리타깃 결과가 GLB 전용 애니메이션으로 생성될 수 있습니다. post_process를 보냈는데 FBX 파일을 사용할 수 없는 경우, 작업은 task_error로 실패하며 Meshy가 크레딧을 환불합니다. post_process가 없으면 작업은 성공하고 animation_fbx_url은 비어 있습니다.
다음 경우에만 적용 post_process is set
Name
operation_type
Type
string
Description
실행할 작업입니다. 지정하지 않으면 Meshy는 추가 파일을 만들지 않습니다. 다음 목록에 없는 값을 보내면 400을 반환합니다.
사용 가능한 값:
change_fps: 프레임 레이트를 fps로 변경합니다
fbx2usdz: 애니메이션을 USDZ로 변환합니다
extract_armature: 아마추어를 FBX 파일로 추출합니다
Name
fps
Type
integer
기본값 30
Description
변경할 프레임 레이트로, 24, 25, 30, 60 중 하나입니다. operation_type이 change_fps일 때만 적용됩니다. 다른 값을 보내면 400을 반환합니다.
action_ids를 사용하면 작업은 액션별로 파일 하나씩이 아니라 하나의 병합된 파일을 반환합니다. animation_glb_url과 animation_fbx_url은 각각 요청된 모든 액션을 개별 클립으로 담은 파일 하나를 가리킵니다. 해당 파일에서:
클립 순서: ID의 숫자 순서가 아니라 action_ids 배열의 순서를 따릅니다.
클립 이름: 라이브러리에 있는 애니메이션의 이름입니다. 이는 Meshy 웹 앱에서 캐릭터의 모든 애니메이션을 하나의 파일로 내보낼 때 얻는 이름과 일치합니다. 요청된 두 ID의 클립 이름이 같으면, Meshy는 이름을 고유하게 유지하기 위해 나중 항목에 action_id를 추가합니다.
후처리: Meshy는 각 클립이 아니라 병합된 파일에 후처리를 적용합니다.
반환값
응답의 result 필드에는 새로 생성된 애니메이션 작업의 ID가 담겨 있습니다.
실패 모드
Name
400 - Bad Request
Description
요청을 실행할 수 없습니다. 오류 메시지에 발견된 문제가 표시됩니다. 예를 들어:
파라미터 누락: rig_task_id가 누락되었거나, action_id, action_ids, motion_task_id 중 어느 것도 보내지 않았습니다.
파라미터 충돌: 요청에 action_id, action_ids, motion_task_id 중 두 개 이상이 포함되어 있습니다. 하나만 보내세요.
유효하지 않은 리깅 작업: rig_task_id가 유효한 작업 ID가 아니거나, 리깅 작업이 아니거나, 성공하지 않은 작업을 가리킵니다.
유효하지 않은 액션 ID: action_id 또는 action_ids의 항목이 유효한 애니메이션이 아닙니다.
액션 개수 초과: action_ids에 10개를 초과하는 ID가 있습니다.
중복 액션: action_ids에 동일한 ID가 두 번 이상 있습니다.
모션 작업 준비되지 않음: motion_task_id 작업이 아직 SUCCEEDED에 도달하지 않았습니다.
지원되지 않는 리그: motion_task_id는 2족 보행 리그가 필요하며, Meshy는 4족 보행 리그를 거부합니다.
// 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를, 작업이 IN_PROGRESS 상태이면
409 Conflict를 반환합니다.
// Error event exampleevent: errordata: {"status_code": 404,"message": "Task not found"}// Message event examples illustrate task progress.// These examples are shortened. Each event holds the full task object.event: messagedata: {"id": "018c425b-b2c6-727e-d333-3c1887i9h791","progress": 0,"status": "PENDING"}event: messagedata: {"id": "018c425b-b2c6-727e-d333-3c1887i9h791","progress": 50,"status": "IN_PROGRESS"}event: messagedata: { // Example of a SUCCEEDED task stream item, with the same structure as the Animation task object"id": "018c425b-b2c6-727e-d333-3c1887i9h791","type": "animate","status": "SUCCEEDED","created_at": 1747032440896,"progress": 100,"started_at": 1747032441210,"finished_at": 1747032457530,"expires_at": 1747291657530,"task_error": null,"consumed_credits": 3,"result": {"animation_glb_url":"https://assets.meshy.ai/.../Animation_Reaping_Swing_withSkin.glb?...","animation_fbx_url":"https://assets.meshy.ai/.../Animation_Reaping_Swing_withSkin.fbx?...","processed_usdz_url":"https://assets.meshy.ai/.../processed.usdz?...","processed_armature_fbx_url":"https://assets.meshy.ai/.../processed_armature.fbx?...","processed_animation_fps_fbx_url":"https://assets.meshy.ai/.../processed_60fps.fbx?..." }}
검색할 텍스트입니다. Meshy는 name 또는 key에 이 텍스트가 포함된 애니메이션을 대소문자 구분 없이 반환합니다. Meshy는 텍스트를 그대로 일치시키므로 %와 _는 와일드카드로 동작하지 않습니다.
Name
category
Type
string
Description
조회할 카테고리이며, 정확히 일치해야 합니다. 알 수 없는 카테고리는 빈 목록을 반환합니다.
사용 가능한 값:
WalkAndRun
BodyMovements
DailyActions
Fighting
Dancing
Name
sub_category
Type
string
Description
조회할 하위 카테고리이며, 정확히 일치해야 합니다. category 없이도 보낼 수 있습니다. 하위 카테고리 이름은 카테고리 간에 고유하지 않습니다. 예를 들어 Transitioning은 Fighting과 DailyActions 양쪽 모두에 속해 있습니다. 따라서 category 없이 사용하면 필터는 모든 카테고리에서 해당 하위 카테고리와 일치합니다.
Name
action_ids
Type
string
Description
반환할 애니메이션을 쉼표로 구분된 최대 200개의 action_id 값으로 지정합니다. 전체를 둘러보는 대신 특정 ID를 조회할 때 사용하세요. 200개를 초과하면 400이 반환됩니다.
응답에는 해당하는 애니메이션이 없는 ID는 포함되지 않습니다. 따라서 이 필터를 사용해 저장해 둔 ID가 여전히 사용 가능한지 확인할 수도 있습니다.
필터 조합하기
Meshy는 필터들을 함께 적용합니다. 각 필터는 결과를 좁히므로, Meshy는 모든 필터와 일치하는 경우에만 애니메이션을 반환합니다. 하나의 필터 내에서는 그 값들 중 어느 하나라도 일치하면 됩니다. 예를 들어 search는 name 또는 key와 일치하고, action_ids는 목록에 있는 어떤 ID와도 일치할 수 있습니다.
따라서 겹치는 부분이 없는 조합은 오류가 아니라 빈 배열을 반환합니다. 액션 92는 "Double Combo Attack"으로, Fighting 애니메이션입니다. 예를 들어:
?action_ids=92&category=Fighting은 액션 92를 반환합니다.
?action_ids=92&category=Dancing은 []를 반환하는데, 이는 Dancing 애니메이션이 아니기 때문입니다.
?action_ids=92&search=walk는 []를 반환하는데, 이름이 walk와 일치하지 않기 때문입니다.
애니메이션 작업 생성하기는 이 엔드포인트가 반환하는 모든 action_id를 받아들이며, 이 엔드포인트는 생성 시 받아들여지는 모든 ID를 반환합니다. 둘 다 더 이상 사용되지 않는(retired) 애니메이션은 포함하지 않습니다. 라이브러리를 캐시하는 경우, 더 이상 사용되지 않는 ID가 선택기에 남아 있지 않도록 주기적으로 갱신하세요.