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.
En attente

$0.04par exécution·~25 / $1

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 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 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 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 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
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.
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.
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.”
Choose aspect_ratio.
(Optional) Add a negative_prompt. Steer the output away from unwanted traits. Example: “low-res, blurry, text, watermark, extra fingers, distorted proportions.”
(Optional) Use structured_prompt. Provide a compact schema to lock composition or brand elements. Great for repeatable shots.
(Optional) Set seed. Use a fixed number to reproduce a result; refresh to explore variants.
Run to generate your image. If you like the composition but want alternatives, keep all settings the same and only change the seed.
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.
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
doneconst 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));
}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 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.
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.
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.
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.
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.
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.