lowpoly は 2026/10/30 に廃止されます。 リクエストエラーを避けるため、これらの日付までにモデルを切り替えてください。 非推奨の一覧を見る

Creative Lab Fidget Pixel API

写真を2段階でマルチカラーの3Dプリント可能なピクセルアート・フィジェットボードに変換します。プロトタイプタスクは写真をピクセルアート画像に変換します。ビルドタスクはその画像を1つの3MFファイルにまとめられた、かみ合うパーツに変換し、プロトタイプタスクのIDを input_task_id として受け取ります。

  • POST /openapi/creative-lab/fidget-pixel/v1/prototype
  • POST /openapi/creative-lab/fidget-pixel/v1/build

どちらの POST エンドポイントも有料プランが必要です。無料プランのアカウントからのリクエストは 402 を返します。


POST/openapi/creative-lab/fidget-pixel/v1/prototype

Fidget Pixel プロトタイプタスクを作成する

1枚の写真からピクセルアート画像を1枚生成します。パーツをビルドするには、このタスクのIDをinput_task_idとしてビルドエンドポイントに渡してください。タスクのフィールドについては、Fidget Pixelプロトタイプタスクオブジェクトを参照してください。

生成された画像が気に入らない場合は、別のプロトタイプタスクを作成してください。各タスクは個別に課金されます。

Request

POST
/openapi/creative-lab/fidget-pixel/v1/prototype
# Stage 1: pixelize the source photo
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/prototype \
  -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>",
    "type": "person"
  }'

Response

{
  "result": "019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7"
}

パラメーター

  • Name
    image_url
    Type
    string
    必須
    Description

    ピクセルアートに変換する写真。公開URLまたはData URI(data:image/jpeg;base64,<your base64-encoded image data>)として指定します。

    画像はJPG、JPEG、PNG、またはWebPファイルで、サイズは最大20MBである必要があります。MeshyはURLのファイル拡張子ではなく、画像データから形式を検出します。拡張子のないURLでも動作し、Meshyはリダイレクトをたどります。

  • Name
    type
    Type
    string
    必須
    Description

    写真が何を写しているかを指定し、これによりピクセルアートのスタイルが決まります。2つのスタイルは明確に異なります。これ以外の値を指定すると400が返されます。

    利用可能な値:

    • person:ポートレートまたは全身写真に写る人物。Meshyはちびキャラ風のピクセルスプライトを描画します。
    • other:ペット、物、マスコット、ロゴ、風景など、それ以外の被写体。Meshyはビーズアート風のピクセルアイコンを描画します。
  • Name
    name
    Type
    string
    Description

    タスクの名前で、最大100文字です。タスクのnameフィールドに返されます。これより長い名前を指定すると400が返されます。

戻り値

resultフィールドには、新しく作成されたプロトタイプタスクのIDが格納されます。statusがSUCCEEDEDになるまでタスクを取得するか、ストリーミングで取得してください。その後、そのIDをinput_task_idとしてビルドエンドポイントに渡します。

失敗モード

  • Name
    400 - Bad Request
    Description

    リクエストを実行できません。例えば次のような場合です:

    • image_urlまたはtypeが指定されていない。
    • typeがpersonまたはotherのいずれでもない。
    • 画像がJPG、JPEG、PNG、またはWebPファイルではない。
    • 画像が小さすぎる、20MBを超えている、または最大ピクセル数を超えている。
    • 例えばURLが404を返す、またはタイムアウトするなどの理由で、Meshyが画像をダウンロードできない。
    • Data URIが有効なbase64ではない。
    • 画像がNSFWとしてフラグ付けされた。

    エラーメッセージには、検出された問題の内容が記載されます。リクエストを修正してから、再度送信してください。

  • Name
    401 - Unauthorized
    Description

    APIキーが指定されていないか、無効です。Authorizationヘッダーを確認してください。

  • Name
    402 - Payment Required
    Description

    以下のいずれかに該当します:

    • アカウントのクレジットが不足している。
    • APIキー、ワークスペース、またはメンバーがクレジット上限に達した。
    • アカウントが無料プランである。

    クレジットとプランを確認してから、再試行してください。

  • Name
    403 - Forbidden
    Description

    チームでIP Filteringが有効になっており、Meshyがその画像を第三者の知的財産として検出しました。利用権限を持つ画像を送信してください。

  • Name
    429 - Too Many Requests
    Description

    以下のいずれかの制限に達しました:

    • レート制限で許可されている件数を超えるリクエストを送信した。数秒待ってから再試行してください。レート制限を参照してください。
    • キューに入っている、または実行中のタスクが多すぎる。いくつか完了するのを待ってから再試行してください。
    • 無制限プランでクレジットが残っていない状態で、クレジットなしで実行できるタスク数の上限に達した。タスクが完了するのを待つか、クレジットを追加してください。
  • Name
    500 - Internal Server Error
    Description

    Meshyでサーバーエラーが発生しました。例えば、画像に対する知的財産チェックを実行できなかった場合などです。Meshyはタスクを作成せず、課金されたクレジットがあれば返金します。リクエストを再試行してください。


POST/openapi/creative-lab/fidget-pixel/v1/build

Fidget Pixel ビルドタスクを作成する

成功したプロトタイプタスクから3Dプリント可能なピースを生成します。Meshy はピクセルアート画像をグリッドにサンプリングし、最大 color_count 色に削減します。被写体の各セルは互いに組み合わさるピースとなり、背景は印刷されません。

結果は印刷可能な単一のマルチカラー3MFファイルです。各ピースはグレーの本体とピクセルの色のトップを持ちます。フィールドについては、Fidget Pixelビルドタスクオブジェクトを参照してください。

Request

POST
/openapi/creative-lab/fidget-pixel/v1/build
# Stage 2: chain build off a succeeded prototype task
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/build \
  -X POST \
  -H "Authorization: Bearer ${YOUR_API_KEY}" \
  -H 'Content-Type: application/json' \
  -d '{
    "input_task_id": "019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7",
    "options": {
      "shape": "square",
      "grid_size": 32,
      "piece_size_mm": 8,
      "color_count": 8,
      "piece_height_mm": 15
    },
    "output": {
      "format": "3mf"
    }
  }'

Response

{
  "result": "019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98"
}

パラメータ

  • Name
    input_task_id
    Type
    string
    必須
    Description

    ビルド対象のプロトタイプタスクのIDです。これはあなたのアカウントが POST /openapi/creative-lab/fidget-pixel/v1/prototype で作成した、ステータスが SUCCEEDED のタスクである必要があります。

    あなたのAPI経由のFidget PixelプロトタイプタスクのいずれでもないIDを指定すると、ウェブアプリで作成されたプロトタイプも含めて 404 が返されます。

  • Name
    name
    Type
    string
    Description

    タスクの名前です。最大100文字まで指定できます。タスクの name フィールドに反映されます。これより長い名前を指定すると 400 が返されます。

options

ピースの形状とサイズに関する設定です。各フィールドにはデフォルト値があるため、変更したいフィールドのみを送信してください。0 を指定するとそのフィールドのデフォルト値が使用されます。これらはCreative Labウェブアプリと同じ設定です。その他の形状設定は固定されており、Meshy が shape と piece_size_mm から設定します。

  • Name
    shape
    Type
    string
    デフォルト square
    Description

    各ピースのフットプリントです。これ以外の値を指定すると 400 が返されます。

    指定可能な値:

    • square: 正方形グリッド上の正方形ピース
    • hex: 六角形グリッド上の六角形ピース。piece_size_mm は 6 または 8 に設定されます
  • Name
    grid_size
    Type
    integer
    デフォルト 32
    Description

    ボードの各辺に沿ったグリッドセルの数で、16 または 32 です。これ以外の値を指定すると 400 が返されます。32 グリッドはより多くのディテールを保持します。16 グリッドは同じサイズのピースの数が少なくなるため、ボードの幅は約半分になります。

  • Name
    piece_size_mm
    Type
    integer
    デフォルト 8
    Description

    各ピースの辺の長さ(ミリメートル)で、6、8、または 10 です。これ以外の値を指定すると 400 が返されます。grid_size と組み合わせて、印刷されるボードのサイズを決定します。例えば、8mmピースの 32 グリッドの場合、一辺は約26.5cmになります。

    10 は hex では使用できず 400 が返されます。これは、斜めの六角形の面が、一般的なコンシューマー向けFDMプリンターの多くでオーバーハングになるためです。

  • Name
    color_count
    Type
    integer
    デフォルト 8
    Description

    ピクセルアートパレットの最大色数で、1 から 8 までです。この範囲外の値を指定すると 400 が返されます。印刷するには、各色用に1つ、グレーの本体用に1つの、合計で color_count 加1個までのフィラメントが必要です。

  • Name
    piece_height_mm
    Type
    integer
    デフォルト 15
    Description

    各ピースの高さ(ミリメートル)で、10 から 80 までです。この範囲外の値を指定すると 400 が返されます。

output

結果ファイルの設定です。

  • Name
    format
    Type
    string
    デフォルト 3mf
    Description

    結果のファイル形式です。これ以外の値を指定すると 400 が返されます。

    指定可能な値:

    • 3mf: 単一のマルチカラー model.3mf ファイルで、model_urls.3mf に返されます

戻り値

result フィールドには新しいビルドタスクのIDが格納されます。status が SUCCEEDED になるまでタスクを取得するか、ストリーミングで取得してください。その後、model_urls.3mf から3MFファイルをダウンロードします。

失敗モード

  • Name
    400 - Bad Request
    Description

    リクエストを実行できません。例えば次のような場合です:

    • input_task_id が指定されていない、または有効なタスクIDではない。
    • プロトタイプタスクのステータスが SUCCEEDED ではない。まだ実行中の場合は、待ってから再試行してください。失敗またはキャンセルされた場合は、新しいプロトタイプタスクを作成してください。
    • プロトタイプタスクは成功したが画像がない。新しいプロトタイプタスクを作成してください。
    • options のフィールドが許可された値の範囲外である。例えば grid_size が 16 または 32 以外である場合。
    • piece_size_mm が 10 で、shape が hex である。六角形ピースは6mmと8mmのみ対応しています。
    • output.format が 3mf ではない。

    エラーメッセージには、検出された問題の内容が示されます。

  • Name
    401 - Unauthorized
    Description

    APIキーが指定されていないか無効です。Authorization ヘッダーを確認してください。

  • Name
    402 - Payment Required
    Description

    次のいずれかに該当します:

    • アカウントのクレジットが不足している。
    • APIキー、ワークスペース、またはメンバーがクレジット上限に達した。
    • アカウントが無料プランである。

    クレジットとプランを確認してから、再試行してください。

  • Name
    403 - Forbidden
    Description

    あなたのチームでIPフィルタリングが有効になっており、Meshy がプロトタイプタスクの画像を第三者の知的財産としてフラグ付けしました。使用権を持つ画像からプロトタイプタスクを作成してください。

  • Name
    404 - Not Found
    Description

    input_task_id が、あなたのアカウントがAPIで作成したFidget Pixelプロトタイプタスクのいずれとも一致しません。ウェブアプリで作成されたプロトタイプも同様に 404 を返します。プロトタイプ作成レスポンスの result IDを送信してください。

  • Name
    429 - Too Many Requests
    Description

    次のいずれかの上限に達しました:

    • レート制限で許可されている以上のリクエストを送信した。数秒待ってから再試行してください。レート制限を参照してください。
    • キューに入っている、または実行中のタスクが多すぎる。いくつか完了するのを待ってから再試行してください。
    • クレジットを消費しない無制限プランで、クレジット残高がない状態で、クレジットなしで実行できるタスク数の上限に達した。タスクが完了するのを待つか、クレジットを追加してください。
  • Name
    500 - Internal Server Error
    Description

    Meshy でサーバーエラーが発生しました。例えば、プロトタイプタスクの画像に対して知的財産チェックを実行できなかった場合などです。Meshy はタスクを作成せず、課金したクレジットがあれば返金します。リクエストを再試行してください。


GET/openapi/creative-lab/fidget-pixel/v1/(prototype|build)/:id

Fidget Pixel タスクを取得する

prototype タスクまたは build タスクを返します。パスはタスクのステージと一致している必要があります。/prototype/:id を通じてリクエストされた build タスクは 404 を返し、/build/:id を通じてリクエストされた prototype タスクも同様に 404 を返します。

フィールドについては、The Fidget Pixel prototype task object および The Fidget Pixel build task object を参照してください。

Request

GET
/openapi/creative-lab/fidget-pixel/v1/prototype/019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7
# Prototype
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/prototype/019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7 \
  -H "Authorization: Bearer ${YOUR_API_KEY}"

# Build
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/build/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98 \
  -H "Authorization: Bearer ${YOUR_API_KEY}"

Prototype Response

{
  "id": "019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7",
  "type": "creative-lab-fidget-pixel-prototype",
  "name": "",
  "status": "SUCCEEDED",
  "progress": 100,
  "created_at": 1757001000000,
  "started_at": 1757001005000,
  "finished_at": 1757001178000,
  "expires_at": 1757260378000,
  "preceding_tasks": 0,
  "task_error": null,
  "consumed_credits": 6,
  "image_urls": [
    "https://assets.meshy.ai/***/pixel-art.jpg?Expires=***"
  ]
}

Build Response

{
  "id": "019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98",
  "type": "creative-lab-fidget-pixel-build",
  "name": "",
  "status": "SUCCEEDED",
  "progress": 100,
  "created_at": 1757001300000,
  "started_at": 1757001304000,
  "finished_at": 1757001309000,
  "expires_at": 1757260509000,
  "preceding_tasks": 0,
  "task_error": null,
  "consumed_credits": 30,
  "model_urls": {
    "3mf": "https://assets.meshy.ai/***/tasks/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98/output/model.3mf?Expires=***"
  }
}

パラメータ

  • Name
    id
    Type
    path
    Description

    作成レスポンスから得られるタスク ID です。

戻り値

パス内のステージに対応する、prototype task object または build task object です。

失敗モード

  • Name
    400 - Bad Request
    Description

    id が有効なタスク ID ではありません。作成レスポンスの result ID を送信してください。

  • Name
    403 - Forbidden
    Description

    チームで IP Filtering が有効になっており、Meshy が prototype タスクの画像をサードパーティの知的財産であるとフラグ付けしました。build タスクおよび Enterprise プランのチームではこのエラーは発生しません。利用権限のある画像から prototype タスクを作成してください。

  • Name
    404 - Not Found
    Description

    このアカウントに該当する ID の Fidget Pixel タスクが存在しないか、タスクのステージがパスと一致していません。ID を確認し、タスクに合わせて /prototype または /build を使用してください。

  • Name
    500 - Internal Server Error
    Description

    Meshy が知的財産チェックを実行できませんでした。リクエストを再試行してください。


DELETE/openapi/creative-lab/fidget-pixel/v1/(prototype|build)/:id

Fidget Pixelタスクを削除する

Fidget Pixelタスクをキャンセルします。PENDINGのタスクをキャンセルすると、クレジットが返金されます。IN_PROGRESSのタスクは、すでにワーカーが処理を開始しているため、返金なしでキャンセルされます。最終ステータス(SUCCEEDED、FAILED、CANCELED)のタスクはキャンセルできません。

パスはタスクのステージと一致している必要があります。たとえば、buildタスクのIDを使って/prototype/:idに対してDELETEを実行すると、404が返されます。

Request

DELETE
/openapi/creative-lab/fidget-pixel/v1/prototype/019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7
curl --request DELETE \
  --url https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/prototype/019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7 \
  -H "Authorization: Bearer ${YOUR_API_KEY}"

Response

// Returns 204 No Content on success (empty body).

パスパラメータ

  • Name
    id
    Type
    path
    Description

    キャンセルするタスクのID。

戻り値

空のボディを伴う204 No Content。

失敗モード

  • Name
    400 - Bad Request
    Description

    次のいずれかに該当します。

    • idが有効なタスクIDではありません。作成時のレスポンスのresultのIDを送信してください。
    • タスクはすでに最終ステータス(SUCCEEDED、FAILED、CANCELED)になっているため、キャンセルできません。
  • Name
    404 - Not Found
    Description

    このIDを持つFidget Pixelタスクがあなたのアカウントに属していないか、タスクのステージがパスと一致していません。IDを確認し、タスクに合わせて/prototypeまたは/buildを使用してください。


GET/openapi/creative-lab/fidget-pixel/v1/(prototype|build)/:id/stream

Fidget Pixel タスクをストリーミングする

Fidget Pixel タスクの更新を Server-Sent Events (SSE) としてストリーミングします。パスはタスクのステージと一致している必要があります。一致していない場合、例えば build タスクの ID を /prototype/:id/stream に指定した場合は、ストリームは status_code: 404 を持つ error イベントを1件送信して終了します。有効なタスク ID ではない id が指定された場合も同様に、status_code: 400 で終了します。

Request

GET
/openapi/creative-lab/fidget-pixel/v1/build/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98/stream
curl -N https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/build/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98/stream \
-H "Authorization: Bearer ${YOUR_API_KEY}"

Response Stream

// Error event example (wrong stage or task not found)
event: error
data: {
  "status_code": 404,
  "message": "Task not found"
}

// Message event examples illustrate task progress.
// Every frame is the full task object for the stage; fields not yet populated are null / empty.
event: message
data: {
  "id": "019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98",
  "type": "creative-lab-fidget-pixel-build",
  "name": "",
  "status": "PENDING",
  "progress": 0,
  "created_at": 1757001300000,
  "started_at": null,
  "finished_at": null,
  "expires_at": 1757260500000,
  "preceding_tasks": 2,
  "task_error": null,
  "consumed_credits": 30,
  "model_urls": {}
}

event: message
data: {
  "id": "019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98",
  "type": "creative-lab-fidget-pixel-build",
  "status": "SUCCEEDED",
  "progress": 100,
  "created_at": 1757001300000,
  "started_at": 1757001304000,
  "finished_at": 1757001309000,
  "expires_at": 1757260509000,
  "task_error": null,
  "consumed_credits": 30,
  "model_urls": {
    "3mf": "https://assets.meshy.ai/***/tasks/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98/output/model.3mf?Expires=***"
  }
}

パラメーター

  • Name
    id
    Type
    path
    Description

    作成レスポンスから取得したタスク ID。

戻り値

prototype または build タスクオブジェクトのストリームです。各イベントには、Fidget Pixel タスクを取得する が返すのと同じ完全なタスクオブジェクトが含まれます。タスクが PENDING または IN_PROGRESS の間は、出力フィールドはまだ空(null、[]、または {})であり、finished_at は null です。

IP Filtering がタスクの結果をブロックした場合、ストリームはその代わりに1件の error イベントを送信し、get リクエストが返すであろう status_code を含みます。


GET/openapi/creative-lab/fidget-pixel/v1/(prototype|build)

Fidget Pixel タスク一覧の取得

1つのステージの Fidget Pixel タスクを、1ページずつ返します。ステージはパスで指定します。/prototype は prototype タスクのみを返し、/build は build タスクのみを返します。

Request

GET
/openapi/creative-lab/fidget-pixel/v1/prototype
# List prototype tasks
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/prototype?page_size=10 \
  -H "Authorization: Bearer ${YOUR_API_KEY}"

# List build tasks
curl https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1/build?page_size=10 \
  -H "Authorization: Bearer ${YOUR_API_KEY}"

Response (List Prototype Tasks)

[
  {
    "id": "019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7",
    "type": "creative-lab-fidget-pixel-prototype",
    "name": "",
    "status": "SUCCEEDED",
    "progress": 100,
    "created_at": 1757001000000,
    "started_at": 1757001005000,
    "finished_at": 1757001178000,
    "expires_at": 1757260378000,
    "preceding_tasks": 0,
    "task_error": null,
    "consumed_credits": 6,
    "image_urls": [
      "https://assets.meshy.ai/***/pixel-art.jpg?Expires=***"
    ]
  }
]

パスパラメータ

  • Name
    stage
    Type
    path
    必須
    Description

    一覧取得対象のステージ。prototype または build。

クエリパラメータ

  • Name
    page_num
    Type
    integer
    デフォルト 1
    Description

    返すページ番号。1 から 255 まで。0 は最初のページを返します。0 から 255 の範囲外の値は 400 を返します。

  • Name
    page_size
    Type
    integer
    デフォルト 10
    Description

    1ページあたりのタスク数。最大 100。101 から 255 の値は100件のタスクを返し、0 はデフォルト値を使用します。0 から 255 の範囲外の値は 400 を返します。

  • Name
    sort_by
    Type
    string
    デフォルト -created_at
    Description

    ソート順。

    利用可能な値:

    • -created_at: 新しい順
    • +created_at: 古い順

戻り値

パス内のステージに対応する、prototype タスクオブジェクト または build タスクオブジェクト の配列。


Fidget Pixel プロトタイプタスクオブジェクト

プロトタイプタスクは、写真をピクセルアート画像に変換します。画像を3Dプリント可能なパーツに変換するには、このタスクのIDをinput_task_idとしてbuildエンドポイントに渡してください。

プロパティ

Example Fidget Pixel Prototype Task Object

{
  "id": "019c4a1e-2b7d-7d03-8f6a-5c2e91f0a1b7",
  "type": "creative-lab-fidget-pixel-prototype",
  "name": "",
  "status": "SUCCEEDED",
  "progress": 100,
  "created_at": 1757001000000,
  "started_at": 1757001005000,
  "finished_at": 1757001178000,
  "expires_at": 1757260378000,
  "preceding_tasks": 0,
  "task_error": null,
  "consumed_credits": 6,
  "image_urls": [
    "https://assets.meshy.ai/***/pixel-art.jpg?Expires=***"
  ]
}
  • Name
    id
    Type
    string
    Description

    タスクID。このフォーマットに依存しないでください。

  • Name
    type
    Type
    string
    Description

    タスクタイプ。常にcreative-lab-fidget-pixel-prototypeです。

  • Name
    name
    Type
    string
    Description

    タスク作成時に送信したname。送信しなかった場合は""になります。

  • Name
    status
    Type
    string
    Description

    タスクのステータス。

    利用可能な値:

    • PENDING:キューで待機中
    • IN_PROGRESS:結果を生成中
    • SUCCEEDED:最終状態。結果あり
    • FAILED:最終状態。理由はtask_errorに記載
    • CANCELED:最終状態。結果なし
  • Name
    progress
    Type
    integer
    Description

    作業の完了率を0から100で示します。タスクが開始するまでは0で、成功すると100になります。

  • Name
    created_at
    Type
    timestamp
    Description

    タスクが作成された時刻(Unixミリ秒)。

  • Name
    started_at
    Type
    timestamp
    Description

    ワーカーがタスクを開始した時刻(Unixミリ秒)。それまではnullです。

  • Name
    finished_at
    Type
    timestamp
    Description

    タスクが最終状態に達した時刻(Unixミリ秒)。それまではnullです。

  • Name
    expires_at
    Type
    timestamp
    Description

    タスクの結果が期限切れになる時刻(Unixミリ秒)。これはfinished_atの3日後、またはタスクが完了するまではcreated_atの3日後です。APIの結果を無期限に保持するEnterpriseアカウントの場合、約100年後になります。アセット保持期間を参照してください。

  • Name
    preceding_tasks
    Type
    integer
    Description

    PENDING中のタスクのキュー内での位置。1は次に開始することを意味します。タスクがキューを離れると0になり、リスト結果では常に0です。

  • Name
    task_error
    Type
    object
    Description

    タスクが失敗した理由。statusがFAILEDでない限りnullです。エラーを参照してください。

  • Name
    consumed_credits
    Type
    integer
    Description

    払い戻しがあった場合はそれを反映した、タスクに課金されたクレジット数。エラーを返すリクエストには課金されません。Meshyが払い戻すため、失敗したタスクは0になります。キャンセルによる払い戻しは、タスクがPENDING中の場合にのみ行われます。Meshyが課金内容を読み取れない場合、getまたはstreamレスポンスではこのフィールドが省略され、listリクエストは500を返します。その場合はリクエストを再試行してください。

  • Name
    image_urls
    Type
    array of strings
    Description

    ピクセルアート画像のダウンロードURL。タスクが成功すると配列にはURLが1つ含まれ、それまでは空です。

    これらのURLは署名付きのため、Authorizationヘッダーなしで取得してください。expires_atまで有効です。それ以前に再度タスクを取得しても、新たに署名されたものではなく同じURLが返されます。期限切れになったURLは更新できないため、その前にファイルをダウンロードして保存してください。


Fidget Pixel ビルドタスクオブジェクト

ビルドタスクは、成功した prototype タスクから3Dプリント可能なピースを生成します。Meshy はピクセルアート画像をグリッドにサンプリングし、単一のマルチカラー3MFファイルとしてピースを返します。

プロパティ

Example Fidget Pixel Build Task Object

{
  "id": "019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98",
  "type": "creative-lab-fidget-pixel-build",
  "name": "",
  "status": "SUCCEEDED",
  "progress": 100,
  "created_at": 1757001300000,
  "started_at": 1757001304000,
  "finished_at": 1757001309000,
  "expires_at": 1757260509000,
  "preceding_tasks": 0,
  "task_error": null,
  "consumed_credits": 30,
  "model_urls": {
    "3mf": "https://assets.meshy.ai/***/tasks/019c4a2f-6e81-7b44-9a1d-0d7f3c5e2b98/output/model.3mf?Expires=***"
  }
}
  • Name
    id
    Type
    string
    Description

    タスクID。形式に依存しないでください。

  • Name
    type
    Type
    string
    Description

    タスクの種類。常に creative-lab-fidget-pixel-build です。

  • Name
    name
    Type
    string
    Description

    タスク作成時に送信した name。送信しなかった場合は "" です。

  • Name
    status
    Type
    string
    Description

    タスクのステータス。

    利用可能な値:

    • PENDING:キューで待機中
    • IN_PROGRESS:結果を生成中
    • SUCCEEDED:最終状態。結果あり
    • FAILED:最終状態。理由は task_error に記載
    • CANCELED:最終状態。結果なし
  • Name
    progress
    Type
    integer
    Description

    作業の完了率。0 から 100 まで。タスクが開始するまでは 0 で、成功すると 100 になります。

  • Name
    created_at
    Type
    timestamp
    Description

    タスクが作成された時刻(Unixミリ秒)。

  • Name
    started_at
    Type
    timestamp
    Description

    ワーカーがタスクを開始した時刻(Unixミリ秒)。それまでは null です。

  • Name
    finished_at
    Type
    timestamp
    Description

    タスクが最終ステータスに達した時刻(Unixミリ秒)。それまでは null です。

  • Name
    expires_at
    Type
    timestamp
    Description

    タスクの結果が失効する時刻(Unixミリ秒)。finished_at から3日後、またはタスクが完了するまでは created_at から3日後です。APIの結果を無期限に保持するEnterpriseアカウントの場合は、約100年後になります。アセット保持期間を参照してください。

  • Name
    preceding_tasks
    Type
    integer
    Description

    PENDING 状態にある間のキュー内でのタスクの位置。1 は次に開始することを意味します。タスクがキューを離れると 0 になり、一覧結果では常に 0 です。

  • Name
    task_error
    Type
    object
    Description

    タスクが失敗した理由。status が FAILED でない限り null です。エラーを参照してください。

  • Name
    consumed_credits
    Type
    integer
    Description

    タスクに対して請求されたクレジット数(返金後)。エラーを返すリクエストには課金されません。失敗したタスクは Meshy が返金するため 0 になります。キャンセルによる返金は、タスクが PENDING の間のみ行われます。Meshy が課金内容を読み取れない場合、getまたはstreamのレスポンスにはこのフィールドが含まれず、listリクエストは 500 を返します。その場合はリクエストを再試行してください。

  • Name
    model_urls
    Type
    object
    Description

    結果のダウンロードURL。ファイル形式をキーとします。このオブジェクトには、送信した output.format に対応するエントリが1つあり、タスクが成功するまでは空です。

    URLは署名済みのため、Authorization ヘッダーなしで取得してください。これらは expires_at まで有効です。それ以前に同じタスクを再度取得しても、新たに署名されたものではなく同じURLが返されます。失効したURLは更新できないため、それより前にファイルをダウンロードして保存してください。

    • Name
      3mf
      Type
      string
      Description

      マルチカラー3MFファイルのダウンロードURL。各ピースはグレーの本体と、そのピクセルの色のトップを持ちます。output.format が 3mf(デフォルト)の場合に存在します。


エンドツーエンドの例

次のcURLとPythonのスクリプトは、一連の流れをすべて実行します。各スクリプトは写真からプロトタイプタスクを作成し、成功するまで待機します。その後、ビルドタスクを作成し、そのタスクを待機してから、model_urls.3mfから3MFファイルをダウンロードします。

cURLスクリプトにはcurlとjqが必要で、Pythonスクリプトにはrequestsパッケージが必要です。スクリプトを実行するには、次の手順に従ってください。

  1. MESHY_API_KEYにAPIキーを設定します。
  2. IMAGE_PATHにローカルの写真のパスを設定するか、IMAGE_URLに公開画像のURLを設定します。
  3. 任意: 人物以外の被写体をピクセル化する場合は、PIXEL_TYPEをotherに設定します。
  4. スクリプトを実行します。

プロトタイプタスクは通常、数分以内に完了します。ビルドタスクは通常、1分未満で完了します。

アプリでは、ビルドタスクを作成する前に、image_urlsから画像をユーザーに表示してください。ユーザーが気に入らない場合は、代わりに別のプロトタイプタスクを作成してください。こうすることで、ユーザーが承認した画像にのみビルドクレジットを使うことになります。

Complete flow

POST
/openapi/creative-lab/fidget-pixel/v1
#!/usr/bin/env bash
set -euo pipefail

# Requires curl and jq. Point IMAGE_PATH at a local photo, or IMAGE_URL at a public one:
#   export MESHY_API_KEY=msy_...
#   export IMAGE_PATH=./portrait.jpg          # or: export IMAGE_URL=https://...
#   export PIXEL_TYPE=person                  # or: other
: "${MESHY_API_KEY:?export MESHY_API_KEY first}"
if [[ -z "${IMAGE_PATH:-}" && -z "${IMAGE_URL:-}" ]]; then
  echo "export IMAGE_PATH (local file) or IMAGE_URL (public url) first" >&2
  exit 1
fi
PIXEL_TYPE=${PIXEL_TYPE:-person}

BASE="https://api.meshy.ai/openapi/creative-lab/fidget-pixel/v1"
AUTH="Authorization: Bearer $MESHY_API_KEY"

# api METHOD URL [curl args...] -> prints the response body, non-zero on failure.
# Note we do not use -f/--fail: it discards the body, and the body is the only
# place the reason appears.
api() {
  local method=$1 url=$2 out http_code body
  shift 2
  out=$(curl --silent --show-error --max-time 60 --write-out $'\n%{http_code}' \
    -X "$method" "$url" -H "$AUTH" "$@") || return 1
  http_code=${out##*$'\n'}
  body=${out%$'\n'*}
  if ((http_code >= 400)); then
    echo "HTTP $http_code for $url: $body" >&2
    return 1
  fi
  printf '%s' "$body"
}

# Each task gets its own 40-minute budget.
poll() {
  local kind=$1 id=$2 delay=5 task_status deadline
  deadline=$(($(date +%s) + 2400))
  while :; do
    if (($(date +%s) >= deadline)); then
      echo "gave up waiting for $kind $id" >&2
      return 1
    fi
    task_status=$(api GET "$BASE/$kind/$id" | jq -r '.status')
    echo "$kind: $task_status"
    case "$task_status" in
    SUCCEEDED) return 0 ;;
    FAILED | CANCELED) return 1 ;;
    esac
    sleep "$delay"
    delay=$((delay * 2 > 30 ? 30 : delay * 2))
  done
}

# Build the request body in a file. A base64 data URI must never go on the
# command line or into an exported variable - a photo of any real size will
# exceed the OS argument limit.
BODY=$(mktemp)
trap 'rm -f "$BODY"' EXIT
if [[ -n "${IMAGE_PATH:-}" ]]; then
  # Declare the real type: the API accepts JPEG, PNG and WebP.
  case "$(printf '%s' "${IMAGE_PATH##*.}" | tr 'A-Z' 'a-z')" in
    png) MIME=image/png ;;
    webp) MIME=image/webp ;;
    *) MIME=image/jpeg ;;
  esac
  {
    printf '{"type":"%s","image_url":"data:%s;base64,' "$PIXEL_TYPE" "$MIME"
    base64 <"$IMAGE_PATH" | tr -d '\n'
    printf '"}'
  } >"$BODY"
else
  jq -n --arg t "$PIXEL_TYPE" --arg u "$IMAGE_URL" \
    '{type: $t, image_url: $u}' >"$BODY"
fi

# 1. Create the prototype task
PROTO_ID=$(api POST "$BASE/prototype" \
  -H 'Content-Type: application/json' --data-binary @"$BODY" | jq -r '.result')

# 2. Wait for the pixel-art image (show image_urls[0] to a user in production)
poll prototype "$PROTO_ID"

# 3. Create the build task (defaults: square pieces, 32x32 grid, 8 mm, 8 colors, 15 mm tall)
jq -n --arg p "$PROTO_ID" \
  '{input_task_id: $p, options: {shape: "square", grid_size: 32, piece_size_mm: 8, color_count: 8, piece_height_mm: 15}, output: {format: "3mf"}}' >"$BODY"
BUILD_ID=$(api POST "$BASE/build" \
  -H 'Content-Type: application/json' --data-binary @"$BODY" | jq -r '.result')

# 4. Wait for the pieces
poll build "$BUILD_ID"

# 5. Download the 3MF. This is a signed URL: no Authorization header,
#    and it stays valid for 3 days after the task finishes.
TASK=$(api GET "$BASE/build/$BUILD_ID")
curl --silent --show-error --fail --max-time 900 \
  -o fidget-pixel.3mf "$(jq -r '.model_urls["3mf"]' <<<"$TASK")"
echo "Done: fidget-pixel.3mf"