Thanks to visit codestin.com
Credit goes to github.com

Skip to content

WebAI2API 是一个基于 Camoufox (Playwright) 的网页版 AI 服务转通用 API 的工具。通过模拟人类操作与 LMArena、Gemini 等网站交互,提供兼容 OpenAI 格式 的接口服务,同时支持 多窗口并发 与 多账号管理(浏览器实例数据隔离)。

License

Notifications You must be signed in to change notification settings

foxhui/WebAI2API

Repository files navigation

WebAI2API

Image

📝 项目简介

WebAI2API 是一个基于 Camoufox (Playwright) 的网页版 AI 服务转通用 API 的工具。通过模拟人类操作与 LMArena、Gemini 等网站交互,提供兼容 OpenAI 格式 的接口服务,同时支持 多窗口并发多账号管理(浏览器实例数据隔离)。

📋 当前支持列表

网站名称 文本支持 图片支持 官方网址
LMArena lmarena.ai
Gemini Enterprise Business business.gemini.google
Nano Banana Free nanobananafree.ai
zAI zai.is
Google Gemini gemini.google.com

✨ 主要特性

  • 🤖 拟人交互:模拟人类打字与鼠标轨迹,通过特征伪装规避自动化检测。
  • 🔄 接口兼容:提供标准 OpenAI 格式接口,支持流式响应与心跳保活。
  • 🚀 并发隔离:支持多窗口并发执行,可配置独立代理,实现多账号浏览器实例级数据隔离。
  • 🖼️ 多个后端:支持 LMArena、Gemini 等多平台,单次请求可处理多张参考图片。
  • 🛡️ 稳定防护:内置任务队列、负载均衡、故障转移、错误重试等基础功能。

🚀 快速部署

本项目支持 源码直接运行(推荐)Docker 容器化部署 两种方式。

因开发者自用时是直接源码运行,Docker未经测试可能更新滞后且可能有问题,如有相关建议可提出,帮助项目完善 Docker 的运行方式

📋 环境要求

  • Node.js: v20.0.0+ (ABI 115+)
  • 操作系统: Windows / Linux / macOS
  • 核心依赖: Camoufox (安装过程中自动获取)

🛠️ 方式一:手动部署

  1. 安装与配置

    # 1. 复制配置文件
    cp config.example.yaml config.yaml
    
    # 2. 安装依赖与初始化环境
    pnpm install
    npm run init  # ⚠️ 需确保网络能连接 GitHub
  2. 启动服务

    npm start -- -login              # 首次运行(进入首个Worker的登录模式)
    npm start -- -login=workerName   # 首次运行(进入指定Worker的登录模式)
    npm start                        # 标准运行

🐳 方式二:Docker 部署

⚠️ 特别说明:首次运行需设置 LOGIN_MODE=true(true可以改为workerName),并通过 VNC 客户端连接 localhost:5900 完成网页登录验证。

Docker CLI

docker run -d --name lmarena-automator \
  -p 3000:3000 -p 5900:5900 \
  -v "$(pwd)/data:/app/data" \
  -e LOGIN_MODE=true \
  --shm-size=2gb \
  foxhui/lmarena-imagen-automator:latest

Docker Compose

# 确保 docker-compose.yml 中 LOGIN_MODE=true
docker-compose up -d

📖 使用方法

⚠️ 首次使用必读

  1. 启动登录模式
    npm start -- -login              # 启动第一个 Worker 进行登录
    npm start -- -login=workerName   # 启动指定 Worker 进行登录
    • Linux 用户使用 npm start -- -xvfb -vnc 进入登录模式且创建虚拟显示器到 VNC。
  2. 完成初始化
    • 手动登录账号。
    • 在输入框发送任意消息,触发并完成 CloudFlare/reCAPTCHA 验证及服务条款同意。
  3. 运行建议:初始化完成后可切换回标准模式,但为降低风控,强烈建议长期保持非无头模式运行

📑 配置文件结构

项目使用 config.yaml 进行配置,核心结构如下:

backend:
  pool:
    strategy: least_busy    # 调度策略
    instances:              # 浏览器实例列表
      - name: "browser_01"  # 实例 ID
        userDataMark: "01"  # 数据目录标识
        proxy:              # 实例级代理
          enable: true
          type: socks5
          host: 127.0.0.1
          port: 1080
        workers:            # 该实例下的 Worker
          - name: "lmarena_01"
            type: lmarena
          - name: "zai_01"
            type: zai_is
          - name: "merge"
            type: merge     # 单标签聚合模式
            mergeTypes: [zai_is, lmarena]
            mergeMonitor: zai_is  # 空闲时挂机监控的后端 (可选,留空则不启用)

说明

  • 每个 instance 代表一个独立的浏览器进程
  • 同一 instance 下的 workers 共享浏览器数据和登录状态
  • 使用 Google OAuth 等统一登录时,只需登录一次即可用于所有 Worker

详细配置请参考 config.example.yaml

接口使用说明

1. OpenAI 兼容接口

Warning

并发限制与流式保活建议 本项目通过模拟真实浏览器操作实现,处理过程根据实际情况时间可能有所变化,当积压的任务超过设置的数量时会直接拒绝非流式模式的请求。

💡 强烈建议开启流式模式:服务器将发送保活心跳包,可无限排队避免超时。

请求端点

POST http://127.0.0.1:3000/v1/chat/completions
📄 查看API请求示例

请求示例(非流式)

curl -X POST http://127.0.0.1:3000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-secret-key" \
  -d '{
    "model": "gemini-3-pro-image-preview",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "generate a cat"
          }
      ]
      }
    ]
  }'

响应格式(非流式)

{
  "id": "chatcmpl-1732374740123",
  "object": "chat.completion",
  "created": 1732374740,
  "model": "gemini-3-pro-image-preview",
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "![generated](data:image/jpeg;base64,/9j/4AAQ...)"
    },
    "finish_reason": "stop"
  }]
}

请求示例(流式 - 推荐)

curl -X POST http://127.0.0.1:3000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-secret-key" \
  -d '{
    "model": "gemini-3-pro-image-preview",
    "stream": true,
    "messages": [
      {
        "role": "user",
        "content": "generate a cat"
      }
    ]
  }'

响应格式(流式)

data: {"id":"chatcmpl-1732374740123","object":"chat.completion.chunk","created":1732374740,"model":"gemini-3-pro-image-preview","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}

: keep-alive
: keep-alive

data: {"id":"chatcmpl-1732374740123","object":"chat.completion.chunk","created":1732374740,"model":"gemini-3-pro-image-preview","choices":[{"index":0,"delta":{"content":"![generated](data:image/jpeg;base64,/9j/4AAQ...)"},"finish_reason":"stop"}]}

data: [DONE]

参数说明

参数 说明
model 必填。指定使用的模型名称(如 gemini-3-pro-image-preview)。
可通过 /v1/models 接口获取支持的模型列表。
stream 推荐开启。流式响应包含心跳保活机制,防止生成耗时过长导致连接超时。

💡 关于流式保活(Heartbeat)

为防止长连接超时,系统提供两种保活模式(可在配置中切换):

  1. Comment 模式(默认/推荐):发送 :keepalive 注释。符合 SSE 标准,兼容性最好。
  2. Content 模式:发送空内容的 data 包。仅用于必须收到 JSON 数据才重置超时的特殊客户端。

2. 获取可用模型列表

请求端点

GET http://127.0.0.1:3000/v1/models
📄 查看API请求示例

请求示例

curl -X GET http://127.0.0.1:3000/v1/models \
  -H "Authorization: Bearer your-secret-key"

响应格式

{
  "object": "list",
  "data": [
    {
      "id": "seedream-4-high-res-fal",
      "object": "model",
      "created": 1732456789,
      "owned_by": "internal_server"
    },
    {
      "id": "lmarena/seedream-4-high-res-fal",
      "object": "model",
      "created": 1732456789,
      "owned_by": "lmarena"
    },
    {
      "id": "gemini-3-pro-image-preview",
      "object": "model",
      "created": 1732456789,
      "owned_by": "internal_server"
    }
  ]
}

3. 获取 Cookies

功能说明:可利用本项目的自动续登功能获取最新 Cookie 给其他工具使用。

请求端点 支持使用 name 参数指定浏览器实例名称,domain 参数指定域名。

GET http://127.0.0.1:3000/v1/cookies (?name=browser_default&domain=lmarena.ai)
📄 查看API请求示例

请求示例

curl -X GET http://127.0.0.1:3000/v1/cookies \
  -H "Authorization: Bearer your-secret-key"

响应格式

{
  "instance": "browser_default",
  "cookies": [
    {
      "name": "_GRECAPTCHA",
      "value": "09ADxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "domain": "www.google.com",
      "path": "/recaptcha",
      "expires": 1780000000,
      "httpOnly": true,
      "secure": true,
      "sameSite": "None"
    },
    {
      "name": "OTZ",
      "value": "8888888_24_24__24_",
      "domain": "accounts.google.com",
      "path": "/",
      "expires": 1760000000,
      "httpOnly": false,
      "secure": true,
      "sameSite": "None"
    }
    .......... more
  ]
}

4. 多模态请求 (图生图/文生图)

功能说明:支持在消息中附带图片进行对话或生成。

限制项 说明
支持格式 PNG, JPEG, GIF, WebP
数量限制 最大为10,但根据不同网站有不同出入
数据格式 必须使用 Base64 Data URL 格式 (如 data:image/jpeg;base64,...)
自动转换 为保证兼容性与传输速度,服务器会自动将所有图片转换为 JPG 格式
📄 查看API请求示例

请求示例

{
  "model": "gemini-3-pro-image-preview",
  "messages": [{
    "role": "user",
    "content": [
      {
        "type": "text",
        "text": "make it more colorful"
      },
      {
        "type": "image_url",
        "image_url": {
          "url": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAA..."
        }
      }
    ]
  }]
}

🔧 常见问题

❌ 请求被拒绝 (429 Too Many Requests)

问题: 并发请求过多

解决方案:

  • 该问题仅存在未开启流式保活时出现
  • 队列限制:1 个并发 + 2 个排队 (总计 3 个)
  • 修改 config.yaml 中的queue.maxQueueSize (不建议)
  • 等待当前任务完成后再提交新任务
❌ reCAPTCHA 验证失败

问题: 返回 recaptcha validation failed

解决方案:

  • 这是 LMArena 的人机验证机制
  • 建议:
    • 降低请求频率
    • 首次使用时手动完成一次验证 (关闭 headless 模式)
    • 使用稳定和纯净的 IP 地址 (可使用 ping0.cc 查询IP地址纯净度)
❌ 图像生成超时

问题: 任务超过 120 秒未完成

解决方案:

  • 启用流式保活确保客户端不会主动断开连接
  • 检查网络连接是否稳定
  • 某些复杂提示词可能需要更长时间
🐧 【Linux 环境下非无头模式运行】

问题: 需要在 Linux 服务器上显示浏览器界面(如手动过验证码)

解决方案:

方法一:X11 转发

  • 推荐使用 WindTerm 等终端工具,开启 X-Server 功能
  • 在 SSH 会话设置中启用 X11 转发 (Forward X11)

方法二:Xvfb + X11VNC (推荐) 使用虚拟显示器运行程序,并通过 VNC 远程查看。

  1. 使用内置命令启动 (简便)

    npm start -- -xvfb -vnc
  2. 手动配置 如果内置命令无法满足需求,可手动分步执行:

    a. 启动虚拟显示器并运行程序 (屏幕号 99 可按需修改):

    xvfb-run --server-num=99 --server-args="-ac -screen 0 1920x1080x24" npm start

    b. 将虚拟显示器映射至 VNC:

    x11vnc -display :99 -localhost -nopw -once -noxdamage -ncache 10 -forever
  3. 建立 SSH 隧道连接 VNC (安全推荐):

    # 在本地终端运行,将服务器 5900 端口映射到本地
    ssh -L 5900:127.0.0.1:5900 root@服务器IP

    随后使用 VNC 客户端连接 127.0.0.1:5900 即可。


📊 设备配置参考

资源 最低配置 推荐配置
CPU 1 核 2 核及以上
内存 1 GB 2 GB 及以上

实测环境表现 (均为单浏览器实例):

  • Oracle 免费机 (1C1G, Debian 12):资源紧张,比较卡顿,仅供尝鲜或轻度使用。
  • 阿里云轻量云 (2C2G, Debian 11):运行流畅稳定,为本项目开发测试基准环境。

📄 许可证和免责声明

本项目采用 MIT License 开源。

免责声明: 本项目仅供学习交流使用。如果因使用该项目造成的任何后果 (包括但不仅限于账号被禁用),作者和该项目均不承担任何责任。请遵守相关网站和服务的使用条款 (ToS),以及相关数据的备份工作。


📋 更新日志

查看完整的版本历史和更新内容,请访问 CHANGELOG.md

🕰️ 历史版本说明

本项目已从 Puppeteer 迁移至 Camoufox,以应对日益复杂的反机器人检测机制。基于 Puppeteer 的旧版本代码已归档至 puppeteer-edition 分支,仅作留存,不再提供更新与维护


感谢 LMArena 、Gemini 等网站提供AI服务! 🎉

About

WebAI2API 是一个基于 Camoufox (Playwright) 的网页版 AI 服务转通用 API 的工具。通过模拟人类操作与 LMArena、Gemini 等网站交互,提供兼容 OpenAI 格式 的接口服务,同时支持 多窗口并发 与 多账号管理(浏览器实例数据隔离)。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Languages