HiAPI
博客

教程

如何使用 Bria Eraser API:curl、Python 和一次可运行的请求

2026年11月3日
如何使用 Bria Eraser API:curl、Python 和一次可运行的请求

bria-eraser 可从照片中移除对象。你发送图片和黑白遮罩,它就用匹配的背景填充遮罩区域。没有 prompt 字段。本指南展示一次完整运行的请求、执行它的 Python 代码,以及决定你自己的遮罩能否奏效的细节。你需要从仪表盘获取 HiAPI key。

最小请求(curl)

该模型使用统一的异步端点 POST /v1/tasks。下面两个 URL 都是公开的,并且在撰写本文时均可访问:

curl -X POST "https://api.hiapi.ai/v1/tasks" \
  -H "Authorization: Bearer $HIAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "bria-eraser",
    "input": {
      "image_url": "https://dev-static.hiapi.ai/model-onboarding/bria-eraser/2026/10/21/1792546025379-46c31ddb2b52110d-e1-street-src.png",
      "mask_url": "https://dev-static.hiapi.ai/model-onboarding/bria-eraser/2026/10/21/1792546025861-e5d2a17ae1d12d41-e1-street-mask.png",
      "mask_type": "manual"
    }
  }'

该调用会立即返回一个任务 id,而不是图片:

{"code":200,"data":{"taskId":"tk-hiapi-01M5K80RFJN3J788MMJT7YDVNB"},"message":"success"}

轮询 GET /v1/tasks/<taskId>,直到 data.status 为 success,然后读取 data.output[0].url。

Python:提交、轮询、下载

# pip install requests; export HIAPI_KEY=your-key first
import os, time, requests

API = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": f"Bearer {os.environ['HIAPI_KEY']}"}

def erase(image_url: str, mask_url: str, out_path: str) -> str:
    r = requests.post(API, headers=HEADERS, timeout=30, json={
        "model": "bria-eraser",
        "input": {"image_url": image_url, "mask_url": mask_url, "mask_type": "manual"},
    })
    r.raise_for_status()
    task_id = r.json()["data"]["taskId"]

    for _ in range(60):
        time.sleep(3)
        try:
            d = requests.get(f"{API}/{task_id}", headers=HEADERS, timeout=30).json()["data"]
        except requests.RequestException:
            continue  # transient network error: poll the SAME task id again
        if d["status"] == "success":
            img = requests.get(d["output"][0]["url"], timeout=60)
            img.raise_for_status()
            with open(out_path, "wb") as f:
                f.write(img.content)
            return task_id
        if d["status"] == "fail":
            raise RuntimeError(f"task {task_id} failed: {d}")
    raise TimeoutError(task_id)

保留任务 id。如果某次轮询失败,就再次轮询该 id。不要重新提交,因为每次提交都是一个单独计费的任务。

请求字段

字段 是否必填 说明
input.image_url 是 公开的 http/https URL。JPEG、PNG 或 WEBP。
input.mask_url 是 与源图宽高比相同的黑白图片。白色会被擦除,黑色会保留。
input.mask_type 否 manual(默认)用于画笔绘制的遮罩,automatic 用于分割工具生成的遮罩。
input.preserve_alpha 否 默认 false。设为 true 可保留带 alpha 通道输入的透明度。

生产环境:使用回调

轮询适合测试。对于服务,传入顶层 callback,让 HiAPI 在任务完成时通知你:

{
  "model": "bria-eraser",
  "input": { "image_url": "...", "mask_url": "..." },
  "callback": { "url": "https://your-domain.com/hiapi/callback", "when": "final" }
}

保留轮询作为兜底,以防回调丢失。输出 URL 会过期,因此任务成功后应尽快把文件复制到你自己的存储。

我实际运行和看到的结果

我在撰写当天运行了一次 curl 部分的请求,并轮询到它完成。

  • 状态顺序:handling → archiving → success。archiving 出现在工作完成之后、output 出现之前。把它当作“尚未完成”,继续轮询。
  • 时间:任务从创建到完成用了 16 秒。output URL 在此之后几秒出现。
  • 输出:temp.hiapi.ai 上的一个 PNG,1360 × 768,带 alpha 通道。这与源图尺寸相同,符合文档中保留原始分辨率的说明。
  • 计费:我查看时,公开定价数据中该模型的价格为每张图 $0.0575。当前价格请见定价。
  • 验证错误:我故意测试发送了 mask_type: "bogus"。API 以 HTTP 400 拒绝:
{"code":400,"data":null,"error_code":"INVALID_REQUEST","message":"invalid input: mask_type: value must be one of 'manual', 'automatic'"}

我只在一张图片上检查了一个请求。我没有测试其他遮罩样式、超大图片,或宽高比与图片不一致的遮罩。下面关于这些情况的说明来自模型文档,而非我的测试。

遮罩提示(来自文档)

  • 稍微涂出对象边缘一点。紧贴轮廓的遮罩往往会在原对象周围留下光晕。
  • 遮罩保持与照片相同的宽高比。文档要求如此,但未说明否则会怎样。
  • 只有来自分割或抠图工具的遮罩才使用 automatic。画笔遮罩使用 manual。

我应该读哪个页面?

本指南介绍使用专用端点进行基于遮罩的移除。对于使用通用图生图模型的提示词驱动编辑,请参阅图像修复和对象移除。如果要移除整个背景而不是单个对象,请参阅背景移除指南。模型页面位于 bria-eraser,字段参考见 API 文档。

常见问题

bria-eraser 需要提示词吗?

不需要。文档说明无需提示词,我运行的请求只包含图片、遮罩和 mask_type。

遮罩中哪种颜色会被移除?

白色会被擦除,黑色会保留。

输出会比输入小吗?

在我的运行中,输出为 1360 × 768,与源图完全相同。

我应该轮询还是使用回调?

测试时轮询。生产环境使用 callback.url 和 when: "final",并以轮询作为兜底。

立即开始构建持久 AI 产物

获取 API 密钥,通过一个基于任务(task)的 API 调用图像、视频和音频模型。

阅读 API 文档