Seedance 2.5 Now Live | Try in Video Generator →

bria/

FIBO is an open-source JSON-native text-to-image model that maps intent to structured controls for precise enterprise image generation. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

text-to-image
Input

Idle

A hidden ancient ruin, overgrown with bioluminescent moss and glowing fungi, deep within an ethereal, mist-shrouded forest. Whispering spirits, barely visible as shimmering lights, drift among towering, gnarled trees. A waterfall cascades into a crystal-clear pool reflecting the moonlight.

$0.04per run·~25 / $1

Next:

ExamplesView all

A hidden ancient ruin, overgrown with bioluminescent moss and glowing fungi, deep within an ethereal, mist-shrouded forest. Whispering spirits, barely visible as shimmering lights, drift among towering, gnarled trees. A waterfall cascades into a crystal-clear pool reflecting the moonlight.

A hidden ancient ruin, overgrown with bioluminescent moss and glowing fungi, deep within an ethereal, mist-shrouded forest. Whispering spirits, barely visible as shimmering lights, drift among towering, gnarled trees. A waterfall cascades into a crystal-clear pool reflecting the moonlight.

A bustling aerial view of a utopian city built into the side of a colossal mountain. Automated sky-trams glide silently between chrome towers. Vertical farms glow with soft light, and waterfalls are integrated into the architecture. People in elegant, flowing garments walk on transparent sky-bridges.

A bustling aerial view of a utopian city built into the side of a colossal mountain. Automated sky-trams glide silently between chrome towers. Vertical farms glow with soft light, and waterfalls are integrated into the architecture. People in elegant, flowing garments walk on transparent sky-bridges.

A sleek, futuristic starfighter dogfighting against a swarm of alien interceptors amidst the rings of a gas giant. Explosions light up the darkness, revealing distant nebulae and debris from previous clashes. The pilot's cockpit glows with holographic displays.

A sleek, futuristic starfighter dogfighting against a swarm of alien interceptors amidst the rings of a gas giant. Explosions light up the darkness, revealing distant nebulae and debris from previous clashes. The pilot's cockpit glows with holographic displays.

A high-angle shot of a lone cyborg detective standing on the rain-slicked balcony of a futuristic skyscraper. Below, the sprawling city is a dense network of flying vehicles and massive, glowing holographic advertisements. The detective wears a long trench coat, and the neon light reflects off their chrome prosthetic arm.

A high-angle shot of a lone cyborg detective standing on the rain-slicked balcony of a futuristic skyscraper. Below, the sprawling city is a dense network of flying vehicles and massive, glowing holographic advertisements. The detective wears a long trench coat, and the neon light reflects off their chrome prosthetic arm.

A woman made entirely of cracked porcelain and blooming flowers sits at a weathered wooden table in the middle of a vast, tranquil desert at sunset. A flock of glowing, ethereal jellyfish float gracefully through the air around her.

A woman made entirely of cracked porcelain and blooming flowers sits at a weathered wooden table in the middle of a vast, tranquil desert at sunset. A flock of glowing, ethereal jellyfish float gracefully through the air around her.

A bustling Victorian-era street market under a hazy, amber sky. Intricate brass airships and ornithopters clutter the air above. People in corsets, top hats, and goggles browse stalls selling bizarre clockwork gadgets and bubbling potions. Steam rises from grates in the cobblestone streets.

A bustling Victorian-era street market under a hazy, amber sky. Intricate brass airships and ornithopters clutter the air above. People in corsets, top hats, and goggles browse stalls selling bizarre clockwork gadgets and bubbling potions. Steam rises from grates in the cobblestone streets.

A close-up portrait of a charismatic cyberpunk hacker. Their face is half-lit by the glow of a holographic interface, revealing intricate neural implants around one eye. They have a sharp, knowing smirk, and their dark jacket features subtle glowing accents. Rain streaks down a window in the blurred background.

A close-up portrait of a charismatic cyberpunk hacker. Their face is half-lit by the glow of a holographic interface, revealing intricate neural implants around one eye. They have a sharp, knowing smirk, and their dark jacket features subtle glowing accents. Rain streaks down a window in the blurred background.

A lone wanderer, silhouette against a crimson sunset, stands on a rusted highway overlooking a vast, sand-swept desert filled with skeletal remains of skyscrapers. A modified, armored vehicle, spewing black smoke, is parked behind them. Vultures circle ominously in the distance.

A lone wanderer, silhouette against a crimson sunset, stands on a rusted highway overlooking a vast, sand-swept desert filled with skeletal remains of skyscrapers. A modified, armored vehicle, spewing black smoke, is parked behind them. Vultures circle ominously in the distance.

A lone fisherman in a small rowboat on a perfectly still, black ocean under a sickly green moon. In the depths below, the immense, shadowy silhouette of a tentacled cosmic horror is faintly visible, its glowing, multitude of eyes staring up from the abyss.

A lone fisherman in a small rowboat on a perfectly still, black ocean under a sickly green moon. In the depths below, the immense, shadowy silhouette of a tentacled cosmic horror is faintly visible, its glowing, multitude of eyes staring up from the abyss.

A cozy rooftop garden in Paris under the warm glow of lights at night overlook

A cozy rooftop garden in Paris under the warm glow of lights at night overlook

Related Models

README

Bria Fibo — Text-to-Image

Bria’s Fibo is a fast, SOTA Open source model trained on licensed data. It supports prompt + negative prompt, structured prompts (for consistent layouts/brand objects), controllable aspect ratios, and seed reproducibility—great for ads, social posts, product shots, and concept art.

✨ Highlights

  • Strong composition control — prompt + negative prompt + structured prompt.
  • Production-ready outputs — crisp details and balanced lighting across common aspect ratios.
  • Deterministic renders — set a seed to reproduce the same image; change the seed to explore variants.
  • Creator workflow fit — square 1:1 by default; export-friendly for design tools.

🧩 Parameters

  • prompt* (string, required) Your text description of the scene/subject, camera, lighting, style, colors, etc.

  • aspect_ratio (dropdown) Output canvas proportion. The panel shows 1:1; common options typically include 1:1, 16:9, 9:16, 4:5, 3:2 (availability may vary).

  • negative_prompt (string, optional) What to avoid (e.g., “blurry, extra fingers, watermark, text artifacts, distorted face”).

  • structured_prompt (string/JSON, optional) For schema-style guidance such as object lists, layout slots, or color constraints. Example idea: {"subject":"red running shoes","background":"studio white","key_light":"soft"}

  • seed (integer, optional) Fixes randomness. Same prompt + params + seed → same image. Leave blank to randomize.

Fields marked with * are required.

🚀 How to Use

  1. Write the prompt (required). Be clear about subject, setting, lighting, and style. Example: “A cozy rooftop garden in Paris at night, warm string lights, shallow depth of field, cinematic glow.”

  2. Choose aspect_ratio.

  • Social square → 1:1
  • Landscape/YouTube banner → 16:9
  • Portrait/Reels → 9:16
  1. (Optional) Add a negative_prompt. Steer the output away from unwanted traits. Example: “low-res, blurry, text, watermark, extra fingers, distorted proportions.”

  2. (Optional) Use structured_prompt. Provide a compact schema to lock composition or brand elements. Great for repeatable shots.

  3. (Optional) Set seed. Use a fixed number to reproduce a result; refresh to explore variants.

  4. Run to generate your image. If you like the composition but want alternatives, keep all settings the same and only change the seed.

Price

  • $0.04 per image.

Notes

  • Omit seed to randomize.
  • structured_prompt may be sent as a JSON string or object depending on your client—keep it compact and valid.

🧠 Prompting Tips

  • Pair a clear subject with lighting and camera cues: “soft studio key light,” “35mm lens,” “golden hour backlight.”
  • Use negative prompts early to block common artifacts (e.g., “text, watermark, extra limbs”).
  • For consistent campaigns, keep a fixed seed + structured prompt and only tweak small attributes (color, pose, prop).
Note:This website uses AI models provided by third parties. Documentation prices are for reference and may be outdated. The Generate button shows an estimate; the final task charge prevails.

Fibo API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/bria/fibo with your input as JSON. The endpoint returns a prediction id. Start polling the result endpoint around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. On completed, read output values from data.outputs. Examples for Fibo below.

HTTP example
set -euo pipefail

: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"

REQUEST_BODY=$(cat <<'JSON'
{
    "prompt": "A cinematic shot of a city at sunset, soft golden light",
    "aspect_ratio": "1:1",
    "seed": -1
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/bria/fibo" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $WAVESPEED_API_KEY" \
  -d "$REQUEST_BODY")

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

# 2. Poll until the prediction finishes.
while true; do
  RESPONSE=$(curl --silent --show-error --fail-with-body "$RESULT_URL" \
    -H "Authorization: Bearer $WAVESPEED_API_KEY")
  RESULT=$(printf '%s' "$RESPONSE" | jq 'if has("data") then .data else . end')
  STATUS=$(printf '%s' "$RESULT" | jq -r '.status')
  case "$STATUS" in
    completed) printf '%s\n' "$RESULT" | jq '.outputs'; break ;;
    failed|cancelled|timeout) printf '%s\n' "$RESULT" | jq . >&2; exit 1 ;;
    created|processing) sleep 2 ;;
    *) printf 'Unexpected status: %s
' "$STATUS" >&2; exit 1 ;;
  esac
done
Node.js example
const submitUrl = "https://api.wavespeed.ai/api/v3/bria/fibo";
const apiKey = process.env.WAVESPEED_API_KEY;
if (!apiKey) throw new Error('Set WAVESPEED_API_KEY');

async function requestJson(url, options = {}) {
  const response = await fetch(url, options);
  if (!response.ok) throw new Error(await response.text());
  return response.json();
}

// 1. Submit the prediction.
const body = await requestJson(submitUrl, {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
        "prompt": "A cinematic shot of a city at sunset, soft golden light",
        "aspect_ratio": "1:1",
        "seed": -1
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = task.urls?.get ||
  `https://api.wavespeed.ai/api/v3/predictions/${task.id}/result`;

// 2. Poll until the prediction finishes.
while (true) {
  const resultBody = await requestJson(resultUrl, {
    headers: { "Authorization": `Bearer ${apiKey}` },
  });
  const result = resultBody.data ?? resultBody;
  if (result.status === "completed") {
    console.log(result.outputs);
    break;
  }
  if (["failed", "cancelled", "timeout"].includes(result.status)) throw new Error(JSON.stringify(result));
  if (!["created", "processing"].includes(result.status)) throw new Error("Unexpected status: " + result.status);
  await new Promise(resolve => setTimeout(resolve, 2000));
}
Python example
import json
import os
import time
from urllib.request import Request, urlopen

api_key = os.environ["WAVESPEED_API_KEY"]
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
payload = {
    "prompt": "A cinematic shot of a city at sunset, soft golden light",
    "aspect_ratio": "1:1",
    "seed": -1
}

def request_json(url, data=None):
    request = Request(url, data=data, headers=headers, method="POST" if data else "GET")
    with urlopen(request) as response:
        return json.load(response)

# 1. Submit the prediction.
body = request_json("https://api.wavespeed.ai/api/v3/bria/fibo", json.dumps(payload).encode())
task = body.get("data", body)
if not task.get("id"):
    raise RuntimeError("Submission response did not contain a prediction id")
result_url = task.get("urls", {}).get("get") or f"https://api.wavespeed.ai/api/v3/predictions/{task['id']}/result"

# 2. Poll until the prediction finishes.
while True:
    result_body = request_json(result_url)
    result = result_body.get("data", result_body)
    status = result.get("status")
    if status == "completed":
        print(result.get("outputs", []))
        break
    if status in {"failed", "cancelled", "timeout"}:
        raise RuntimeError(result)
    if status not in {"created", "processing"}:
        raise RuntimeError(f"Unexpected status: {status}")
    time.sleep(2)

Fibo API — Frequently asked questions

What is the Fibo API?

Fibo is a Bria model for image generation, exposed as a REST API on WaveSpeedAI. FIBO is an open-source JSON-native text-to-image model that maps intent to structured controls for precise enterprise image generation. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing. You can call it programmatically or try it from the playground above.

How do I call the Fibo API?

POST your input parameters to the model's REST endpoint (shown in the API tab of this playground) with your WaveSpeedAI API key in the Authorization header. Submission returns a prediction ID. Poll the result endpoint starting around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. The playground generates production-oriented Python, JavaScript, and cURL examples with timeouts, transient-error handling, and safe GET retries. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/bria/bria-fibo.

How much does Fibo cost per run?

Fibo starts at $0.040 per run. That figure is the base price — the final charge scales with the parameters you set in the form (output size, length, count, references, or whatever knobs this model exposes), so a higher-quality or larger output costs more than a minimal one. The exact cost for your current input is shown live next to the Generate button before you submit, and the actual per-call charge is recorded on the prediction afterwards.

What inputs does Fibo accept?

Key inputs: `prompt`, `aspect_ratio`, `seed`, `negative_prompt`, `enable_base64_output`, `enable_sync_mode`. The full JSON schema (types, defaults, allowed values) is rendered above the Generate button and mirrored in the API reference at https://wavespeed.ai/docs/docs-api/bria/bria-fibo.

How long does Fibo take to generate?

Median end-to-end generation time on WaveSpeedAI is around 15 seconds per request, based on recent successful runs. Queue time varies with global demand; live status is visible in the prediction record.

Can I use Fibo outputs commercially?

Commercial usage rights depend on the model's license, set by its provider (Bria). The license summary appears on the model card above; see WaveSpeedAI's Terms of Service for platform-level conditions.

Fibo | High-Quality Text-to-Image API on WaveSpeedAI