Bria Product Dimensions API Documentation

Bria Product Dimensions API Documentation

Playground

Try it on WaveSpeedAI!

Bria Product Dimensions creates marketplace-ready product images from product photos and real-world measurements, adding dimension callouts, labels, optional titles, and product facts for e-commerce listings and catalog visuals. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Features

Bria Product Dimensions turns a single product photo and real-world measurements into a clean product dimension image. The model preserves the product, removes the background inside the pipeline, and renders dimension callouts with labels.


Why Choose This?

  • Product dimension images Create marketplace-ready dimension visuals from one product photo and measurement values.

  • No generative redraw The product is preserved while callout lines and labels are rendered around it.

  • Flexible callouts Add height, top width, and bottom width labels with metric or imperial units.

  • Style options Choose default, childlike, or elegant callout styling.

  • Optional product facts Add a title, weight readout, or capacity readout when needed.

  • Standard PNG output Results are returned as PNG image URLs in the standard WaveSpeed prediction response.


Parameters

ParameterRequiredDescription
imageYesSource product photo. JPEG, JPG, PNG, and WEBP are supported.
dimensionsYesDimension callouts to render. Each item includes name, value, unit, and optional position.
styleYesRendering style: default, childlike, or elegant.
units_displayNoLabel display mode: single, dual_bullet, dual_slash, or dual_parens. Default: single.
backgroundNoCanvas background. Use white, cream, charcoal, or a hex color. Default: white.
titleNoOptional headline above the product. Maximum 80 characters.
title_positionNoTitle placement: top_left, top_center, or top_right. Default: top_center.
weight_valueNoOptional product weight value. Use together with weight_unit.
weight_unitNoOptional product weight unit: lb, oz, g, or kg.
weight_labelNoOptional weight label: Weight or Net Weight.
capacity_valueNoOptional product capacity value. Use together with capacity_unit.
capacity_unitNoOptional product capacity unit: fl_oz, ml, l, qt, gal, or cups.
proportional_linesNoScale callout line length to the measurement value. Default: true.

How to Use

  1. Upload product photo - Provide a clear product image.
  2. Add dimensions - Enter at least one measurement such as height or bottom width.
  3. Choose style - Select the callout visual style.
  4. Adjust optional display settings - Add a title, background, weight, or capacity if needed.
  5. Submit - Generate the dimension image and retrieve the output URL.

Pricing

OutputPrice
Per image$0.04

Best Use Cases

  • Ecommerce product pages - Generate clear dimension images for listings.
  • Marketplace assets - Create product visuals for catalogs and online stores.
  • Packaging and product content - Show height, width, weight, or capacity in a polished visual.
  • Product marketing - Create clean comparison or specification images.
  • SKU workflows - Standardize product dimension visuals across many items.

Pro Tips

  • Use a clean product photo with the full product visible.
  • Use height, width_bottom, and width_top for the clearest callout layout.
  • Use dual_parens when you want labels such as 10 in (25.4 cm).
  • Keep titles short so they do not crowd the product.
  • Use a simple background color for marketplace-style assets.
  • Ensure the input image URL is publicly accessible.

Notes

  • image, dimensions, and style are required.
  • Output format is fixed to PNG.
  • The output size defaults to 2200 pixels.

Authentication

For authentication details, please refer to the Authentication Guide.

API Endpoints

Submit Task & Query Result

set -euo pipefail

export WAVESPEED_API_KEY="your-api-key"

REQUEST_BODY=$(cat <<'JSON'
{
  "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
  "dimensions": [],
  "style": "default",
  "units_display": "single",
  "background": "white",
  "title_position": "top_center",
  "weight_unit": "lb",
  "weight_label": "Weight",
  "capacity_unit": "fl_oz",
  "proportional_lines": true
}
JSON
)

# 1. Submit the prediction once. Never retry this request automatically:
# a retry after an unclear failure can create a second, billed task.
CHECK='The task may already exist. Check History or the predictions list before submitting again.'
if ! SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  --connect-timeout 10 --max-time 60 \
  -X POST "https://api.wavespeed.ai/api/v3/bria/product-dimensions" \
  -H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
  -H "Content-Type: application/json" \
  -d "${REQUEST_BODY}"); then
  printf 'Submit failed. %s\n' "${CHECK}" >&2
  exit 1
fi

TASK=$(printf '%s' "${SUBMIT_RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "${TASK}" | jq -r '.id // empty')
if [ -z "${PREDICTION_ID}" ]; then
  printf 'Submission response did not contain a prediction id. %s\n' "${CHECK}" >&2
  exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"

# 2. Poll until the prediction reaches a final status.
BODY_FILE=$(mktemp)
trap 'rm -f "${BODY_FILE}"' EXIT
while true; do
  # Transient errors (429, 5xx) are retried, honoring Retry-After.
  HTTP_CODE=$(curl --silent --show-error --fail-with-body \
    --connect-timeout 10 --max-time 60 --retry 5 --retry-delay 2 \
    --output "${BODY_FILE}" --write-out '%{http_code}' \
    "${RESULT_URL}" \
    -H "Authorization: Bearer ${WAVESPEED_API_KEY}" || true)
  case "${HTTP_CODE}" in
    2??) ;;
    000|429|5??)  # dropped connection or temporary error: keep polling
      printf 'Task %s: HTTP %s, polling again in 10s\n' "${PREDICTION_ID}" "${HTTP_CODE}" >&2
      sleep 10; continue ;;
    *) printf 'Task %s: HTTP %s\n' "${PREDICTION_ID}" "${HTTP_CODE}" >&2
      cat "${BODY_FILE}" >&2; exit 1 ;;
  esac
  RESULT=$(jq 'if type == "object" and has("data") then .data else . end' "${BODY_FILE}")
  STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')

  case "${STATUS}" in
    completed) printf '%s\n' "${RESULT}" | jq '.outputs'; break ;;
    failed|cancelled|timeout|deleted)
      printf 'Task %s ended with status %s\n' "${PREDICTION_ID}" "${STATUS}" >&2
      printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
    *) sleep 2 ;;
  esac
done

Retry temporary errors only while polling, never the submit request. Errors, retries and timeouts

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
imagestringYes-Source product photo. JPEG, JPG, PNG, and WEBP are supported.
dimensionsarray<object>Yes-0 ~ 6 itemsDimension callouts to render on the product image.
dimensions[].namestringYes-height, width_bottom, width_topDimension to label.
dimensions[].valuenumberYes-0 ~ ∞Physical measurement value. Must be greater than 0.
dimensions[].unitstringYes-mm, cm, m, in, ", ft, 'Measurement unit.
dimensions[].positionstringNo-top, bottom, left, rightOptional side where the callout should appear.
stylestringYesdefaultdefault, childlike, elegantRendering style for callout lines and typography.
units_displaystringNosinglesingle, dual_bullet, dual_slash, dual_parensHow primary and secondary units are displayed on labels.
backgroundstringNowhite-Canvas background. Use white, cream, charcoal, or a hex color such as #0F766E.
titlestringNo-0 ~ 80 charactersOptional headline rendered above the product.
title_positionstringNotop_centertop_left, top_center, top_rightPlacement of the title along the top.
weight_valuenumberNo-0 ~ ∞Optional product weight value. Fill this together with Weight Unit.
weight_unitstringNo-lb, oz, g, kgOptional product weight unit. Fill this together with Weight Value.
weight_labelstringNo-Weight, Net WeightOptional label for the weight readout.
capacity_valuenumberNo-0 ~ ∞Optional product capacity value. Fill this together with Capacity Unit.
capacity_unitstringNo-fl_oz, ml, l, qt, gal, cupsOptional product capacity unit. Fill this together with Capacity Value.
proportional_linesbooleanNotrue-Scale callout line length to the measurement value.

Every model also accepts the global request options enable_sync_mode and enable_base64_output; see their pages for details.

Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
data.idstringUnique identifier for the prediction, Task Id
data.modelstringModel ID used for the prediction
data.outputsarrayOutput values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed)
data.urlsobjectObject containing related API endpoints
data.statusstringTask status. completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses.
data.created_atstringISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”)
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds

Result Request Parameters

ParameterTypeRequiredDefaultDescription
idstringYes-Task ID

Result Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
dataobjectThe prediction data object containing all details
data.idstringUnique identifier for the prediction
data.modelstringModel ID used for the prediction
data.outputsarray<string | object>Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model.
data.urlsobjectObject containing related API endpoints
data.statusstringStatus: completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses
data.created_atstringISO timestamp of when the request was created
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds
© 2026 WaveSpeedAI. All rights reserved.