Generate

Parts Breakdown

POST/v1/images/parts-board

Decompose one reference image into an exploded "parts board" — the subject laid out as separated components on a single canvas.

Async returns an id — poll or webhookTypical ~180–240sCost 80 credits

Give one image — an assetId you already own, an imageUrl, or a multipart image upload. The result is a new image asset with the subject split into parts. Feed that board into Image → 3D to get a mesh whose parts stay spatially separated.

No engine, resolution, or prompt Parts Breakdown is fully server-tuned. A classifier detects the subject type (mech, vehicle, character, creature…) and applies the matching decomposition — you don't pick an engine or write a prompt. That is deliberate: one fixed price, one validated pipeline, no moderation or margin bypass.

Parameters

ParameterDescription
assetIdCONDITIONAL
string
An existing image asset you own to decompose — the same path as the workspace "Decompose to parts" action. Required unless you send an imageUrl or a multipart image file.
imageUrlCONDITIONAL
string
Source image URL (http/https). Local files go in the multipart image part instead. Required unless you send assetId or a multipart image.
licenseOPTIONALdefault private
string
License for the generated board. Defaults to private (all-rights-reserved).
Exactly one image source Send one of assetId, imageUrl, or a multipart image part. If more than one is set, precedence is multipart image > assetId > imageUrl.

Request

decompose an existing asset
curl -X POST https://api.picoberry.ai/v1/images/parts-board \
  -H "Authorization: Bearer pb_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"assetId":"019abc…"}'
r = requests.post("https://api.picoberry.ai/v1/images/parts-board", headers=headers,
    json={"assetId": "019abc…"})
board_id = r.json()["data"]["id"]
const res = await fetch(`${BASE}/v1/images/parts-board`, {
  method: "POST", headers: { ...headers, "Content-Type": "application/json" },
  body: JSON.stringify({ assetId: "019abc…" }),
});
const { id } = (await res.json()).data;
Image inputs Single-frame png, jpeg, webp, or gif, up to 20 MB. URLs are fetched server-side and must be publicly reachable. A clear single subject on a plain background decomposes best.

Response

response · 200
{ "success": true, "data": { "id": "019…", "taskStatus": 0, "type": "image" } }

The call returns immediately. Poll GET /v1/assets/{id} until taskStatus is 2; the board image lands in files.image, and the detected subject type is in details.partsBoard.category. Then send that image to POST /v1/models/from-image for a parts-separated mesh.

Upload or URL

No hosted asset? Upload a local file as a multipart image part, or pass a public imageUrl in JSON.

local upload
curl -X POST https://api.picoberry.ai/v1/images/parts-board \
  -H "Authorization: Bearer pb_live_xxx" \
  -F "image=@./hero.png"
requests.post("https://api.picoberry.ai/v1/images/parts-board", headers=headers,
    files={"image": open("hero.png", "rb")})
const fd = new FormData();
fd.append("image", fileBlob, "hero.png");
await fetch(`${BASE}/v1/images/parts-board`, { method: "POST", headers, body: fd });

Or point at a hosted image with imageUrl:

curl -X POST https://api.picoberry.ai/v1/images/parts-board \
  -H "Authorization: Bearer pb_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{"imageUrl":"https://…/hero.png"}'

Good inputs