bria-ai
Use when generating visual assets with Bria.ai - product photos, hero images, icons, backgrounds. Includes batch generation (multiple images concurrently), pipeline workflows (generate → edit → remove background), and parallel API patterns. Use for websites, presentations, e-commerce catalogs, or any task needing multiple AI-generated images.
- License 许可
- MIT
- 最近更新
- 2026-08-23
- Stars
- ★ 1
- Forks
- 0
01 前言 Front Matter
- name
- bria-ai
- description
- Use when generating visual assets with Bria.ai - product photos, hero images, icons, backgrounds. Includes batch generation (multiple images concurrently), pipeline workflows (generate → edit → remove background), and parallel API patterns. Use for websites, presentations, e-commerce catalogs, or any task needing multiple AI-generated images.
02 资源文件 7
- 参考文档_meta.json282 B
- 许可证LICENSE.txt1.3 KB
- 参考文档references/api-endpoints.md9.6 KB
- 脚本references/code-examples/bria_client.py21.0 KB
- 脚本references/code-examples/bria_client.sh19.2 KB
- 脚本references/code-examples/bria_client.ts20.1 KB
- 参考文档references/guide.md16.1 KB
03 SKILL.md 正文
Bria Visual Asset Generator
Generate production-ready visual assets for websites, presentations, documents, and applications using Bria's commercially-safe AI models.
When to Use This Skill
- Website/App Development: Hero images, product photos, backgrounds, illustrations
- Presentations: Slides visuals, diagrams, icons, cover images
- Documents: Report graphics, infographics, headers, decorative elements
- Marketing: Social media assets, banners, promotional images
- E-commerce: Product photography, lifestyle shots, catalog images
- Batch Generation: Multiple images with different prompts concurrently
- Pipeline Workflows: Chained operations (generate → edit → remove background → lifestyle shot)
Core Capabilities
| Need | Capability | Use Case |
|---|---|---|
| Create new images | FIBO Generate | Hero images, product shots, illustrations |
| Edit by text | FIBO-Edit | Change colors, modify objects, transform scenes |
| Edit with mask | GenFill/Erase | Precise inpainting, add/replace specific regions |
| Add/Replace/Remove objects | Text-based editing | Add vase, replace apple with pear, remove table |
| Transparent backgrounds | RMBG-2.0 | Extract subjects for overlays, logos, cutouts |
| Background operations | Replace/Blur/Erase | Change, blur, or remove backgrounds |
| Expand images | Outpainting | Extend boundaries, change aspect ratios |
| Upscale images | Super Resolution | Increase resolution 2x or 4x |
| Enhance quality | Enhancement | Improve lighting, colors, details |
| Transform style | Restyle | Oil painting, anime, cartoon, 3D render |
| Change lighting | Relight | Golden hour, spotlight, dramatic lighting |
| Change season | Reseason | Spring, summer, autumn, winter |
| Blend/composite | Image Blending | Apply textures, logos, merge images |
| Text replacement | Rewrite | Change text in images |
| Restore photos | Restoration | Fix old/damaged photos |
| Colorize | Colorization | Add color to B&W, or convert to B&W |
| Sketch to photo | Sketch2Image | Convert drawings to realistic photos |
| Product photography | Lifestyle Shot | Place products in scenes |
Quick Reference
Generate an Image (FIBO)
curl -X POST "https://engine.prod.bria-api.com/v2/image/generate" \
-H "api_token: $BRIA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "your description",
"aspect_ratio": "16:9"
}'
Aspect ratios: 1:1 (square), 16:9 (hero/banner), 4:3 (presentation), 9:16 (mobile/story), 3:4 (portrait)
Advanced: For precise, deterministic control over generation, use VGL structured prompts instead of natural language. VGL defines every visual attribute (objects, lighting, composition) as explicit JSON.
Remove Background (RMBG-2.0)
curl -X POST "https://engine.prod.bria-api.com/v2/image/edit/remove_background" \
-H "api_token: $BRIA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"image": "https://..."}'
Returns PNG with transparency.
Edit Image (FIBO-Edit) - No Mask Required
Edit any image with natural language instructions:
curl -X POST "https://engine.prod.bria-api.com/v2/image/edit" \
-H "api_token: $BRIA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"images": ["https://..."],
"instruction": "change the mug to red"
}'
Python example:
from bria_client import BriaClient
client = BriaClient()
result = client.edit_image(image_url, "change the mug to red")
print(result['result']['image_url'])
Edit Image Region with Mask (FIBO-Edit)
For precise control over which region to edit:
curl -X POST "https://engine.prod.bria-api.com/v2/image/edit/gen_fill" \
-H "api_token: $BRIA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image": "https://...",
"mask": "https://...",
"prompt": "what to generate in masked area"
}'
Expand Image (Outpainting)
Extend image boundaries to new aspect ratio:
curl -X POST "https://engine.prod.bria-api.com/v2/image/edit/expand" \
-H "api_token: $BRIA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image": "base64-or-url",
"aspect_ratio": "16:9",
"prompt": "coffee shop background, wooden table"
}'
Upscale Image
Increase image resolution 2x or 4x:
curl -X POST "https://engine.prod.bria-api.com/v2/image/edit/increase_resolution" \
-H "api_token: $BRIA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"image": "https://...", "scale": 2}'
Product Lifestyle Shot
Place a product in a lifestyle scene:
curl -X POST "https://engine.prod.bria-api.com/v2/image/edit/lifestyle_shot_by_text" \
-H "api_token: $BRIA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image": "https://product-with-transparent-bg.png",
"prompt": "modern kitchen countertop, natural morning light"
}'
Asset Generation Workflows
Website Hero Images
Generate wide banner images for landing pages:
{
"prompt": "Modern tech startup workspace with developers collaborating, bright natural lighting, clean minimal aesthetic",
"aspect_ratio": "16:9",
"negative_prompt": "cluttered, dark, low quality"
}
Tips for hero images:
- Use
16:9for full-width banners - Describe lighting and mood explicitly
- Include "professional", "high quality", "commercial" for polished results
- Specify "clean background" or "minimal" for text overlay space
Product Photography
Generate e-commerce style product shots:
{
"prompt": "Professional product photo of [item] on white studio background, soft shadows, commercial photography lighting",
"aspect_ratio": "1:1"
}
Then remove background for transparent PNG to composite anywhere:
{"image": "generated_image_url"}
Presentation Visuals
Generate slides-ready images:
{
"prompt": "Abstract visualization of data analytics, blue and purple gradient, modern corporate style, clean composition with space for text",
"aspect_ratio": "16:9"
}
Common presentation themes:
- "Abstract technology background" - tech slides
- "Business team collaboration" - culture slides
- "Growth chart visualization" - metrics slides
- "Minimalist geometric patterns" - section dividers
Document Graphics
Generate report or article images:
{
"prompt": "Isometric illustration of cloud computing infrastructure, flat design, vibrant colors, white background",
"aspect_ratio": "4:3"
}
Icons and Illustrations
For icons, generate then remove background:
{
"prompt": "3D icon of a shield with checkmark, glossy material, soft gradient background, app icon style",
"aspect_ratio": "1:1"
}
Then use RMBG-2.0 to get transparent PNG.
Social Media Assets
Instagram post (1:1):
{
"prompt": "Lifestyle photo of coffee and laptop on wooden desk, morning light, cozy atmosphere",
"aspect_ratio": "1:1"
}
Story/Reel (9:16):
{
"prompt": "Vertical product showcase of smartphone, floating in gradient background, tech aesthetic",
"aspect_ratio": "9:16"
}
Prompt Engineering Tips
Be Specific About Style
- "professional product photography" vs "casual snapshot"
- "flat design illustration" vs "3D rendered"
- "corporate modern" vs "playful colorful"
Specify Technical Details
- Lighting: "soft natural light", "studio lighting", "dramatic shadows"
- Background: "white studio", "gradient", "blurred office", "transparent"
- Composition: "centered", "rule of thirds", "negative space on left for text"
Quality Keywords
Add these for polished results:
- "high quality", "professional", "commercial grade"
- "4K", "detailed", "sharp focus"
- "award-winning photography" (for photos)
Negative Prompts
Exclude unwanted elements:
- "blurry, low quality, pixelated"
- "text, watermark, logo"
- "cluttered, busy, messy"
Async Response Handling
All endpoints return async responses:
{
"request_id": "uuid",
"status_url": "https://engine.prod.bria-api.com/v2/status/uuid"
}
Poll the status_url until status: "COMPLETED", then get result.image_url.
import requests, time
def get_result(status_url, api_key):
while True:
r = requests.get(status_url, headers={"api_token": api_key})
data = r.json()
if data["status"] == "COMPLETED":
return data["result"]["image_url"]
if data["status"] == "FAILED":
raise Exception(data.get("error"))
time.sleep(2)
Batch & Parallel Image Generation
Generating Multiple Images Concurrently
For generating many images efficiently, launch requests in parallel and poll concurrently:
import asyncio
import aiohttp
async def generate_image(session, api_key, prompt, aspect_ratio="1:1"):
"""Launch a single generation request."""
async with session.post(
"https://engine.prod.bria-api.com/v2/image/generate",
headers={"api_token": api_key, "Content-Type": "application/json"},
json={"prompt": prompt, "aspect_ratio": aspect_ratio}
) as resp:
return await resp.json()
async def poll_status(session, api_key, status_url, timeout=120):
"""Poll until complete or failed."""
for _ in range(timeout // 2):
async with session.get(status_url, headers={"api_token": api_key}) as resp:
data = await resp.json()
if data["status"] == "COMPLETED":
return data["result"]["image_url"]
if data["status"] == "FAILED":
raise Exception(data.get("error", "Generation failed"))
await asyncio.sleep(2)
raise TimeoutError(f"Timeout polling {status_url}")
async def generate_batch(api_key, prompts, aspect_ratio="1:1", max_concurrent=5):
"""Generate multiple images with different prompts concurrently."""
semaphore = asyncio.Semaphore(max_concurrent) # Rate limiting
async def generate_one(prompt):
async with semaphore:
async with aiohttp.ClientSession() as session:
# Launch request
result = await generate_image(session, api_key, prompt, aspect_ratio)
# Poll for completion
return await poll_status(session, api_key, result["status_url"])
# Run all concurrently
results = await asyncio.gather(*[generate_one(p) for p in prompts], return_exceptions=True)
return results
# Usage
prompts = [
"Professional photo of running shoes on white background",
"Professional photo of leather handbag on white background",
"Professional photo of smartwatch on white background",
"Professional photo of sunglasses on white background",
]
image_urls = asyncio.run(generate_batch("YOUR_API_KEY", prompts, max_concurrent=3))
Key points:
- Use
asyncio.Semaphoreto limit concurrent requests (recommended: 3-5) return_exceptions=Trueprevents one failure from canceling all requests- Each result is either a URL string or an Exception object
TypeScript/Node.js Parallel Generation
type AspectRatio = "1:1" | "4:3" | "16:9" | "3:4" | "9:16";
interface BriaResponse {
request_id: string;
status_url: string;
}
interface BriaStatusResponse {
status: "IN_PROGRESS" | "COMPLETED" | "FAILED";
result?: { image_url: string };
error?: string;
}
interface GenerateBatchResult {
prompt: string;
imageUrl: string | null;
error: string | null;
}
async function generateBatch(
apiKey: string,
prompts: string[],
aspectRatio: AspectRatio = "1:1",
maxConcurrent = 5
): Promise<GenerateBatchResult[]> {
const semaphore = { count: 0, max: maxConcurrent };
async function withLimit<T>(fn: () => Promise<T>): Promise<T> {
while (semaphore.count >= semaphore.max) {
await new Promise(r => setTimeout(r, 100));
}
semaphore.count++;
try {
return await fn();
} finally {
semaphore.count--;
}
}
async function generateOne(prompt: string): Promise<string> {
return withLimit(async () => {
// Launch request
const res = await fetch("https://engine.prod.bria-api.com/v2/image/generate", {
method: "POST",
headers: { "api_token": apiKey, "Content-Type": "application/json" },
body: JSON.stringify({ prompt, aspect_ratio: aspectRatio })
});
const { status_url } = (await res.json()) as BriaResponse;
// Poll for result
for (let i = 0; i < 60; i++) {
const statusRes = await fetch(status_url, { headers: { "api_token": apiKey } });
const data = (await statusRes.json()) as BriaStatusResponse;
if (data.status === "COMPLETED") return data.result!.image_url;
if (data.status === "FAILED") throw new Error(data.error || "Generation failed");
await new Promise(r => setTimeout(r, 2000));
}
throw new Error("Timeout waiting for generation");
});
}
const results = await Promise.allSettled(prompts.map(generateOne));
return results.map((result, i) => ({
prompt: prompts[i],
imageUrl: result.status === "fulfilled" ? result.value : null,
error: result.status === "rejected" ? result.reason.message : null
}));
}
// Usage
const results = await generateBatch(process.env.BRIA_API_KEY!, [
"Modern office workspace with natural lighting",
"Abstract tech background with blue gradient",
"Professional headshot studio setup"
], "16:9", 3);
results.forEach(r => {
if (r.imageUrl) console.log(`✓ ${r.prompt}: ${r.imageUrl}`);
else console.log(`✗ ${r.prompt}: ${r.error}`);
});
---
## Pipeline Workflows
Chain multiple operations on images (generate → edit → remove background).
### Complete Pipeline Example
```python
async def product_pipeline(api_key, product_descriptions, scene_prompt):
"""
Pipeline: Generate product → Remove background → Place in lifestyle scene
"""
async with aiohttp.ClientSession() as session:
results = []
for desc in product_descriptions:
# Step 1: Generate product image
gen_result = await generate_image(session, api_key,
f"Professional product photo of {desc} on white background, studio lighting",
aspect_ratio="1:1")
product_url = await poll_status(session, api_key, gen_result["status_url"])
# Step 2: Remove background
async with session.post(
"https://engine.prod.bria-api.com/v2/image/edit/remove_background",
headers={"api_token": api_key, "Content-Type": "application/json"},
json={"image": product_url}
) as resp:
rmbg_result = await resp.json()
transparent_url = await poll_status(session, api_key, rmbg_result["status_url"])
# Step 3: Place in lifestyle scene
async with session.post(
"https://engine.prod.bria-api.com/v2/image/edit/lifestyle_shot_by_text",
headers={"api_token": api_key, "Content-Type": "application/json"},
json={"image": transparent_url, "prompt": scene_prompt}
) as resp:
lifestyle_result = await resp.json()
final_url = await poll_status(session, api_key, lifestyle_result["status_url"])
results.append({
"product": desc,
"original": product_url,
"transparent": transparent_url,
"lifestyle": final_url
})
return results
# Usage
products = ["coffee mug", "water bottle", "notebook"]
scene = "modern minimalist desk, natural morning light, plants in background"
results = asyncio.run(product_pipeline("YOUR_API_KEY", products, scene))
Parallel Pipeline (Advanced)
Process multiple products through the pipeline concurrently:
async def parallel_pipeline(api_key, products, scene_prompt, max_concurrent=3):
"""Run full pipeline for multiple products in parallel."""
semaphore = asyncio.Semaphore(max_concurrent)
async def process_one(product):
async with semaphore:
return await single_product_pipeline(api_key, product, scene_prompt)
return await asyncio.gather(*[process_one(p) for p in products], return_exceptions=True)
Common Pipeline Patterns
| Pipeline | Steps | Use Case |
|---|---|---|
| Product → Transparent | generate → remove_background | E-commerce cutouts |
| Product → Lifestyle | generate → remove_background → lifestyle_shot | Marketing photos |
| Edit → Upscale | edit → increase_resolution | High-res edited images |
| Generate → Restyle | generate → restyle | Artistic variations |
| Generate → Variations | generate (num_results=4) | A/B testing options |
Integration Examples
React/Next.js Component
// Generate and display a hero image
const [imageUrl, setImageUrl] = useState(null);
async function generateHero(prompt) {
const res = await fetch('/api/bria/generate', {
method: 'POST',
body: JSON.stringify({ prompt, aspect_ratio: '16:9' })
});
const { image_url } = await res.json();
setImageUrl(image_url);
}
Python Script for Batch Generation
import asyncio
# See "Batch & Parallel Image Generation" section for generate_batch function
async def main():
api_key = "YOUR_API_KEY"
products = ["running shoes", "leather bag", "smart watch"]
prompts = [f"Professional product photo of {p} on white background" for p in products]
results = await generate_batch(api_key, prompts, aspect_ratio="1:1", max_concurrent=3)
for product, result in zip(products, results):
if isinstance(result, Exception):
print(f"{product}: FAILED - {result}")
else:
print(f"{product}: {result}")
asyncio.run(main())
API Reference
See references/api-endpoints.md for complete endpoint documentation.
Key Endpoints
Generation
| Endpoint | Purpose |
|---|---|
POST /v2/image/generate |
Generate images from text (FIBO) |
Edit by Text (No Mask)
| Endpoint | Purpose |
|---|---|
POST /v2/image/edit |
Edit image with natural language instruction |
POST /v2/image/edit/add_object_by_text |
Add objects to image |
POST /v2/image/edit/replace_object_by_text |
Replace objects in image |
POST /v2/image/edit/erase_by_text |
Remove objects by name |
Edit with Mask
| Endpoint | Purpose |
|---|---|
POST /v2/image/edit/gen_fill |
Inpaint/generate in masked region |
POST /v2/image/edit/erase |
Erase masked region |
Background Operations
| Endpoint | Purpose |
|---|---|
POST /v2/image/edit/remove_background |
Remove background (RMBG-2.0) |
POST /v2/image/edit/replace_background |
Replace with AI-generated background |
POST /v2/image/edit/blur_background |
Apply blur to background |
POST /v2/image/edit/erase_foreground |
Remove foreground, fill background |
POST /v2/image/edit/crop_foreground |
Crop tightly around subject |
Image Transformation
| Endpoint | Purpose |
|---|---|
POST /v2/image/edit/expand |
Outpaint to new aspect ratio |
POST /v2/image/edit/enhance |
Enhance quality and details |
POST /v2/image/edit/increase_resolution |
Upscale 2x or 4x |
POST /v2/image/edit/blend |
Blend/merge images or textures |
POST /v2/image/edit/reseason |
Change season/weather |
POST /v2/image/edit/restyle |
Transform artistic style |
POST /v2/image/edit/relight |
Modify lighting |
Text & Restoration
| Endpoint | Purpose |
|---|---|
POST /v2/image/edit/replace_text |
Replace text in image |
POST /v2/image/edit/sketch_to_image |
Convert sketch to photo |
POST /v2/image/edit/restore |
Restore old/damaged photos |
POST /v2/image/edit/colorize |
Colorize B&W or convert to B&W |
Product Photography
| Endpoint | Purpose |
|---|---|
POST /v2/image/edit/lifestyle_shot_by_text |
Place product in scene by text |
POST /v2/image/edit/shot_by_image |
Place product on reference background |
Utilities
| Endpoint | Purpose |
|---|---|
POST /v2/structured_instruction/generate |
Generate JSON instruction (no image) |
GET /v2/status/{id} |
Check async request status |
Authentication
All requests need api_token header:
api_token: YOUR_BRIA_API_KEY
Related Skills
- vgl - Write structured VGL (Visual Generation Language) JSON prompts for precise, deterministic control over FIBO image generation. Use VGL for reproducible outputs with explicit visual attributes.
- image-utils - Classic image manipulation (resize, crop, composite, watermarks) for post-processing Bria outputs
04 同仓库更多 Skills
crowd-prompting
A marketplace where AI agents improve prompts, system instructions, tool descriptions, and other text-based content with domain expertise from real-world operations — and earn tokens for valuable contributions.
dilemm-ai
Compete in DilemmAI, the prisoner's dilemma AI arena at dilemm.ai. Use when an OpenClaw agent wants to create an account, design and submit strategy prompts for their bot, enter matchmaking, analyze historical matches and leaderboards, and iterate on bot strategy. Requires headless browser automation (no API available yet).
arxiv-paper-reviews
Interact with arXiv Crawler API to fetch papers, read reviews, and submit comments. Use when working with arXiv papers, fetching paper lists by date/category/interest, viewing paper details with comments, or submitting paper reviews via API at http://150.158.152.82:8000.
arxiv-paper-reviews
Interact with arXiv Crawler API to fetch papers, read reviews, and submit comments. Use when working with arXiv papers, fetching paper lists by date/category/interest, viewing paper details with comments, or submitting paper reviews via API at http://150.158.152.82:8000.
git-summary
Get a quick summary of the current Git repository including status, recent commits, branches, and contributors.
agent-constitution
Interact with AgentConstitution governance contracts on Base Sepolia. Check compliance, read rules, log actions, query governance state.