Creative Lab Fidget Pixel API
写真を2段階でマルチカラーの3Dプリント可能なピクセルアート・フィジェットボードに変換します。プロトタイプタスクは写真をピクセルアート画像に変換します。ビルドタスクはその画像を1つの3MFファイルにまとめられた、かみ合うパーツに変換し、プロトタイプタスクのIDを input_task_id として受け取ります。
POST /openapi/creative-lab/fidget-pixel/v1/prototypePOST /openapi/creative-lab/fidget-pixel/v1/build
どちらの POST エンドポイントも有料プランが必要です。無料プランのアカウントからのリクエストは 402 を返します。
Fidget Pixel プロトタイプタスクを作成する
1枚の写真からピクセルアート画像を1枚生成します。パーツをビルドするには、このタスクのIDをinput_task_idとしてビルドエンドポイントに渡してください。タスクのフィールドについては、Fidget Pixelプロトタイプタスクオブジェクトを参照してください。
生成された画像が気に入らない場合は、別のプロトタイプタスクを作成してください。各タスクは個別に課金されます。
Request
# 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はタスクを作成せず、課金されたクレジットがあれば返金します。リクエストを再試行してください。
Fidget Pixel ビルドタスクを作成する
成功したプロトタイプタスクから3Dプリント可能なピースを生成します。Meshy はピクセルアート画像をグリッドにサンプリングし、最大 color_count 色に削減します。被写体の各セルは互いに組み合わさるピースとなり、背景は印刷されません。
結果は印刷可能な単一のマルチカラー3MFファイルです。各ピースはグレーの本体とピクセルの色のトップを持ちます。フィールドについては、Fidget Pixelビルドタスクオブジェクトを参照してください。
Request
# 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を返します。プロトタイプ作成レスポンスのresultIDを送信してください。
- Name
429 - Too Many Requests- Description
次のいずれかの上限に達しました:
- レート制限で許可されている以上のリクエストを送信した。数秒待ってから再試行してください。レート制限を参照してください。
- キューに入っている、または実行中のタスクが多すぎる。いくつか完了するのを待ってから再試行してください。
- クレジットを消費しない無制限プランで、クレジット残高がない状態で、クレジットなしで実行できるタスク数の上限に達した。タスクが完了するのを待つか、クレジットを追加してください。
- Name
500 - Internal Server Error- Description
Meshy でサーバーエラーが発生しました。例えば、プロトタイプタスクの画像に対して知的財産チェックを実行できなかった場合などです。Meshy はタスクを作成せず、課金したクレジットがあれば返金します。リクエストを再試行してください。
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
# 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 ではありません。作成レスポンスのresultID を送信してください。
- 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 が知的財産チェックを実行できませんでした。リクエストを再試行してください。
Fidget Pixelタスクを削除する
Fidget Pixelタスクをキャンセルします。PENDINGのタスクをキャンセルすると、クレジットが返金されます。IN_PROGRESSのタスクは、すでにワーカーが処理を開始しているため、返金なしでキャンセルされます。最終ステータス(SUCCEEDED、FAILED、CANCELED)のタスクはキャンセルできません。
パスはタスクのステージと一致している必要があります。たとえば、buildタスクのIDを使って/prototype/:idに対してDELETEを実行すると、404が返されます。
Request
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を使用してください。
Fidget Pixel タスクをストリーミングする
Fidget Pixel タスクの更新を Server-Sent Events (SSE) としてストリーミングします。パスはタスクのステージと一致している必要があります。一致していない場合、例えば build タスクの ID を /prototype/:id/stream に指定した場合は、ストリームは status_code: 404 を持つ error イベントを1件送信して終了します。有効なタスク ID ではない id が指定された場合も同様に、status_code: 400 で終了します。
Request
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 を含みます。
Fidget Pixel タスク一覧の取得
1つのステージの Fidget Pixel タスクを、1ページずつ返します。ステージはパスで指定します。/prototype は prototype タスクのみを返し、/build は build タスクのみを返します。
Request
# 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パッケージが必要です。スクリプトを実行するには、次の手順に従ってください。
MESHY_API_KEYにAPIキーを設定します。IMAGE_PATHにローカルの写真のパスを設定するか、IMAGE_URLに公開画像のURLを設定します。- 任意: 人物以外の被写体をピクセル化する場合は、
PIXEL_TYPEをotherに設定します。 - スクリプトを実行します。
プロトタイプタスクは通常、数分以内に完了します。ビルドタスクは通常、1分未満で完了します。
アプリでは、ビルドタスクを作成する前に、image_urlsから画像をユーザーに表示してください。ユーザーが気に入らない場合は、代わりに別のプロトタイプタスクを作成してください。こうすることで、ユーザーが承認した画像にのみビルドクレジットを使うことになります。
Complete flow
#!/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"