Fpbrowser2api
fpbrowser2api插件框架-支持veo3.1、seedance2.0、omni flash、grok、nana banana、sora2、gpt-image2,QQ交流群:1035463132
Install / Use
npx skills add lakysir/fpbrowser2apiInstalls into whichever agent you are using.
README
FPBrowser2API
一款浏览器插件AI Agent。通过AI智能体分析目标网站的token和公开接口,把各个网站的功能转换成api来调用,目前对Sora、Google Flow/Veo、Seedance、Grok、ChatGPT 图片等站点进行了封装。
- QQ 交流群:1035463132
- 操作视频:<https://www.bilibili.com/video/BV1vL5r65EzE/?vd_source=7fa3ff8dba916183629a05529aa18af2>
- <img width="1920" height="1033" alt="image" src="https://github.com/user-attachments/assets/af0b0ebc-afc0-4de6-8baa-949e541a8974" />
重要声明
- 本项目只供技术研究、学习验证、私有测试环境使用。
- 本项目智能体只调用网站公开的接口,不会入侵任何网站内部接口。
- 请勿用于商业化运营、批量滥用、违反目标站点条款或任何违法违规用途。
- 使用者应自行承担账号、额度、风控、合规和数据安全风险。
- 本项目不保证任何第三方站点长期稳定可用,也不承诺规避风控的成功率。
当前能力
- 浏览器账号保活:每个窗口有独立 Cookie、LocalStorage、UA、代理和浏览器指纹。
- 用户请使用自己的账号登录目标网站,请确保自己拥有账号的权限。
- 后台管理:项目、浏览器服务器、空间、窗口、任务类型、任务队列、日志和用户管理。
- 任务调度:按任务类型绑定窗口,支持窗口池、额度判断、并发控制和任务进度回写。
- 插件执行:通过 CDP 连接真实浏览器窗口,在页面上下文中执行 fetch、上传、轮询和结果提取。
- NewAPI/OpenAI 风格接口:提供
/v1/models、/v1/videos、/v1/videos/{task_id},方便中转站或上层系统接入。
主要适配方向:
| 方向 | 处理器/入口 | 说明 |
|---|---|---|
| Google Flow / Veo | veo_workflow | Veo 3.1、Veo Omni Flash、Nana Banana 2/Pro 图片1k/2k/4k生成 |
| ChatGPT 图片 | gpt_workflow | gpt-image2-1k / 2k / 4k 图片生成 |
| Sora | sora_gen_video | Sora 视频、草稿发布、角色创建、额度等辅助能力 |
| Grok | grok_workflow | Grok 工作流自动化 - 正在进行中....
和纯协议逆向的区别
fpbrowser2api 的核心思路不是复刻第三方站点的所有私有协议,而是把真实浏览器窗口作为任务运行环境。这样做的重点收益是:
| 维度 | 纯协议逆向 | FPBrowser2API | |---|---|---| | 登录态 | 通常依赖 token、cookie 或私有鉴权参数 | 复用浏览器中的真实登录态 | | 环境隔离 | 多账号容易共享运行环境和请求特征 | 每个窗口可独立代理、指纹和存储 | | 维护成本 | 目标站点接口、加密、字段变化后经常需要重写 | 网页可正常使用时,插件和页面上下文逻辑更容易维护 | | 模型扩展 | 新模型往往需要重新分析协议 | 可按站点工作流扩展新的执行器或插件 provider | | 调度管理 | 常见脚本需要自行实现队列、窗口和额度 | 后台统一管理任务类型、窗口池、并发和日志 | | 风险 | 逆向接口,违规违法 | 使用js调用目标网站的公开接口 |
为什么使用指纹浏览器
本框架不是传统裸 HTTP 调用脚本,而是复用真实浏览器环境:
- 每个任务可以绑定一个独立浏览器窗口,隔离 Cookie、LocalStorage、UA、代理和指纹。
- 用户先在指纹浏览器中手动登录目标站点、完成验证或订阅准备。
- 后端通过 RoxyBrowser 暴露的 CDP 地址连接到该窗口。
- 浏览器插件在页面上下文中调用js公开接口进行上传文件、任务黄建、轮询状态、读取结果。
快速启动
cd fpbrowser2api
# 创建虚拟环境
python -m venv venv
# Windows 激活
venv\Scripts\activate
# Linux / macOS 激活
source venv/bin/activate
# 安装依赖
pip install -r requirements.txt
# 启动服务
python main.py
默认监听地址:
http://127.0.0.1:8002
首次默认后台账号:
| 字段 | 值 |
|---|---|
| 用户名 | admin |
| 密码 | admin |
基础配置位于 config/setting.toml,可参考 config/setting_example.toml。服务启动后会把关键配置写入数据库,并支持在管理后台修改,重启后仍生效。
服务脚本
Linux/macOS 或 Git Bash:
cd fpbrowser2api
chmod +x ./fpbrowser2api_service.sh
./fpbrowser2api_service.sh start
./fpbrowser2api_service.sh status
./fpbrowser2api_service.sh restart
./fpbrowser2api_service.sh stop
Windows PowerShell:
cd fpbrowser2api
powershell -ExecutionPolicy Bypass -File .\fpbrowser2api_service.ps1 start
powershell -ExecutionPolicy Bypass -File .\fpbrowser2api_service.ps1 status
powershell -ExecutionPolicy Bypass -File .\fpbrowser2api_service.ps1 restart
powershell -ExecutionPolicy Bypass -File .\fpbrowser2api_service.ps1 stop
管理后台
| 页面 | 路径 |
|---|---|
| 登录页 | /login |
| 系统配置 | /admin/system |
| 项目管理 | /admin/projects |
| 任务类型管理 | /admin/task-types |
| 任务列表 | /admin/tasks |
| 测试页面 | /admin/test |
| 请求日志 | /admin/logs |
| 用户管理 | /admin/users |
RoxyBrowser 配置流程
1. RoxyBrowser 侧准备
- 在线注册:https://roxybrowser.com?code=0416Z62A。
- 创建空间 Workspace、项目和浏览器窗口。
- 为窗口配置代理、账号信息和目标站点登录态。
- 启用 RoxyBrowser 本地 API 或局域网 API。
- 记录 API 地址、API token、
workspaceId和窗口dirId。
2. FPBrowser2API 后台配置
- 在「项目管理」创建本地项目。
- 在「浏览器服务器」填写 RoxyBrowser API:
vendor:roxylan_addr: RoxyBrowser API base URLaccess_key: RoxyBrowser token,可为空
- 在「空间」填写 RoxyBrowser
workspaceId。 - 同步窗口,后台会调用 RoxyBrowser 的
GET /browser/list_v3和GET /browser/detail。 - 创建任务类型并绑定窗口,常见处理器:
veo_workflowdreamina_workflowgpt_workflowsora_gen_videogrok_workflow
运行链路
管理后台配置浏览器服务器
-> FPBrowserClient 调用 RoxyBrowser API
-> 同步 workspaceId / projectIds / dirId
-> 任务类型绑定具体窗口
-> TaskService 选择窗口并控制并发
-> PlaywrightBrowserContext 打开或复用窗口并连接 CDP
-> 站点执行器在页面上下文中 fetch / 上传 / 轮询 / 读取结果
-> 任务结果写回数据库并通过 API 查询
主要代码位置:
| 文件 | 作用 |
|---|---|
| src/api/routes.py | 公开 API:任务提交、任务查询、模型列表 |
| src/services/task_service.py | 任务调度、窗口池、额度和并发控制 |
| src/services/fp_browser_client.py | RoxyBrowser API 适配 |
| src/services/playwright_broswer_context.py | Playwright/CDP 浏览器连接 |
| src/services/veo_workflow_executor.py | Google Flow / Veo / Nana Banana 执行器 |
| src/services/jimeng_task_executor.py | Seedance / 即梦执行器 |
| src/services/gpt_task_executor.py | ChatGPT / gpt-image2 执行器 |
| src/services/sora_task_executor.py | Sora 执行器 |
| browser_extension/providers/*.js | 浏览器插件侧执行逻辑 |
公开 API
所有公开接口都需要请求头:
Authorization: Bearer YOUR_API_KEY
本地默认 base URL:
http://127.0.0.1:8002
模型列表
curl http://127.0.0.1:8002/v1/models \
-H "Authorization: Bearer YOUR_API_KEY"
返回 OpenAI 兼容模型列表,包含 /v1/videos 可用模型和 NewAPI 测试/扣费用模型。
提交视频/图片任务
curl -X POST http://127.0.0.1:8002/v1/videos \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "veo-3-1",
"prompt": "a cinematic drone shot over a futuristic city at sunrise",
"duration": 8,
"aspect_ratio": "16:9"
}'
提交成功后立即返回异步任务:
{
"id": "8c7e4b0e6f3b4b0a9e0a0d8f4f0c1234",
"task_id": "8c7e4b0e6f3b4b0a9e0a0d8f4f0c1234",
"object": "video",
"created_at": 1714200000000,
"status": "queued",
"progress": 0,
"model": "veo-3-1",
"video_url": null,
"metadata": {
"result_urls": []
},
"seconds": "8",
"duration": 8,
"aspect_ratio": "16:9",
"prompt": "a cinematic drone shot over a futuristic city at sunrise"
}
查询任务
curl http://127.0.0.1:8002/v1/videos/8c7e4b0e6f3b4b0a9e0a0d8f4f0c1234 \
-H "Authorization: Bearer YOUR_API_KEY"
处理中:
{
"id": "8c7e4b0e6f3b4b0a9e0a0d8f4f0c1234",
"task_id": "8c7e4b0e6f3b4b0a9e0a0d8f4f0c1234",
"object": "video",
"created_at": 1714200000000,
"status": "processing",
"state": "processing",
"task_status": "processing",
"progress": 45,
"model": "veo-3-1",
"video_url": null,
"metadata": {
"result_urls": []
},
"success": false,
"final": false
}
视频完成:
{
"id": "8c7e4b0e6f3b4b0a9e0a0d8f4f0c1234",
"task_id": "8c7e4b0e6f3b4b0a9e0a0d8f4f0c1234",
"object": "video",
"created_at": 1714200000000,
"status": "completed",
"state": "completed",
"task_status": "completed",
"progress": 100,
"model": "veo-3-1",
"video_url": "https://example.com/generated/video.mp4",
"url": "https://example.com/generated/video.mp4",
"metadata": {
"result_urls": ["https://example.com/generated/video.mp4"]
},
"success": true,
"final": true,
"completed_at": 1714200180000
}
图片完成:
{
"id": "8c7e4b0e6f3b4b0a9e0a0d8f4f0c1234",
"task_id": "8c7e4b0e6f3b4b0a9e0a0d8f4f0c1234",
"object": "video",
"created_at": 1714200000000,
"status": "completed",
"state": "completed",
"task_status": "completed",
"progress": 100,
"model": "gpt-image2-2k",
"video_url": null,
"image_url": "https://example.com/generated/image.png",
"url": "https://example.com/generated/image.png",
"metadata": {
"result_urls": ["https://example.com/generated/image.png"]
},
"success": true,
"final": true,
"completed_at": 1714200180000
}
失败:
{
"id": "8c7e4b0e6f3b4b0a9e0a0d8f4f0c1234",
"task_id": "8c7e4b0e6f3b4b0a9e0a0d8f4f0c1234",
"object": "video",
"created_at": 1714200000000,
"status": "failed",
"state": "failed",
"task_status": "failed",
"progress": 0,
"model": "veo-3-1",
"video_url": null,
"metadata": {
"result_urls": []
},
"success": false,
"final": true,
"error": {
"message": "任务失败原因",
"code": "task_failed"
}
}
状态含义:
| status | 含义 |
|---|---|
| queued | 已入队,等待执行 |
| processing | 生成中,继续轮询 |
| completed | 已完成,读取 video_url / image_url / url |
| failed | 失败,查看 error.message |
/v1/videos 支持模型
以下列表来自 src/api/routes.py 的 OPENAI_COMPAT_VIDEO_MODELS 和模型归一化逻辑。
| 模型 | 输出 | 内部处理器 | 必填/限制 | 说明 |
|---|---|---|---|---|
| seedance-2 | 视频 | dreamina_workflow | 建议 duration: 10 或 15 | Seedance 2.0,支持文生视频、首尾帧、多参考图 |
| seedance-2-fast | 视频 | dreamina_workflow | 建议 duration: 10 或 15 | Seedance 2.0 快速模型 |
| veo-3-1 | 视频 | veo_workflow | 必须 duration: 8 | Veo 3.1 视频生成 |
| veo-omni-flash | 视频 | veo_workflow | 必须 duration: 10 | Omni Flash 文生视频,内部 n_frames=300 |
| veo-omni-flash-video-edit | 视频/编辑 | veo_workflow | 必须 duration: 8 | Omni Flash 视频编辑入口,内部映射为 veo-omni-flash |
| nana-banana-2 | 图片 | veo_workflow | duration 自动设为 1 | 默认 resolution=1k;传 4k 会降为 1k,如需 4K 用专用模型 |
| nana-banana-pro | 图片 | veo_workflow | duration 自动设为 1 | 默认 resolution=1k;传 4k 会降为 1k,如需 4K 用专用模型 |
| nana-banana-2-4k | 图片 | veo_workflow | duration 自动设为 1 | Nana Banana 2 的 4K 图片入口 |
| nana-banana-pro-4k | 图片 | veo_workflow | duration 自动设为 1 | Nana Banana Pro 的 4K 图片入口 |
| gpt-image2-1k | 图片 | gpt_workflow | duration 可省略;如传只能为 1 | ChatGPT gpt-image-2 1K 图片 |
| gpt-image2-2k | 图片 | gpt_workflow | duration 可省略;如传只能为 1 | ChatGPT gpt-image-2 2K 图片 |
| gpt-image2-4k | 图片 | gpt_workflow | duration 可省略;如传只能为 1 | ChatGPT gpt-image-2 4K 图片 |
额外模型:
| 模型 | 接口 | 说明 |
|---|---|---|
| fpbrowser-use | /v1/chat/completions | NewAPI 测试/按次扣费用 no-op 模型,不创建真实任务 |
请求字段
CreateVideoRequest 允许额外字段透传,所以除下表字段外,也可以传入执行器支持的高级参数。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 是 | 见上方模型表 |
| prompt | string | 是 | 生成提示词 |
| duration | integer | 视频通常必填 | veo-3-1=8,veo-omni-flash=10,veo-omni-flash-video-edit=8,图片模型只能为 1 或省略 |
| aspect_ratio | string | 否 | 常用 16:9、9:16、1:1、4:3、3:4 |
| resolution | string | 否 | S
Related Skills
node-connect
385.6kDiagnose OpenClaw Android, iOS, or macOS node pairing, QR/setup code, route, auth, and connection failures.
blender-python-addon
40.5kBlender Python add-on rules for operators, panels, properties, registration, testing, and API-safe scripting
flutter-development-guidelines-cursorrules-prompt-file
40.5kCursor rules for Flutter development with MVVM architecture, Riverpod state management, Material widgets, and Dart style guidelines.
commit-push-pr
140.7kCommit, push, and open a PR
