Bria Fibo Edit 1.5 Edit API Documentation
Playground
Try it on WaveSpeedAI!Bria FIBO Edit 1.5 Image Edit edits one to four reference images with natural-language or structured instructions, supporting commercially safe image editing, visual refinements, product visuals, marketing assets, brand-safe content, and production workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Features
Bria FIBO Edit 1.5 edits images using visual references and optional text instructions. Upload one to four ordered reference images, describe the desired edit when needed, and optionally use a mask for single-image edits to control which areas should change.
Why Choose This?
-
Image editing workflow
Edit existing images using reference inputs and optional prompt instructions. -
Multi-image input support
Use one to four ordered reference images for stronger visual context. -
Optional mask control
Provide a mask for single-image edits to define editable and preserved regions. -
Flexible aspect ratios
Choose square, portrait, landscape, and vertical output formats. -
Seed support
Use a fixed seed for reproducible edits, or-1for a random seed.
Parameters
| Parameter | Required | Description |
|---|---|---|
| images | Yes | One to four ordered reference image URLs. |
| prompt | No | Text prompt describing the desired edit or final result. |
| mask_image | No | Optional mask for single-image edits. White regions are edited and black regions are preserved. |
| aspect_ratio | No | Output aspect ratio: 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, or 16:9. |
| seed | No | Random seed for generation. Use -1 for a random seed. Range: -1–2147483647. Default: -1. |
How to Use
- Upload reference images — Provide one to four images for the edit.
- Write a prompt optional — Describe what should change and what should remain consistent.
- Add a mask optional — Use
mask_imagefor single-image edits when only specific regions should be edited. - Choose aspect ratio optional — Select the output layout that matches your target format.
- Set seed optional — Use a fixed seed for reproducible results, or
-1for random generation. - Submit — Generate the edited image.
Pricing
Pricing is fixed at $0.04 per edit.
| Output | Cost |
|---|---|
| One edited image | $0.04 |
Best Use Cases
- Prompt-guided image editing — Modify an existing image with natural-language instructions.
- Masked edits — Edit selected regions while preserving the rest of the image.
- Multi-reference editing — Use multiple images to guide subject, style, composition, or visual context.
- Marketing visuals — Refine product images, campaign assets, thumbnails, and social media graphics.
- Creative iteration — Generate alternate versions of an existing image.
Pro Tips
- Use clear, high-quality reference images for better edit results.
- Keep reference images visually relevant to the desired edit.
- Use
mask_imagewhen only part of the image should change. - In mask images, white areas are edited and black areas are preserved.
- Keep prompts clear and focused on the desired transformation.
- Use a fixed
seedwhen comparing prompt or parameter changes. - Choose
9:16for vertical mobile content and16:9for widescreen layouts.
Related Models
- Bria FIBO Gen 1.5 Text-to-Image — Generate images from text prompts with optional reference-image guidance.
- Bria FIBO Edit 1.5 — Edit images with prompt-based instructions and visual context.
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'
{
"images": [
"https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg"
],
"aspect_ratio": "1:1"
}
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/fibo-edit-1.5/edit" \
-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
doneRetry temporary errors only while polling, never the submit request. Errors, retries and timeouts
Parameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| images | array<string> | Yes | - | 1 ~ 4 items | One to four ordered reference images. |
| prompt | string | No | - | The prompt to use for the generation. | |
| mask_image | string | No | - | Optional mask for single-image edits. White regions are edited and black regions are preserved. | |
| aspect_ratio | string | No | - | 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9 | The aspect ratio of the generated image. If not specified, it is determined automatically from the input image. |
| structured_instruction | string | No | - | - | Advanced option. Advanced structured edit instruction serialized as a JSON string. Expand only when detailed control is needed. |
| seed | integer | No | - | - | The random seed to use for the generation. |
Every model also accepts the global request options enable_sync_mode and enable_base64_output; see their pages for details.
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data.id | string | Unique identifier for the prediction, Task Id |
| data.model | string | Model ID used for the prediction |
| data.outputs | array | Output values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed) |
| data.urls | object | Object containing related API endpoints |
| data.status | string | Task status. completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses. |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |
Result Request Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | Yes | - | Task ID |
Result Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data | object | The prediction data object containing all details |
| data.id | string | Unique identifier for the prediction |
| data.model | string | Model ID used for the prediction |
| data.outputs | array<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.urls | object | Object containing related API endpoints |
| data.status | string | Status: completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses |
| data.created_at | string | ISO timestamp of when the request was created |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |