Files
WebAI2API/README.md
T
2025-12-08 01:51:43 +08:00

383 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# LMArenaImagenAutomator
![Image](https://github.com/user-attachments/assets/0a887137-64c3-4919-8ab6-b5cf23e5f751)
## 📝 项目简介
LMArenaImagenAutomator 是一个基于 Playwright + Camoufox 的自动化图像生成工具,通过模拟人类操作与 LMArena、Gemini 等网站交互提供图像生成服务到OpenAI格式的接口。
当前支持的网站:
- LMArena
- Gemini Enterprise Business
- Nano Banana Free
- 未来可能支持更多网站...
### ✨ 主要特性
- 🤖 **拟人操作**:模拟人类打字行为和鼠标移动行为
- 🖼️ **多图支持**:最多支持同时上传 10 张参考图片
- 📊 **队列管理**:支持任务队列,防止请求过载或超时
- 🌐 **代理支持**:支持 HTTP 和 SOCKS5 代理配置
- 🎭 **特征伪装**:尽量伪装成非自动程序控制的浏览器
- 🔗 **流式保活**:复用标准接口的流式模式发送心跳包
---
## 🚀 快速开始
### 系统要求
- **Node.js**: v20.0.0 或更高版本 (需 ABI 115+)
- **操作系统**: Windows / Linux / macOS
- **运行环境**: Camoufox (基于 Firefox 的反指纹检测浏览器)
> **开发环境参考**
> - Windows 10: Node.js v22.20.0
> - Debian 12: Node.js v20.19.0
### 安装步骤
1. **获取项目**
克隆代码仓库或下载源码解压。
2. **准备配置**
复制配置文件模板:
```bash
cp config.example.yaml config.yaml
```
3. **安装依赖**
```bash
# 安装基础依赖
pnpm install
# 初始化环境 (下载浏览器及预编译文件)
# ⚠️ 若无法连接 GitHub,请先在 config.yaml 中配置代理
npm run init
```
4. **启动服务**
```bash
# 登录模式 (首次使用推荐,用于手动登录)
npm start -- -login
# 标准模式
npm start
# Linux创建虚拟显示器到VNC
npm start -- -xvfb -vnc
```
5. **接口测试 (可选)**
```bash
npm test
```
---
## 📖 使用方法
### ⚠️ 首次使用必读
1. **首次启动**
- 请使用 `npm start -- -login` 进入登录模式(关闭无头模式)。
- Linux用户使用 `npm start -- -xvfb -vnc` 进入登录模式且创建虚拟显示器到VNC。
2. **完成初始化**
- 手动登录账号。
- 在输入框发送任意消息,触发并完成 CloudFlare/reCAPTCHA 验证及服务条款同意。
3. **运行建议**:初始化完成后可切换回标准模式,但为降低风控,**强烈建议长期保持非无头模式运行**。
### 接口使用说明
#### 1. OpenAI 兼容接口
> [!WARNING]
> **并发限制与流式保活建议**
> 本项目通过模拟真实浏览器操作实现,**必须串行处理任务**,并发请求将进入队列。为防止排队过久导致客户端超时,当积压任务达到 3 个时将拒绝新请求。
>
> **💡 强烈建议开启流式模式**:服务器将发送保活心跳包,有效避免因排队等待造成的连接超时。
**请求端点**
```
POST http://127.0.0.1:3000/v1/chat/completions
```
<details>
<summary>📄 查看API请求示例</summary>
**请求示例(非流式)**
```bash
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"
}
]
}
]
}'
```
**响应格式(非流式)**
```json
{
"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"
}]
}
```
**请求示例(流式 - 推荐)**
```bash
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]
```
</details>
#### 参数说明
| 参数 | 说明 |
| :--- | :--- |
| **model** | **必填**。指定使用的模型名称(如 `gemini-3-pro-image-preview`)。<br>可通过 `/v1/models` 接口或查看 `lib/backend/models.js` 获取完整列表。 |
| **stream** | **推荐开启**。流式响应包含心跳保活机制,防止生成耗时过长导致连接超时。 |
> **💡 关于流式保活(Heartbeat**
>
> 为防止长连接超时,系统提供两种保活模式(可在配置中切换):
> 1. **Comment 模式(默认/推荐)**:发送 `:keepalive` 注释。符合 SSE 标准,兼容性最好。
> 2. **Content 模式**:发送空内容的 data 包。仅用于必须收到 JSON 数据才重置超时的特殊客户端。
#### 2. 获取可用模型列表
**请求端点**
```
GET http://127.0.0.1:3000/v1/models
```
<details>
<summary>📄 查看API请求示例</summary>
**请求示例**
```bash
curl -X GET http://127.0.0.1:3000/v1/models \
-H "Authorization: Bearer your-secret-key"
```
**响应格式**
```json
{
"object": "list",
"data": [
{
"id": "seedream-4-high-res-fal",
"object": "model",
"created": 1732456789,
"owned_by": "lmarena"
},
{
"id": "gemini-3-pro-image-preview",
"object": "model",
"created": 1732456789,
"owned_by": "lmarena"
}
]
}
```
</details>
#### 3. 多模态请求 (图生图/图生文)
**功能说明**:支持在消息中附带图片进行对话或生成。
| 限制项 | 说明 |
| :--- | :--- |
| **支持格式** | PNG, JPEG, GIF, WebP |
| **数量限制** | 最大为10,但根据不同网站有不同出入 |
| **数据格式** | 必须使用 Base64 Data URL 格式 (如 `data:image/jpeg;base64,...`) |
| **自动转换** | 为保证兼容性与传输速度,服务器会自动将所有图片转换为 JPG 格式 |
<details>
<summary>📄 查看API请求示例</summary>
**请求示例**
```json
{
"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..."
}
}
]
}]
}
```
</details>
---
## 🔧 常见问题
<details>
<summary>❌ 请求被拒绝 (429 Too Many Requests)</summary>
**问题**: 并发请求过多
**解决方案**:
- 该问题仅存在未开启流式保活时出现
- 队列限制:1 个并发 + 2 个排队 (总计 3 个)
- 修改 `config.yaml` 中的`queue.maxQueueSize` (不建议)
- 等待当前任务完成后再提交新任务
</details>
<details>
<summary>❌ reCAPTCHA 验证失败</summary>
**问题**: 返回 `recaptcha validation failed`
**解决方案**:
- 这是 LMArena 的人机验证机制
- 建议:
- 降低请求频率
- 首次使用时手动完成一次验证 (关闭 headless 模式)
- 使用稳定和纯净的 IP 地址 (可使用 [ping0.cc](https://ping0.cc) 查询IP地址纯净度)
</details>
<details>
<summary>❌ 图像生成超时</summary>
**问题**: 任务超过 120 秒未完成
**解决方案**:
- 启用流式保活确保客户端不会主动断开连接
- 检查网络连接是否稳定
- 某些复杂提示词可能需要更长时间
</details>
<details>
<summary>🐧 【Linux 环境下非无头模式运行】</summary>
**问题**: 需要在 Linux 服务器上显示浏览器界面(如手动过验证码)
**解决方案**:
**方法一:X11 转发**
- 推荐使用 WindTerm 等终端工具,开启 X-Server 功能
- 在 SSH 会话设置中启用 X11 转发 (Forward X11)
**方法二:Xvfb + X11VNC (推荐)**
使用虚拟显示器运行程序,并通过 VNC 远程查看。
1. **使用内置命令启动 (简便)**
```bash
npm start -- -xvfb -vnc
```
2. **手动配置**
如果内置命令无法满足需求,可手动分步执行:
a. **启动虚拟显示器并运行程序** (屏幕号 99 可按需修改):
```bash
xvfb-run --server-num=99 --server-args="-ac -screen 0 1920x1080x24" npm start
```
b. **将虚拟显示器映射至 VNC**:
```bash
x11vnc -display :99 -localhost -nopw -once -noxdamage -ncache 10 -forever
```
3. **建立 SSH 隧道连接 VNC** (安全推荐):
```bash
# 在本地终端运行,将服务器 5900 端口映射到本地
ssh -L 5900:127.0.0.1:5900 root@服务器IP
```
随后使用 VNC 客户端连接 `127.0.0.1:5900` 即可。
</details>
---
## 📊 设备配置参考
| 资源 | 最低配置 | 推荐配置 |
| :--- | :--- | :--- |
| **CPU** | 1 核 | 2 核及以上 |
| **内存** | 1 GB | 2 GB 及以上 |
**实测环境表现**
- **Oracle 免费机** (1C1G, Debian 12):资源紧张,偶有卡顿,仅供尝鲜或轻度使用。
- **阿里云轻量云** (2C2G, Debian 11):运行流畅稳定,为本项目开发测试基准环境。
## 📄 许可证和免责声明
本项目采用 [MIT License](LICENSE) 开源。
**免责声明**:
本项目仅供学习交流使用。如果因使用该项目造成的任何后果(包括但不仅限于账号被禁用),作者和该项目均不承担任何责任。请遵守相关网站和服务的使用条款,以及相关数据的备份工作。
---
## 📋 更新日志
查看完整的版本历史和更新内容,请访问 [CHANGELOG.md](CHANGELOG.md)。
## 🕰️ 历史版本说明
本项目已从 Puppeteer 迁移至 Camoufox,以应对日益复杂的反机器人检测机制。基于 Puppeteer 的旧版本代码已归档至 `puppeteer-edition` 分支,仅作留存,**不再提供更新与维护**。
---
**感谢 LMArena 、Gemini 等网站提供图像生成服务!** 🎉