Bria Fibo Edit Genfill API Documentation

Bria Fibo Edit Genfill API Documentation

Playground

Try it on WaveSpeedAI!

BRIA FIBO Edit GenFill is a fast AI generative fill image editing model that fills masked regions in an image from a text prompt using BRIA’s licensed-data image editing API. Ready-to-use REST inference API for inpainting, object replacement, background repair, product image editing, creative retouching, marketing assets, and professional image editing workflows with simple integration, no coldstarts, and affordable pricing.

Features

Bria FIBO Edit GenFill fills masked regions in an image using a natural-language prompt. Upload a source image, provide a mask, and describe what should appear in the masked area to generate a clean, context-aware edit.


Why Choose This?

  • Text-guided generative fill
    Replace or insert content inside a masked region using a prompt.

  • Precise mask-based control
    Limit generation to exactly the area you want to edit.

  • Clean editing workflow
    Ideal for object replacement, scene cleanup, product retouching, and controlled inpainting.

  • Licensed-data Bria pipeline
    Built on Bria’s commercial-friendly image editing workflow.

  • Simple input setup
    Works with direct URLs or uploaded image assets.


Parameters

ParameterRequiredDescription
imageYesSource image to edit.
mask_imageYesMask image that marks the region to fill.
promptYesText description of what to generate inside the masked area.

How to Use

  1. Upload the source image — provide the image you want to edit.
  2. Upload the mask image — clearly mark the region that should be filled or replaced.
  3. Write your prompt — describe the desired content, style, material, color, lighting, or object.
  4. Submit — run the model and download the generated result.

Example Use Case

Fill an empty tabletop region with a realistic ceramic vase that matches the lighting and perspective of the original photo.


Pricing

OutputCost
Per image$0.04

Billing Rules

  • Each generated image costs $0.04
  • Pricing is fixed per image

Best Use Cases

  • Object insertion — Add products, props, or scene elements into a masked area.
  • Object replacement — Swap one item for another while preserving the rest of the composition.
  • Photo cleanup — Remove distractions and regenerate the background naturally.
  • Product retouching — Refine catalog or marketing visuals with controlled edits.
  • Creative compositing — Build prompt-driven image edits with precise spatial control.

Pro Tips

  • Use a clean, accurate mask for better fill quality.
  • Be specific in the prompt about object type, material, color, and lighting.
  • Mention perspective or scene context when realism matters.
  • Smaller, well-defined masked regions usually produce more stable results.
  • Match the prompt to the style of the original image for more natural blending.

Notes

  • image, mask_image, and prompt are all required.
  • The mask should clearly define the area to be filled.
  • Better prompts usually improve control over object appearance and scene consistency.
  • Pricing is fixed per generated image.

  • Bria image editing workflows — Useful when you need other prompt-based edit or inpainting styles.
  • Bria fill and replace workflows — Useful for more targeted commercial image editing tasks.

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",
  "mask_image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
  "prompt": "A cinematic ocean wave at sunrise, highly detailed"
}
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/genfill" \
  -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-The source image to edit.
mask_imagestringYes-Mask image that marks the region to fill.
promptstringYes-Describe what should be generated inside the masked area.

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.