はじめに

クイックスタート

APIキーから3Dモデルのダウンロードまで、4ステップで。以下のスニペットはすべてcurl・Python・JavaScriptでコピーしてそのまま貼り付けられます。上部バーで言語を選択してください。

Base URLhttps://api.picoberry.ai
認証Bearer / x-api-key
形式JSON · { success, data }

1. APIキーを発行する

このAPIは有料のお客様にご利用いただけます。有効なサブスクリプション、または最低1回のクレジット購入完了が必要です。アカウント → APIキーを開いてキーを作成し、コピーしてください。シークレットは一度だけ表示されます。詳しくは認証ページをご覧ください。

セットアップ
export PB_KEY="pb_live_xxxxxxxxxxxx"
export BASE="https://api.picoberry.ai"
import requests, time

BASE = "https://api.picoberry.ai"
headers = {"Authorization": "Bearer pb_live_xxxxxxxxxxxx"}
const BASE = "https://api.picoberry.ai";
const headers = { Authorization: "Bearer pb_live_xxxxxxxxxxxx" };
キーはサーバー側で保管 pb_live_キーはクレジット残高をすべて使い切る可能性があります。クライアントコードに含めたり、リポジトリにコミットしたりしないでください。

2. 生成を開始する

テキストから3Dのジョブを開始します。この呼び出しはアセットのidtaskStatus: 0を返してすぐに戻ります。生成はバックグラウンドで実行されます。画像もPOST /v1/imagesを使って同じ方法で動作します。

リクエスト
curl -X POST $BASE/v1/models/from-text \
  -H "Authorization: Bearer $PB_KEY" -H "Content-Type: application/json" \
  -d '{"prompt":"a stylized treasure chest, low-poly","engine":"tripo"}'
r = requests.post(f"{BASE}/v1/models/from-text", headers=headers,
    json={"prompt": "a stylized treasure chest, low-poly", "engine": "tripo"})
asset_id = r.json()["data"]["id"]
const r = await fetch(`${BASE}/v1/models/from-text`, { method: "POST",
  headers: { ...headers, "Content-Type": "application/json" },
  body: JSON.stringify({ prompt: "a stylized treasure chest, low-poly", engine: "tripo" }) });
const assetId = (await r.json()).data.id;
レスポンス · 200
{ "success": true, "data": { "id": "019f3a39-…", "taskStatus": 0, "type": "model_3d" } }

3. 完了までポーリングする

生成は非同期で行われます。taskStatus2に達するまでGET /v1/assets/{id}をポーリングしてください。3Dジョブは通常約60〜120秒、画像は数秒かかります。成功するとfiles.modelに署名付きのGLB URLが入ります。

0 待機中1 処理中2 成功3 失敗
ポーリング
# set ASSET_ID from the response above, then repeat until .data.taskStatus is 2
curl $BASE/v1/assets/$ASSET_ID -H "Authorization: Bearer $PB_KEY"
while True:
    a = requests.get(f"{BASE}/v1/assets/{asset_id}", headers=headers).json()["data"]
    if a["taskStatus"] in (2, 3): break
    time.sleep(4)
model_url = a["files"]["model"]
let a;
do {
  a = (await (await fetch(`${BASE}/v1/assets/${assetId}`, { headers })).json()).data;
  if (a.taskStatus < 2) await new Promise(res => setTimeout(res, 4000));
} while (a.taskStatus < 2);
const modelUrl = a.files.model;
Webhookでポーリングを省略 callbackUrlを登録すると、PicoBerryが完了したアセットをサーバーへプッシュします。Webhookおよび非同期とポーリングをご覧ください。

4. モデルをダウンロードする

files.modelはそのまま使えるGLBです。特定の形式(FBX/OBJ、またはUnityですぐ使えるテクスチャ分割)が必要な場合は、エクスポートして新しい署名付きダウンロードURLを取得してください。

リクエスト
curl -X POST $BASE/v1/assets/$ASSET_ID/download \
  -H "Authorization: Bearer $PB_KEY" -H "Content-Type: application/json" \
  -d '{"format":"glb"}'
d = requests.post(f"{BASE}/v1/assets/{asset_id}/download", headers=headers,
    json={"format": "glb"}).json()["data"]
download_url = d["url"]
const d = (await (await fetch(`${BASE}/v1/assets/${assetId}/download`, { method: "POST",
  headers: { ...headers, "Content-Type": "application/json" },
  body: JSON.stringify({ format: "glb" }) })).json()).data;
const downloadUrl = d.url;
レスポンス · 200
{ "success": true, "data": { "url": "https://…signed", "format": "glb", "filename": "model.glb" } }
fbx / objはZIPバンドルです glbは単一ファイルですが、fbxobj.zip(モデル+テクスチャ)で返されます。すべてのオプション(Unityプリセット、カスタムファイル名)はダウンロードとエクスポートページにあります。

次のステップ

これで一連の流れは完了です。キー → 生成 → ポーリング → ダウンロード。ここから先は: