レリーフ API
1枚の写真を、3Dプリント、レーザー彫刻、CNC切削に使える浮き彫り(バスレリーフ)3Dモデルと16ビットの深度マップに変換します。
Relief タスクを作成する
Relief タスクを作成します。このタスクは写真を浮き彫り(レリーフ)モデルに変換します。成功すると、タスクはモデルをGLBファイルとSTLファイル、16ビットのグレースケール深度マップ、プレビュー画像として生成します。深度マップのみを取得するには、should_generate_model を false に設定してください。
タスクはバックグラウンドで実行されます。
Relief タスクは、Remesh、Convert、Auto Split などの他のエンドポイントの入力にすることはできません。これらのリクエストは 403 を返します。
Request
# Simple request: a low relief, 60 mm on its longer side
curl https://api.meshy.ai/openapi/v1/relief \
-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>"
}'
# Advanced request: a deep 120 mm relief with a thicker base, curved from side to side
curl https://api.meshy.ai/openapi/v1/relief \
-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>",
"variant": "high",
"size_mm": 120,
"carving_depth_mm": 10,
"base_thickness_mm": 3,
"bend_mode": "convex",
"bend_angle": 90
}'
Response
{
"result": "0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20"
}
パラメータ
- Name
- image_url
- Type
- string
- 必須
- Description
レリーフに変換する写真。公開URLまたはData URI(
data:image/png;base64,...)として指定します。画像はJPG、JPEG、PNG、またはWebPファイルで、最大20MB、最小32×32ピクセルである必要があります。長辺は短辺の約16倍までです。それ以外の画像は
400を返します。Meshyはレリーフを作成する前に、透明な領域を黒で塗りつぶします。
- Name
- variant
- Type
- string
- デフォルト low
- Description
レリーフのスタイル。深度マップの形状を決め、
carving_depth_mmのデフォルト値を設定します。使用可能な値:
high:深い彫り込み。3Dプリント部品向け。low:浅い彫り込み。レーザー彫刻、CNC彫刻、薄いプレート向け。
nullまたは""を送信することは、省略した場合と同じです。それ以外の値は400を返します。
- Name
- should_generate_model
- Type
- boolean
- デフォルト true
- Description
レリーフモデルを生成するかどうか。深度マップのみのタスク(モデルもプレビュー画像も生成しない)にするには
falseに設定します。Meshyはサイズ、彫り込み、ベース、ベンド、解像度の各パラメータを引き続きチェックしますが、それらは使用しません。クレジットのコストは変わりません。
- Name
- size_mm
- Type
- number
- デフォルト 60
- Description
モデル上での写真の長辺の長さ。ベンド前のフラットな状態で測定し、
20から250ミリメートルの範囲です。remove_baseを使用すると、モデルをより小さくできます。
- Name
- carving_mode
- Type
- string
- デフォルト emboss
- Description
被写体をプレートから浮き立たせるか、プレートに彫り込むかを指定します。
使用可能な値:
emboss:写真の手前側の部分が浮き出ます。engrave:深度が反転し、手前側の部分が彫り込まれます。
深度マップはどちらのモードでも同じです。
- Name
- carving_depth_mm
- Type
- number
- デフォルト 6 (high), 3 (low)
- Description
レリーフをどれだけ深く彫り込むか。
0から60ミリメートルの範囲です。remove_baseがtrueに設定されている場合、0にすると空のモデルになります。タスクは成功し、20クレジットが課金されますが、生成されるGLBファイルとSTLファイルにはジオメトリがありません。
- Name
- remove_base
- Type
- boolean
- デフォルト false
- Description
背景を切り取り、ベースプレートを作成しないかどうか。
trueの場合、removal_thresholdが背景とみなす基準を設定します。Meshyはどちらの場合でもremoval_thresholdをチェックします。
remove_base = true- Name
- removal_threshold
- Type
- number
- デフォルト 0.01
- Description
Meshyが背景を切り取る深度のしきい値。
0.01から1の範囲で、深度マップは0から1までの範囲です。高い値を設定すると、レリーフ全体が切り取られて空のモデルになることがありますが、それでもタスクは成功し課金されます。
- Name
- base_thickness_mm
- Type
- number
- デフォルト 1, or 0 with remove_base
- Description
ベースプレートの厚さ。
0.1から10ミリメートルの範囲です。remove_baseがtrueの場合、省略するか0を送信してください。
- Name
- bend_mode
- Type
- string
- デフォルト off
- Description
レリーフを曲げるかどうか、およびどの方向に曲げるか。
off以外の場合、bend_axisとbend_angleが曲げの形状を決めます。Meshyはどちらの場合でもこれらをチェックします。使用可能な値:
off:平らなレリーフ。convex:正面が外側に膨らみます。concave:正面が内側に湾曲します。
bend_mode = convex or concave- Name
- bend_axis
- Type
- string
- デフォルト xz
- Description
どの端を曲げの起点にするか。
使用可能な値:
xz:左右の端。yz:上下の端。
- Name
- bend_angle
- Type
- number
- デフォルト 60
- Description
曲げが広がる弧の角度。
0から360度の範囲です。1未満の場合、レリーフは平らなままです。
- Name
- mesh_resolution
- Type
- integer
- デフォルト 1024
- Description
写真の長辺に沿ったメッシュポイントの数。
512から2048の範囲です。値が大きいほど細部の精度が保たれ、ファイルサイズも大きくなります。デフォルトの1024では、GLBファイルは約40〜50MB、STLファイルは約80〜105MBになります。正方形の写真の場合はより大きいサイズになります。2048では、それぞれ約150MBと300MBになります。ベンドを加えると、さらにサイズが大きくなります。2048ではSTLファイルが約800MBに達することがあります。
戻り値
202 Accepted。新しいRelief タスクのIDが result に含まれます。
失敗モード
- Name
400 - Bad Request- Description
リクエストを実行できません。エラーメッセージには、どの問題が検出されたかが示されます。例:
- パラメータの欠落:
image_urlが送信されませんでした。 - 無効なパラメータ:パラメータの型が誤っている、範囲外である、または使用可能な値のいずれでもありません。例えば、
variantがhighでもlowでもない、またはmesh_resolutionが512から2048の整数ではない場合です。 - ベースの厚さ:
remove_baseがtrueに設定されている場合にbase_thickness_mmが0でない、または設定されていない場合に0.1未満である場合です。 - 到達不能なURL:Meshyが
image_urlの画像をダウンロードできません。例えば、URLが404を返す、またはタイムアウトする場合です。 - 無効な画像:画像がJPG、JPEG、PNG、またはWebPファイルでない、20MBを超えている、32×32ピクセルより小さい、ピクセル数が多すぎる、または読み込めない場合です。
- 極端なアスペクト比:画像の長辺が短辺の約16倍を超えています。
リクエストを修正してから、再度送信してください。Meshyはこれに対して課金しません。エラーを参照してください。
- パラメータの欠落:
- Name
401 - Unauthorized- Description
APIキーが欠落しているか無効です。
Authorizationヘッダーを確認してください。
- Name
402 - Payment Required- Description
例:
- クレジット不足:アカウントにこのタスクを実行するための十分なクレジットがない、またはアカウントがクレジット制限に達しています。クレジット残高を確認してから、再試行してください。
- 無料プラン:タスクの作成には有料プランが必要です。サブスクリプション設定でプランをアップグレードしてから、再試行してください。
- Name
403 - Forbidden- Description
コンテンツのmoderationによって画像がブロックされました。Meshyはこのリクエストに対して課金しません。別の画像を送信してください。
- Name
429 - Too Many Requests- Description
次のいずれかの制限に達しました:
- リクエストを送信しすぎました。しばらく待ってから再試行してください。レート制限を参照してください。
- キューに入っているか実行中のタスクが多すぎます。いくつか完了するのを待ってから再試行してください。
- クレジットが残っていない無制限プランで、クレジットなしで実行できるタスク数の上限に達しました。タスクが完了するのを待つか、クレジットを追加してください。
タスクの実行中に安全性チェックによって画像が拒否された場合、タスクは失敗し、task_error.type が invalid_input に、task_error.code が provider_content_refused に設定されます。Meshyはタスクのクレジットを返金します。別の画像を送信してください。エラーを参照してください。
Relief タスクを取得
IDを指定してRelief タスクを返します。
Request
curl https://api.meshy.ai/openapi/v1/relief/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
{
"id": "0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20",
"type": "relief",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/model.glb?Expires=***",
"stl": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/model.stl?Expires=***"
},
"depth_map_url": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/depth.png?Expires=***",
"thumbnail_url": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/preview.png?Expires=***",
"progress": 100,
"status": "SUCCEEDED",
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000060000,
"expires_at": 1700259260000,
"task_error": null,
"consumed_credits": 20
}
Relieフタスクを削除する
Reliefタスクを完全に削除します。モデル、深度マップ、データも含めて削除され、元に戻すことはできません。
Request
curl --request DELETE \
--url https://api.meshy.ai/openapi/v1/relief/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20 \
-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 になるまで待ってから削除してください。
SUCCEEDED のタスクを削除してもクレジットは返金されません。FAILED のタスクは失敗した時点ですでに返金済みです。
戻り値
タスクが削除された場合は 200 OK、タスクが
IN_PROGRESS の場合は 409 Conflict を返します。
レリーフタスクの一覧取得
あなたのレリーフタスクの一覧を返します。
Request
curl https://api.meshy.ai/openapi/v1/relief?page_size=10 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
[
{
"id": "0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20",
"type": "relief",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/model.glb?Expires=***",
"stl": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/model.stl?Expires=***"
},
"depth_map_url": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/depth.png?Expires=***",
"thumbnail_url": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/preview.png?Expires=***",
"progress": 100,
"status": "SUCCEEDED",
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000060000,
"expires_at": 1700259260000,
"task_error": null,
"consumed_credits": 20
}
]
パラメータ
- Name
- page_num
- Type
- integer
- Description
返すページ番号。
1から始まり、デフォルトは1です。
- Name
- page_size
- Type
- integer
- Description
1ページあたりのタスク数(最大
100)。デフォルトは10です。Meshy は101から255までの値を100として扱い、それより大きい値の場合は400を返します。
- Name
- sort_by
- Type
- string
- Description
並び順。
利用可能な値:
+created_at: 古い順-created_at: 新しい順
返り値
レリーフタスクオブジェクトのページネーションされたリスト。
Relieftaskをストリーミングする
Reliefタスクの更新情報をServer-Sent Events(SSE)としてストリーミングします。
Request
curl -N https://api.meshy.ai/openapi/v1/relief/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/stream \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response Stream
// Error event example
event: error
data: {
"status_code": 404,
"message": "Task not found"
}
// Message event examples illustrate task progress (other task fields omitted here for brevity;
// each frame is the full task object).
event: message
data: {
"id": "0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20",
"progress": 0,
"status": "PENDING"
}
event: message
data: {
"id": "0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20",
"type": "relief",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/model.glb?Expires=***",
"stl": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/model.stl?Expires=***"
},
"depth_map_url": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/depth.png?Expires=***",
"thumbnail_url": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/preview.png?Expires=***",
"progress": 100,
"status": "SUCCEEDED",
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000060000,
"expires_at": 1700259260000,
"task_error": null,
"consumed_credits": 20
}
パラメータ
- Name
- id
- Type
- path
- Description
作成リクエストのレスポンスで返されたタスクID。
戻り値
ReliefタスクオブジェクトのストリームがServer-Sent Eventsとして返されます。
各messageイベントには、Reliefタスクを取得するが返すものと同じ、タスクオブジェクト全体が含まれます。タスクがPENDINGまたはIN_PROGRESSの間、イベントごとに変化するフィールドはprogress、status、started_at、およびpreceding_tasks(このタスクより前に処理待ちのタスクがある間のみ存在)です。model_urls、depth_map_url、thumbnail_urlは、タスクがSUCCEEDEDに達した時点で値が設定されます。深度マップのみのタスクでは、model_urlsは{}のまま、thumbnail_urlは空のままになります。
errorイベントにはstatus_codeとmessageのみが含まれるため、statusを読む前にイベント名を確認してください。
Relief タスクオブジェクト
Relief タスクオブジェクトは、1枚の写真から作成されたレリーフを表します。model_urls、depth_map_url、thumbnail_url は常に存在し、タスクが成功するまでは空です。
The Relief Task Object
{
"id": "0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20",
"type": "relief",
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/model.glb?Expires=***",
"stl": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/model.stl?Expires=***"
},
"depth_map_url": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/depth.png?Expires=***",
"thumbnail_url": "https://assets.meshy.ai/***/tasks/0199c3d2-5a7e-7b14-9e2f-3c8d1a6b4f20/output/preview.png?Expires=***",
"progress": 100,
"status": "SUCCEEDED",
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000060000,
"expires_at": 1700259260000,
"task_error": null,
"consumed_credits": 20
}
Depth map only
{
"id": "0199c3d2-6b8f-7c25-8f3a-4d9e2b7c5a31",
"type": "relief",
"model_urls": {},
"depth_map_url": "https://assets.meshy.ai/***/tasks/0199c3d2-6b8f-7c25-8f3a-4d9e2b7c5a31/output/depth.png?Expires=***",
"thumbnail_url": "",
"progress": 100,
"status": "SUCCEEDED",
"created_at": 1699999999000,
"started_at": 1700000000000,
"finished_at": 1700000030000,
"expires_at": 1700259230000,
"task_error": null,
"consumed_credits": 20
}
- Name
- id
- Type
- string
- Description
タスクID。不透明な文字列として扱い、その形式に依存しないでください。
- Name
- type
- Type
- string
- Description
タスクタイプ。常に
reliefです。
- Name
- model_urls
- Type
- object
- Description
レリーフモデルのダウンロードURL。ファイルは大きくなることがあります。一般的なサイズについては
mesh_resolutionを参照してください。- Name
glb- Type
- string
- Description
テクスチャなしのGLBファイル。単位はメートルです。深度マップのみのタスクでは存在しません。
- Name
stl- Type
- string
- Description
同じモデルのバイナリSTLファイル。単位はミリメートルなので、Zを上にしてレリーフの実際のサイズで開きます。深度マップのみのタスクでは存在しません。
- Name
- depth_map_url
- Type
- string
- Description
レリーフの元になった16ビットグレースケール深度マップのダウンロードURL。明るいピクセルほど高くなります。値は相対的な高さであり、ミリメートルではありません。レーザー彫刻やCNCソフトウェアで高さマップとして使用できます。ファイルサイズは約1〜2MBです。存在しない場合は空です。
- Name
- thumbnail_url
- Type
- string
- Description
レリーフモデルのプレビュー画像のダウンロードURL。深度マップのみのタスクを含め、レンダリングされなかった場合は空です。
- Name
- progress
- Type
- integer
- Description
タスクの完了度をパーセンテージで示します。タスクが開始するまでは
0で、成功すると100になります。
- Name
- status
- Type
- string
- Description
タスクのステータス。
PENDING、IN_PROGRESS、SUCCEEDED、FAILEDのいずれかです。
- Name
- preceding_tasks
- Type
- integer
- Description
このタスクより前にキュー内にあるタスクの数。値が
0の場合、このフィールドは省略されるため、このタスクより前にタスクがある間のみ表示されます。
- 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です。
- Name
- task_error
- Type
- object
- Description
タスクが失敗した場合のエラー詳細。エラー を参照してください。
- Name
- consumed_credits
- Type
- integer
- Description
タスクが使用したクレジット数:
20、またはFAILEDタスクの場合は0で、この場合Meshyが返金します。