Veo / Gemini 视频水印
精确去除
基于反向 alpha 混合的数学还原,不是生成式修补 —— 不猜测像素、不损失画质。 提供 HTTP API 与控制台,按视频时长计费。
- 0.01 元 / 秒按视频时长计费
- 失败全额退款处理失败或超时不计费
- 10 路并行函数计算弹性算力
定价
按视频时长计费,不足 1 秒按 1 秒计
- 10 秒短视频¥0.10
- 30 秒视频¥0.30
- 1 分钟视频¥0.60
- 5 分钟视频¥3.00
新用户注册即赠 1 元 体验金额。余额通过微信扫码充值,实时到账。 任务失败或处理超时(10 分钟)会 全额退回 已扣金额。
对接文档
接口基地址 https://water-removal.bo.run/api,请求与响应均为 JSON(UTF-8)。
1. 鉴权
在 控制台 的「API Key」页面创建密钥(形如 wr_live_…),
每个请求都要带上。明文只在创建时显示一次,请妥善保存。
Authorization: Bearer wr_live_xxxxxxxxxxxx
也支持用 X-API-Key: wr_live_… 请求头传递。
2. 提交去水印任务
POST /api/v1/watermark/remove
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
type | string | 否 | 水印类型,目前仅支持 gemini(默认值) |
sourceUrl | string | 是 | 待处理视频的公开可下载地址(http/https),最长 5 分钟 |
curl -X POST https://water-removal.bo.run/api/v1/watermark/remove \
-H "Authorization: Bearer $WR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "gemini",
"sourceUrl": "https://example.com/video.mp4"
}'
成功返回 202 Accepted,费用在此刻已从余额预扣:
{
"taskId": "task_9f2c1a7b3e5d4c8a0b1e2f3a",
"status": "queued",
"type": "gemini",
"durationSeconds": 32.5,
"chargedYuan": "0.33",
"createdAt": "2026-07-28T10:20:30+08:00"
}
3. 查询任务
GET /api/v1/watermark/task/{taskId}
curl https://water-removal.bo.run/api/v1/watermark/task/task_9f2c1a7b3e5d4c8a0b1e2f3a \
-H "Authorization: Bearer $WR_API_KEY"
status 有四种取值:
| status | 含义 |
|---|---|
queued | 排队中,等待算力 |
processing | 处理中 |
done | 已完成,resultUrl 为结果视频地址 |
failed | 失败或超时,费用已全额退回 |
处理完成时:
{
"taskId": "task_9f2c1a7b3e5d4c8a0b1e2f3a",
"status": "done",
"durationSeconds": 32.5,
"chargedYuan": "0.33",
"resultUrl": "https://w-r-static.oss-cn-hangzhou.aliyuncs.com/video/…",
"createdAt": "2026-07-28T10:20:30+08:00",
"finishedAt": "2026-07-28T10:21:14+08:00"
}
结果链接有效期 24 小时,过期后自动清理,请及时下载转存。
失败时:
{
"taskId": "task_9f2c1a7b3e5d4c8a0b1e2f3a",
"status": "failed",
"errorCode": "no_watermark_detected",
"errorMessage": "未检测到 Gemini / Veo 水印,请确认视频来源;本次不计费",
"refunded": true,
"chargedYuan": "0.33"
}
4. 查询余额
GET /api/v1/account/balance
{ "balanceMicro": 985000, "frozenMicro": 330000 }
金额单位是「微元」:1 元 = 1 000 000 微元。这样按秒计费的小数金额不会有浮点误差。
frozenMicro 是进行中任务的预扣金额,任务失败会退回可用余额。
5. 建议的轮询方式
提交后每 3–5 秒查询一次即可。单个用户的调用频率上限是 60 次 / 分钟,
超出会返回 429 并带 Retry-After 响应头。
import time, requests
BASE = "https://water-removal.bo.run/api/v1"
H = {"Authorization": f"Bearer {API_KEY}"}
task = requests.post(f"{BASE}/watermark/remove", headers=H, json={
"type": "gemini",
"sourceUrl": "https://example.com/video.mp4",
}).json()
while True:
r = requests.get(f"{BASE}/watermark/task/{task['taskId']}", headers=H).json()
if r["status"] == "done":
print("下载地址:", r["resultUrl"])
break
if r["status"] == "failed":
print("处理失败:", r["errorMessage"], "(费用已退回)")
break
time.sleep(5)
6. 错误码
出错时返回对应的 HTTP 状态码,响应体格式统一:
{ "error": { "code": "insufficient_funds", "message": "余额不足,请先充值" } }
| HTTP | code | 说明 |
|---|---|---|
| 400 | invalid_request | 参数有误,或视频地址无法读取 |
| 401 | unauthorized | API Key 缺失或无效 |
| 402 | insufficient_funds | 余额不足,请先充值 |
| 404 | not_found | 任务不存在 |
| 429 | rate_limited | 超过 60 次/分钟的频率上限 |
| 500 | internal_error | 服务端异常,请稍后重试 |
任务失败时的 errorCode:
| errorCode | 说明 |
|---|---|
no_watermark_detected | 视频里没找到 Gemini / Veo 水印 |
process_failed | 处理过程出错 |
timeout | 超过 10 分钟未完成 |
dispatch_failed | 算力调度失败 |
以上情况均会 全额退回 已扣金额,refunded 字段为 true。
7. 使用限制
- 单个视频最长 5 分钟,体积上限 2 GB
- 调用频率 60 次 / 分钟(按账号计)
- 同时处理 10 路,超出的任务排队等待
- 单任务超时 10 分钟(含排队时间)
- 结果链接有效期 24 小时
- 仅能去除可见水印,无法去除 Google SynthID 隐形水印