{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Bria Client","siteUrl":"https://docs.bria.ai","llmstxt":{"hide":false,"title":"Bria AI API","description":"bria.ai helps you build products and workflows by delivering controllable, easy-to-integrate and safe generative visual AI capabilities.","details":{"path":"_llmstxt-details.md"},"sections":[{"title":"Integrations","description":"MCP server, Claude Skill, and Python SDK.","includeFiles":["MCP-authentication.md","integration-methods/bria-skill.md","integration-methods/python-sdk.md"],"excludeFiles":[]},{"title":"Getting Started","description":"Authentication, API overview, and platform concepts.","includeFiles":["index.md","products-overview.md","safety.md","vgl.md","best-practices-overview.md"],"excludeFiles":[]},{"title":"Image Generation","description":"Generate images using text prompts or structured JSON via FIBO models.","includeFiles":["image-generation.md","image-generation.yaml"],"excludeFiles":[]},{"title":"Image Editing","description":"Edit, transform, and enhance images with 20+ specialized endpoints.","includeFiles":["image-editing.md","image-editing.yaml"],"excludeFiles":[]},{"title":"Video Editing","description":"Remove backgrounds (REST async or real-time streaming), erase objects, upscale, and generate masks for video.","includeFiles":["video-editing.md","local-video-upload-service.md","video-editing.yaml","streaming-rmbg.md"],"excludeFiles":[]},{"title":"Product Shot Editing","description":"SKU packshots, lifestyle scenes, and automotive product imagery.","includeFiles":["product-shot-editing.md","product-shot-editing.yaml"],"excludeFiles":[]},{"title":"Optional","description":"Tailored generation, ads, image onboarding, and attribution.","includeFiles":["tailored-generation.md","campaign-generation.md","image-onboarding.md","bria-attribution-service.md","ad-generation.md","tailored-generation.yaml","campaign-generation.yaml","image-onboarding.yaml","bria-attribution-service.yaml","ad-generation.yaml"],"excludeFiles":[]}],"excludeFiles":["_llmstxt-details.md","_partials.md","CHANGELOG.md"]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"bria-client","__idx":0},"children":["Bria Client"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A Python client library for the Bria Engine API, designed to make integrating powerful image and video editing capabilities into your applications seamless and straightforward. The library provides both synchronous and asynchronous clients with flexible request execution modes."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"table-of-contents","__idx":1},"children":["Table of Contents"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#installation"},"children":["Installation"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#quick-start"},"children":["Quick Start"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#usage-guide"},"children":["Usage Guide"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#two-client-types"},"children":["Two Client Types"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#three-request-methods"},"children":["Three Request Methods"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#payload-handling"},"children":["Payload Handling"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#webhooks"},"children":["Webhooks"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#video-upload"},"children":["Video Upload"]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#examples"},"children":["Examples"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#development-setup"},"children":["Development Setup"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#contributing"},"children":["Contributing"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#support"},"children":["Support"]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"installation","__idx":2},"children":["Installation"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"pip install bria-client\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"quick-start","__idx":3},"children":["Quick Start"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Set your API key:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"export BRIA_API_TOKEN=\"your-api-key-here\"\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Basic example:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"from bria_client import BriaSyncClient\nfrom bria_client.toolkit.image import Image\n\nclient = BriaSyncClient()\n\n# Process an image and get the result immediately\nresponse = client.run(\n    endpoint=\"image/edit/remove_background\",\n    payload={\"image\": Image(\"https://example.com/image.jpg\").as_bria_api_input}\n)\n\nprint(response.result)\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"usage-guide","__idx":4},"children":["Usage Guide"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"two-client-types","__idx":5},"children":["Two Client Types"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Choose the client that fits your use case:"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BriaSyncClient"]}]}," - For simple scripts and traditional applications"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"from bria_client import BriaSyncClient\n\nclient = BriaSyncClient()\nresponse = client.run(endpoint=\"image/edit/remove_background\", payload={...})\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BriaAsyncClient"]}]}," - For async applications and concurrent processing"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"from bria_client import BriaAsyncClient\n\nasync def process_images():\n    async with BriaAsyncClient() as client:\n        response = await client.run(endpoint=\"image/edit/remove_background\", payload={...})\n    return response\n\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"three-request-methods","__idx":6},"children":["Three Request Methods"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":[".run()"]}]}," - Wait for immediate result"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"# Good for quick operations\nresponse = client.run(endpoint=\"image/edit/remove_background\", payload={...})\nprint(response.result)\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":[".submit()"]}]}," - Submit and continue working"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"# Good for long operations - returns immediately with request_id\nresponse = client.submit(endpoint=\"video/segment/mask_by_prompt\", payload={...})\nprint(f\"Submitted: {response.request_id}\")\n# Do other work...\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":[".poll()"]}]}," - Wait for a submitted request to complete"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"# Check request status until done\nresponse = client.submit(endpoint=\"...\", payload={...})\nfinal = client.poll(response, interval=2, timeout=300)\nprint(final.result)\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"payload-handling","__idx":7},"children":["Payload Handling"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The client automatically strips ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["None"]}," values from payloads before sending requests. This means you can safely include optional parameters without worrying about sending ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," values to the API:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"response = client.run(\n    endpoint=\"image/edit/remove_background\",\n    payload={\n        \"image\": Image(\"https://example.com/image.jpg\").as_bria_api_input,\n        \"bg_color\": None,  # Will be omitted from the request\n    }\n)\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"webhooks","__idx":8},"children":["Webhooks"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Instead of polling, you can ask Bria to POST the result to your server as soon as a job completes. Pass ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["webhook_url"]}," to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":[".submit()"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"response = client.submit(\n    endpoint=\"video/edit/remove_background\",\n    payload={\"video\": file_url},\n    webhook_url=\"https://your-server.example.com/webhook\",\n)\nprint(f\"Submitted: {response.request_id}\")\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Bria signs every delivery with HMAC-SHA256. Verify the signature before processing the payload:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"from bria_client.toolkit import verify_webhook_signature\n\n# In your webhook receiver (e.g. a FastAPI POST handler):\nbody = await request.body()\nis_valid = verify_webhook_signature(\n    payload=body,\n    webhook_id=request.headers[\"bria-webhook-id\"],\n    timestamp=request.headers[\"bria-webhook-timestamp\"],\n    signature_header=request.headers[\"bria-webhook-signature\"],\n    api_token=os.environ[\"BRIA_API_TOKEN\"],\n)\nif not is_valid:\n    raise HTTPException(status_code=401, detail=\"Invalid webhook signature\")\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Best practices:"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Respond with a 2xx status within ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["10 seconds"]}," — defer any heavy processing to a background task."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Always verify the signature before acting on the payload."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/Bria-AI/bria-client/tree/main/examples/webhook_handler.py"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["examples/webhook_handler.py"]}]}," for a complete FastAPI receiver with optional ngrok tunnel for local development."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"video-upload","__idx":9},"children":["Video Upload"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Video endpoints expect a hosted URL. If you have a local file, use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client.upload()"]}," to get one via a presigned upload:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"file_url = client.upload(\"path/to/video.mp4\", media_type=\"video/mp4\")\n\nresponse = client.submit(\n    endpoint=\"video/edit/remove_background\",\n    payload={\"video\": file_url},\n)\n\nresult = client.poll(response, timeout=300)\nprint(result.result)\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The returned ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["file_url"]}," is valid for approximately 24 hours."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/Bria-AI/bria-client/tree/main/examples/video_upload.py"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["examples/video_upload.py"]}]}," for the full example."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"examples","__idx":10},"children":["Examples"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"basic-usage","__idx":11},"children":["Basic Usage"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"from bria_client import BriaSyncClient\nfrom bria_client.toolkit.image import Image\n\nclient = BriaSyncClient()\n\nresponse = client.run(\n    endpoint=\"image/edit/remove_background\",\n    payload={\"image\": Image(\"https://example.com/image.jpg\").as_bria_api_input}\n)\n\nprint(response.result)\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"batch-processing","__idx":12},"children":["Batch Processing"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"from bria_client import BriaSyncClient\nfrom bria_client.toolkit.image import Image\n\nclient = BriaSyncClient()\nimages = [\"image1.jpg\", \"image2.jpg\", \"image3.jpg\"]\n\n# Submit all requests\nresponses = [\n    client.submit(\n        endpoint=\"image/edit/remove_background\",\n        payload={\"image\": Image(img).as_bria_api_input}\n    )\n    for img in images\n]\n\n# Wait for all to complete\nresults = [client.poll(r, timeout=120) for r in responses]\nprint(f\"Processed {len(results)} images\")\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"async-processing","__idx":13},"children":["Async Processing"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"import asyncio\nfrom bria_client import BriaAsyncClient\nfrom bria_client.toolkit.image import Image\n\nasync def process_images():\n    async with BriaAsyncClient() as client:\n        tasks = [\n            client.run(\n                endpoint=\"image/edit/remove_background\",\n                payload={\"image\": Image(url).as_bria_api_input}\n            )\n            for url in [\"image1.jpg\", \"image2.jpg\", \"image3.jpg\"]\n        ]\n        return await asyncio.gather(*tasks)\n\nresults = asyncio.run(process_images())\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"error-handling","__idx":14},"children":["Error Handling"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"try:\n    response = client.run(endpoint=\"...\", payload={...}, raise_for_status=True)\n    print(response.result)\nexcept TimeoutError:\n    print(\"Request timed out\")\nexcept Exception as e:\n    print(f\"Error: {e}\")\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"development-setup","__idx":15},"children":["Development Setup"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"prerequisites","__idx":16},"children":["Prerequisites"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Python 3.10+"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://docs.astral.sh/uv/"},"children":["uv"]}," package manager"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"installation-1","__idx":17},"children":["Installation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Install development and test dependencies:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"uv sync --group dev\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"pre-commit-hooks","__idx":18},"children":["Pre-commit Hooks"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This project uses pre-commit hooks to ensure code quality. Install them with:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"pre-commit install\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The following hooks run automatically on each commit:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Hook"},"children":["Hook"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["prettier"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Formats YAML and JSON files"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ruff-format"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Formats Python code"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ruff"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Lints Python code with auto-fix"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pyright"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Type checking for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["src/"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["tests/"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pyright-examples"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Type checking for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["examples/"]}," (requires ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[examples]"]}," extra)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["uv-lock-check"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Ensures ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["uv.lock"]}," is in sync with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pyproject.toml"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To run all hooks manually:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"pre-commit run --all-files\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"contributing","__idx":19},"children":["Contributing"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Contributions are welcome! Please follow the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#development-setup"},"children":["Development Setup"]}," instructions first, then:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fork the repository"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Create a feature branch: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["git checkout -b feature-name"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Make your changes and add tests"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Run tests: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["uv run pytest"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Submit a pull request"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Guidelines:"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Add type hints to new code"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Include tests for new features"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Follow existing code style"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Update documentation as needed"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Found a bug?"]}," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/Bria-AI/bria-client/issues"},"children":["Open an issue"]}," with:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Description of the problem"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Steps to reproduce"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Python version and environment"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"support","__idx":20},"children":["Support"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Documentation"]},": ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://docs.bria.ai"},"children":["docs.bria.ai"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Issues"]},": ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/Bria-AI/bria-client/issues"},"children":["GitHub Issues"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Examples"]},": See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/Bria-AI/bria-client/tree/main/examples"},"children":["examples/"]}," directory"]}]}]},"headings":[{"value":"Bria Client","id":"bria-client","depth":1},{"value":"Table of Contents","id":"table-of-contents","depth":2},{"value":"Installation","id":"installation","depth":2},{"value":"Quick Start","id":"quick-start","depth":2},{"value":"Usage Guide","id":"usage-guide","depth":2},{"value":"Two Client Types","id":"two-client-types","depth":3},{"value":"Three Request Methods","id":"three-request-methods","depth":3},{"value":"Payload Handling","id":"payload-handling","depth":3},{"value":"Webhooks","id":"webhooks","depth":3},{"value":"Video Upload","id":"video-upload","depth":3},{"value":"Examples","id":"examples","depth":2},{"value":"Basic Usage","id":"basic-usage","depth":3},{"value":"Batch Processing","id":"batch-processing","depth":3},{"value":"Async Processing","id":"async-processing","depth":3},{"value":"Error Handling","id":"error-handling","depth":3},{"value":"Development Setup","id":"development-setup","depth":2},{"value":"Prerequisites","id":"prerequisites","depth":3},{"value":"Installation","id":"installation-1","depth":3},{"value":"Pre-commit Hooks","id":"pre-commit-hooks","depth":3},{"value":"Contributing","id":"contributing","depth":2},{"value":"Support","id":"support","depth":2}],"frontmatter":{"seo":{"title":"Bria Client"}},"lastModified":"2026-05-31T14:43:51.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/integration-methods/python-sdk","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}