UV Unwrap API

UV Unwrap APIは、既存の3Dモデルに対して高品質なUV展開を自動生成します。テクスチャリングの前段階として、またはBlender、Substance Painter、Unrealなどの下流ツールのために、重なりのないクリーンなUVレイアウトが必要なときにいつでもご利用ください。

出力されるのは「UVホワイトモデル」です — 入力と同じ形状を保ちながら、新しいUV座標を持ち、実際のテクスチャは含まれません(glTFのマテリアルスロットを有効に保つため、2×2のグレーのプレースホルダーマテリアルが含まれていますが、標準的なツールではこれをテクスチャなしとして扱います)。


POST/openapi/v1/uv-unwrap

UV Unwrapタスクを作成する

このエンドポイントは、新しいUV Unwrapタスクを作成します。

パラメータ

  • Name
    input_task_id
    Type
    string
    必須
    Description

    UV展開したいGLB出力を持つ、完了済みのMeshy APIタスクのID(例:画像から3D、テキストから3D、またはRemeshの結果)。ソースとなるタスクのステータスは SUCCEEDED であり、GLBファイルを生成している必要があります。

    ソースメッシュの面数が上限の40,000面を超えている場合、リクエストは 400 で拒否されます。その場合はまずRemeshを実行してポリゴン数を減らしてください。

  • Name
    model_url
    Type
    string
    必須
    Description

    公開アクセス可能なURLまたはdata URIを介して、3Dモデルを直接指定します。サポートされるのは .glb のみです — APIはglTFバイナリを読み取るのみで、他の形式は解析しません。他の形式(.fbx.obj.stl.gltf)のモデルをUV展開するには、まずConvert API.glb に変換し、生成されたタスクIDを input_task_id として、またはそのGLB出力URLをここに渡してください。

    Data URIを使用する場合は、MIMEタイプ application/octet-stream を使用してください。

    input_task_id の場合と同じ40,000面の上限が適用されます。上限を超えるメッシュは 400 で拒否されるため、まずRemeshを実行してください。

戻り値

レスポンスの result プロパティには、新しく作成されたUV Unwrapタスクの id が含まれます。

失敗モード

  • Name
    400 - Bad Request
    Description

    リクエストが受理できませんでした。よくある原因:

    • パラメータの欠落input_task_id または model_url のいずれかを指定する必要があります。
    • 無効な入力タスクinput_task_id は、GLB結果を持つ成功したタスクを参照している必要があります。
    • 面数超過:ソースメッシュの面数がUV Unwrapの上限を超えています。まずRemeshを実行してください。
    • 無効なモデル形式model_url がサポートされていない拡張子のファイルを指しています。
    • URLに到達できないmodel_url をダウンロードできませんでした。
  • Name
    401 - Unauthorized
    Description

    認証に失敗しました。APIキーを確認してください。

  • Name
    402 - Payment Required
    Description

    このタスクを実行するためのクレジットが不足しています。UV Unwrapは1回の呼び出しにつき5クレジットかかります。

  • Name
    404 - Not Found
    Description

    この機能はお使いのアカウントで有効になっていません。UV Unwrapは展開期間中、Statsigフラグによって制御されています — アクセスが必要な場合はMeshyサポートまでお問い合わせください。

  • Name
    429 - Too Many Requests
    Description

    レート制限を超過しました。

Request

POST
/openapi/v1/uv-unwrap
# Chain from an existing Meshy task
curl https://api.meshy.ai/openapi/v1/uv-unwrap \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
      "input_task_id": "0193bfc5-ee4f-73f8-8525-44b398884ce9"
    }'

# Or from a publicly accessible model URL
curl https://api.meshy.ai/openapi/v1/uv-unwrap \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
      "model_url": "https://example.com/path/to/model.glb"
    }'

Response

{
  "result": "019361c6-9b34-7b23-bef2-d0107c4d92e2"
}

GET/openapi/v1/uv-unwrap/:id

UV展開タスクの取得

このエンドポイントは、IDによってUV展開タスクの現在の状態を取得します。

戻り値

UV展開タスクオブジェクトを返します。

Request

GET
/openapi/v1/uv-unwrap/:id
curl https://api.meshy.ai/openapi/v1/uv-unwrap/019361c6-9b34-7b23-bef2-d0107c4d92e2 \
-H "Authorization: Bearer ${YOUR_API_KEY}"

以下のタスクオブジェクトの例を参照してください。


DELETE/openapi/v1/uv-unwrap/:id

UV展開タスクの削除

UV展開タスクを完全に削除します。タスクとその出力にはアクセスできなくなります。

まだ PENDING 状態のタスクは削除され、作成時に消費されたクレジットは返金されます。

すでに IN_PROGRESS のタスクは削除できません。リクエストは 409 Conflict で 拒否され、タスクは実行され続けます。ワーカーがすでに開始しているタスクのクレジットは 返金対象外のため、実行中に削除すると、クレジットと結果の両方を失うことになります。 SUCCEEDEDFAILED、または CANCELED になるのを待ってから削除してください。

終了状態(SUCCEEDEDFAILED、または CANCELED)にあるタスクは、 返金なしで削除されます。

Request

DELETE
/openapi/v1/uv-unwrap/:id
curl https://api.meshy.ai/openapi/v1/uv-unwrap/019361c6-9b34-7b23-bef2-d0107c4d92e2 \
-X DELETE \
-H "Authorization: Bearer ${YOUR_API_KEY}"

GET/openapi/v1/uv-unwrap

UV展開タスク一覧の取得

呼び出し元のUV展開タスクの一覧を、新しい順にページネーションで返します。page_numpage_size による標準的なページネーションです。

Request

GET
/openapi/v1/uv-unwrap
curl "https://api.meshy.ai/openapi/v1/uv-unwrap?page_num=1&page_size=20" \
-H "Authorization: Bearer ${YOUR_API_KEY}"

GET/openapi/v1/uv-unwrap/:id/stream

UV UnwrapタスクをStreamする

タスクのprogressをServer-Sent Eventsとして購読します。各messageイベントはUV Unwrap Taskオブジェクトを伝えます。タスクがSUCCEEDEDFAILED、またはCANCELEDに達すると、ストリームは閉じられます。

完了時のレイテンシを低く抑えるため、GET /openapi/v1/uv-unwrap/:idをポーリングする代わりにこちらを使用してください。

Request

GET
/openapi/v1/uv-unwrap/:id/stream
curl https://api.meshy.ai/openapi/v1/uv-unwrap/019361c6-9b34-7b23-bef2-d0107c4d92e2/stream \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-N

UV Unwrapタスクオブジェクト

  • Name
    id
    Type
    string
    Description

    タスクの一意な識別子。

  • Name
    type
    Type
    string
    Description

    常に uv-unwrap

  • Name
    model_urls
    Type
    object
    Description

    生成されたUVホワイトモデルの署名付きダウンロードURL。UV展開は常に単一の glb エントリを返します — 出力は入力のジオメトリを保持し、UV座標を新しいものに置き換え、テクスチャの代わりにデフォルトのグレーマテリアルを使用します。

  • Name
    thumbnail_url
    Type
    string
    Description

    UVホワイトモデルのPNGプレビューへの署名付きURL。

  • Name
    progress
    Type
    integer
    Description

    タスクのprogress(0 から 100 まで)。

  • Name
    status
    Type
    string
    Description

    PENDINGIN_PROGRESSSUCCEEDEDFAILEDCANCELED のいずれか。

  • 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
    expires_at
    Type
    timestamp
    Description

    署名付きダウンロードURLが期限切れになるタイムスタンプ(ミリ秒単位)。

  • Name
    task_error
    Type
    object
    Description

    失敗したタスクのエラー詳細。task_error オブジェクトの完全なリファレンスについてはエラーを参照してください。

  • Name
    consumed_credits
    Type
    integer
    Description

    このタスクで消費されたクレジット。FAILED タスクの場合は 0 を返します(失敗時はクレジットが返金されます)。UV展開は成功時に5クレジットを消費します。

Example UV Unwrap Task Object

{
  "id": "019361c6-9b34-7b23-bef2-d0107c4d92e2",
  "type": "uv-unwrap",
  "model_urls": {
    "glb": "https://assets.meshy.ai/***/tasks/019361c6-9b34-7b23-bef2-d0107c4d92e2/output/model.glb?Expires=***"
  },
  "thumbnail_url": "https://assets.meshy.ai/***/tasks/019361c6-9b34-7b23-bef2-d0107c4d92e2/output/preview.png?Expires=***",
  "progress": 100,
  "status": "SUCCEEDED",
  "preceding_tasks": 0,
  "created_at": 1716579120000,
  "started_at": 1716579122000,
  "finished_at": 1716579180000,
  "expires_at": 1716665580000,
  "task_error": {
    "message": ""
  },
  "consumed_credits": 5
}