Mag1cFall/AIStudio2API

▲ 35 stars today★ 355⑂ 100

将AI Studio Playground和Build反代成API | AI Studio to OpenAI, Anthropic & Gemini Compatible API

About Mag1cFall/AIStudio2API

Mag1cFall/AIStudio2API is an open-source project on GitHub, mainly written in Go. 将AI Studio Playground和Build反代成API | AI Studio to OpenAI, Anthropic & Gemini Compatible API It currently holds 355 stars and 100 forks with 0 open issues, and was last pushed on an unknown date (repository created unknown).

Project Overview

AI Homed tracks it on the Today's Trending board, currently at rank #47 with 35 new stars today.

GitHub Repository Details

Repository Mag1cFall/AIStudio2API · default branch - · size 0 KB · watchers 0 · source: GitHub REST API and repository README

README

AI Studio to OpenAI, Anthropic & Gemini Compatible API

中文  |  English

一个基于 Go 的高性能代理服务
将 Google AI Studio 网页协议转换为 OpenAI、Responses、Anthropic 和 Gemini 兼容 API

Playground + Build 双额度通道  •  Build 代码助手对话通道  •  多账户高并发
Camoufox 与纯 Go 双 WAA 后端  •  Claude Code、Codex 等 agent 客户端  •  Nano Banana、Veo、TTS 与 Omni

---

核心能力

特性

系统要求

安装步骤

方式一:Windows 一键启动(推荐)

从 Releases 下载 windows-amd64.zip 发布包,解压后运行 start.bat。发布包已包含管理界面,可直接运行。

从源码启动时:

git clone https://github.com/Mag1cFall/AIStudio2API.git
cd AIStudio2API
copy .env.example .env

然后双击运行 start.bat。Windows PowerShell 也可以直接执行:

.\start.bat

已有 aistudio2api.exe 时脚本立即运行;源码目录缺少可执行文件时,脚本自动安装前端依赖并构建前端与 Go 程序。

首次启动会自动下载当前平台的 Camoufox 到 runtime/camoufox/,下载经 PROXY 的第一个代理发出,未设置时使用系统代理;下载中断后,下次启动从已下载的部分继续。也可以通过环境变量 CAMOUFOX_PATH 指定已有可执行文件。

方式二:Linux 与 macOS 源码构建

1. 安装依赖

2. 克隆项目

git clone https://github.com/Mag1cFall/AIStudio2API.git
cd AIStudio2API
cp .env.example .env

3. 构建并运行

cd web
npm ci
npm run build
cd ..
go build -o aistudio2api ./cmd/aistudio2api
chmod +x ./aistudio2api
./aistudio2api

Linux 与 macOS 首次运行同样会自动准备对应平台的 Camoufox。

方式三:Docker

mkdir aistudio2api && cd aistudio2api
curl -fsSLO https://raw.githubusercontent.com/Mag1cFall/AIStudio2API/main/docker-compose.yml
mkdir data
cat > data/.env <<'EOF'
PROXY_API_KEY=
ADMIN_AUTH_ENABLED=true
ADMIN_PASSWORD=<管理密码>
EOF
docker compose up -d

镜像支持 linux/amd64 与 linux/arm64,服务在容器内监听 0.0.0.0:2048。data/ 保存 .env、auth/ 与 runtime/,Camoufox 后端首次启动时把 Camoufox 下载到 data/runtime/camoufox/;迁移已有安装时把这三项复制到 data/。容器以 root 运行,服务写入 data/ 的文件属于 root,Linux 宿主机上用 sudo 编辑。

快速开始

首次使用(需要认证)

1. 准备首个账户:

Windows 可以导入本机 Chrome 账户:

   start.bat setup
   

Linux 与 macOS 使用隔离 Camoufox 登录:

   ./aistudio2api setup --login
   

登录完成后会从 AI Studio 页面读取 Google 邮箱,并为账户授权 Google Drive。账户保存到 .env 中 AISTUDIO_AUTH_STATES 指向的目录;语言和时区默认读取当前电脑设置,也可以通过 --locale、--timezone 指定。

2. 启动图形界面:

3. 添加其他账户: 4. 启动 API: 账户操作随状态显示:

| 账户状态 | 可用操作 | | --- | --- | | ready | 编辑、停用、验证、删除 | | disabled | 编辑、启用、删除 | | auth_required | 编辑、停用、重新登录、验证、删除 |

“重新登录”只在账户状态为 auth_required 时显示。

日常使用(已有认证)

1. Windows 双击 start.bat;Linux 与 macOS 运行 ./aistudio2api 2. 点击“启动服务”启用 API;设置 AUTO_START=true 后,程序启动时自动启动服务 3. 点击“停止服务”会取消正在进行的启动或活动请求并关闭 WAA Worker,管理页面与日志保持可用 4. 再次点击“启动服务”即可恢复 API

停止后再次启动会读取最新 .env 生成服务配置,账户选择策略与 Worker 容量保存后立即生效;管理页面地址和 PROXY_API_KEY 在管理进程重启后生效。

在启动窗口按 Ctrl+C 或关闭窗口会退出整个管理进程。关闭浏览器标签页不会停止管理进程。

快速启动

start.bat:启动管理进程并自动打开网页。

start.bat -open-ui=false:启动管理进程但不自动打开网页。

start.bat setup:扫描本机 Chrome 账户;也可使用 --email 或 --profile 选择明确的 Chrome 账户。隔离登录使用 start.bat setup --login;文件导入使用 start.bat setup --storage-state 。

start.bat setup --remote https://<远程实例>:向远程实例添加账户。先在远程实例的账户页点击“远程添加”取得配对令牌,再在能登录 Google 的电脑上运行该命令并粘贴令牌;可与 --login 等参数组合。

API 使用

OpenAI 兼容接口

服务启动后,可以直接使用 OpenAI Chat Completions:

curl http://127.0.0.1:2048/v1/chat/completions \
  -H "Authorization: Bearer 123" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.7-flash",
    "messages": [{"role": "user", "content": "Hello, world!"}],
    "stream": true
  }'

客户端配置示例

| 协议 | Base URL | API key | | --- | --- | --- | | OpenAI Chat / Responses | http://127.0.0.1:2048/v1 | .env 中的 PROXY_API_KEY | | Anthropic Messages | http://127.0.0.1:2048 | .env 中的 PROXY_API_KEY | | Gemini | http://127.0.0.1:2048 | .env 中的 PROXY_API_KEY |

模型名称从 GET /v1/models 或 GET /v1beta/models 读取。PROXY_API_KEY 为空时,浏览器中只有本机页面可以直接调用接口;网页版客户端和部分桌面客户端需要设置 PROXY_API_KEY。多个 key 用逗号分隔,任一 key 都可调用。

以 Cherry Studio 为例:

1. 打开 Cherry Studio 设置 2. 新增 OpenAI 兼容提供商 3. API 主机地址填写 http://127.0.0.1:2048/v1 4. API 密钥填写 .env 中的 PROXY_API_KEY 5. 从 /v1/models 获取模型,或手动添加 gemini-3.6-flash、gemini-3.7-flash

Claude Code 使用 Anthropic 接口,子 agent 按 opus、sonnet、haiku 档位选择模型,以下变量把它们映射到 AI Studio 模型;WebSearch 由 Google Search 执行:

$env:ANTHROPIC_BASE_URL = "http://127.0.0.1:2048"
$env:ANTHROPIC_API_KEY = "<PROXY_API_KEY>"
$env:ANTHROPIC_MODEL = "gemini-3.8-flash"
$env:ANTHROPIC_DEFAULT_OPUS_MODEL = "gemini-3.1-pro-preview"
$env:ANTHROPIC_DEFAULT_SONNET_MODEL = "gemini-3.8-flash"
$env:ANTHROPIC_DEFAULT_HAIKU_MODEL = "gemini-3.5-flash-lite"

Codex 使用 Responses 接口,在 ~/.codex/config.toml 中添加 provider,并把 PROXY_API_KEY 写入 AISTUDIO2API_KEY 环境变量;Codex 的 web_search 工具由 Google Search 执行:

model = "gemini-3.8-flash"
model_provider = "aistudio"

[model_providers.aistudio] name = "AIStudio2API" base_url = "http://127.0.0.1:2048/v1" env_key = "AISTUDIO2API_KEY" wire_api = "responses"

omp 的 web_search 工具使用 web 角色的模型搜索。在 omp 的 models.yml 中添加指向本服务的 Gemini provider(apiKey 为保存 PROXY_API_KEY 的环境变量名),并在 config.yml 中把 web 角色设为该模型:

# models.yml
providers:
  aistudio-gemini:
    baseUrl: http://127.0.0.1:2048/v1beta
    api: google-generative-ai
    apiKey: AISTUDIO2API_KEY
    models:
  • id: gemini-3.8-flash
# config.yml
modelRoles:
  web: aistudio-gemini/gemini-3.8-flash

主要端点:

| 能力 | 端点 | | --- | --- | | 模型 | GET /v1/models、GET /v1/models/{model}、GET /v1beta/models、GET /v1beta/models/{model} | | OpenAI Chat | POST /v1/chat/completions | | OpenAI Responses | POST /v1/responses、POST /v1/responses/input_tokens、POST /v1/responses/compact、GET/DELETE /v1/responses/{id}、GET /v1/responses/{id}/input_items、POST /v1/responses/{id}/cancel | | Files | POST /v1/files、GET /v1/files、GET /v1/files/{id}、GET /v1/files/{id}/content、DELETE /v1/files/{id}(OpenAI 与 Anthropic 格式);POST /upload/v1beta/files、GET /v1beta/files、GET/DELETE /v1beta/files/{id} | | Anthropic | POST /v1/messages、POST /v1/messages/count_tokens | | Gemini | POST /v1beta/models/{model}:generateContent、:streamGenerateContent、:countTokens | | Embeddings | POST /v1/embeddings、POST /v1beta/models/{model}:embedContent、:batchEmbedContents | | 图片 | POST /v1/images/generations、POST /v1/images/edits | | 语音 | POST /v1/audio/speech | | 转录与翻译 | POST /v1/audio/transcriptions、POST /v1/audio/translations | | 音乐 | Gemini generateContent + responseModalities: ["AUDIO"] | | 视频 | POST /v1/videos、GET /v1/videos、GET/DELETE /v1/videos/{id}、GET /v1/videos/{id}/content | | Gemini 视频 | POST /v1beta/models/{model}:predictLongRunning、GET /v1beta/operations/{id} | | Live(含实时翻译、实时转录与实时音乐)/ Robotics | GET /v1/live、GET /v1/robotics/stream |

四套生成接口均可按各自协议字段启用 Search、Image Search、URL Context、Code Execution 和 Maps。Files、Transcribe、Live、Robotics 的请求与事件格式见 Google AI Studio 协议规范。

生成请求中的内联附件会优先上传为临时 Drive 文件,随请求结束清理;账户未授予 Drive 权限时保持内联数据发送。图片、音频、视频、PDF 等输入仍需所选模型支持。重复使用的附件可通过 Files 接口上传一次并复用文件 ID。

Gemini 附件与视频图片输入支持 inlineData / inline_data、fileData / file_data、mimeType / mime_type 和 fileUri / file_uri。媒体 Base64 数据支持标准与 URL-safe 字母表、带填充与无填充形式,以及 data:;base64, 前缀。OpenAI 助手历史中的 Markdown 图片同样支持 URL-safe Base64 和 CR/LF 换行。内联 GIF 和视频表单上传的 GIF 按首帧静态图片转换为 PNG,保留逻辑画布、帧位置与透明背景。

TTS 语音生成

TalkifyTTS 与新版 Google Gen AI SDK 可连接 http://127.0.0.1:2048/v1beta/interactions,稳定版入口为 /v1/interactions。请求使用 x-goog-api-key,支持 gemini-3.8-flash-tts 与 gemini-3.8-flash-lite-tts:

from google import genai

client = genai.Client(api_key="123", http_options={"base_url": "http://127.0.0.1:2048"}) stream = client.interactions.create( model="gemini-3.8-flash-tts", input="Hello, this is a test.", response_format={"type": "audio"}, generation_config={"speech_config": [{"voice": "Kore"}]}, stream=True, ) for event in stream: if event.event_type == "step.delta" and event.delta.type == "audio": print(event.delta.data)

流式音频默认为 Base64 编码的 24 kHz、16-bit 小端、单声道 PCM;非流式默认为完整 WAV,通过 interaction.output_audio.data 读取。response_format.mime_type 可显式选择 audio/l16 或 audio/wav。风格与多说话人输入见 Interactions 协议。

curl http://127.0.0.1:2048/v1/audio/speech \
  -H "Authorization: Bearer 123" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.1-flash-tts-preview",
    "input": "Hello, this is a test.",
    "voice": "Kore",
    "response_format": "wav"
  }' \
  --output speech.wav

多说话人语音可以通过 Gemini generateContent 的 multiSpeakerVoiceConfig 配置。

curl http://127.0.0.1:2048/v1beta/models/gemini-2.5-flash-preview-tts:generateContent \
  -H "x-goog-api-key: 123" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{"parts": [{"text": "Joe: How are you?\nJane: I am fine, thanks!"}]}],
    "generationConfig": {
      "responseModalities": ["AUDIO"],
      "speechConfig": {
        "multiSpeakerVoiceConfig": {
          "speakerVoiceConfigs": [
            {"speaker": "Joe", "voiceConfig": {"prebuiltVoiceConfig": {"voiceName": "Kore"}}},
            {"speaker": "Jane", "voiceConfig": {"prebuiltVoiceConfig": {"voiceName": "Puck"}}}
          ]
        }
      }
    }
  }' --output speech.json

可用语音由实时模型目录中的 capability_options.voices 返回。gemini-3.8-flash-tts 等带 speech_metadata 能力的模型同样接受上面的 说话人: 台词 写法,也可以为每个文本 part 设置 speechMetadata.speaker 与 speechMetadata.style,并用 multiSpeakerVoiceConfig.mode 选择 VERBATIM 或 CONVERSATIONAL;OpenAI instructions 在这些模型上作为语音风格。

图片生成 (Nano Banana)

curl http://127.0.0.1:2048/v1/images/generations \
  -H "Authorization: Bearer 123" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.1-flash-image",
    "prompt": "A cute cat wearing a tiny hat",
    "n": 1,
    "size": "1024x1024"
  }'

视频生成 (Veo)

curl http://127.0.0.1:2048/v1/videos \
  -H "Authorization: Bearer 123" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "veo-3.1-fast-generate-preview",
    "prompt": "A drone flying over a forest"
  }'

创建操作后通过 GET /v1/videos/{id} 查询状态,通过 GET /v1/videos/{id}/content 下载结果。

模型

模型目录会随 AI Studio 更新,客户端从 /v1/models 或 /v1beta/models 读取当前值。下表保留目录结构示例,模型 ID、限制和方法以运行时结果为准:

| Model ID | Display name | Input | Output | Methods | | --- | --- | ---: | ---: | --- | | antigravity-preview-05-2026 | Antigravity Agent Preview | 131072 | 65536 | countTokens, generateContent | | gemini-2.5-flash | Gemini 2.5 Flash | 1048576 | 65536 | batchGenerateContent, countTokens, createCachedContent, generateContent | | gemini-2.5-flash-image | Nano Banana | 32768 | 32768 | batchGenerateContent, countTokens, generateContent | | gemini-2.5-flash-lite | Gemini 2.5 Flash-Lite | 1048576 | 65536 | batchGenerateContent, countTokens, createCachedContent, generateContent | | gemini-2.5-flash-preview-tts | Gemini 2.5 Flash Preview TTS | 8192 | 16384 | countTokens, generateContent | | gemini-2.5-pro | Gemini 2.5 Pro | 1048576 | 65536 | batchGenerateContent, countTokens, createCachedContent, generateContent | | gemini-2.5-pro-preview-tts | Gemini 2.5 Pro Preview TTS | 8192 | 16384 | batchGenerateContent, countTokens, generateContent | | gemini-3-flash-preview | Gemini 3 Flash Preview | 1048576 | 65536 | batchGenerateContent, countTokens, createCachedContent, generateContent | | gemini-3-pro-image | Nano Banana Pro | 131072 | 32768 | batchGenerateContent, countTokens, generateContent | | gemini-3.1-flash-image | Nano Banana 2 | 65536 | 65536 | batchGenerateContent, countTokens, generateContent | | gemini-3.1-flash-lite | Gemini 3.1 Flash Lite | 1048576 | 65536 | batchGenerateContent, countTokens, createCachedContent, generateContent | | gemini-3.1-flash-lite-image | Nano Banana 2 Lite | 65536 | 65536 | batchGenerateContent, countTokens, generateContent | | gemini-3.1-flash-tts-preview | Gemini 3.1 Flash TTS Preview | 8192 | 16384 | batchGenerateContent, countTokens, generateContent | | gemini-3.1-pro-preview | Gemini 3.1 Pro Preview | 1048576 | 65536 | batchGenerateContent, countTokens, createCachedContent, generateContent | | gemini-3.5-flash | Gemini 3.5 Flash | 1048576 | 65536 | batchGenerateContent, countTokens, createCachedContent, generateContent | | gemini-3.5-flash-lite | Gemini 3.5 Flash Lite | 1048576 | 65536 | batchGenerateContent, countTokens, createCachedContent, generateContent | | gemini-3.6-flash | Gemini 3.6 Flash | 1048576 | 65536 | batchGenerateContent, countTokens, createCachedContent, generateContent | | gemini-3.7-flash | Gemini 3.7 Flash | 1048576 | 65536 | batchGenerateContent, countTokens, createCachedContent, generateContent | | gemini-flash-latest | Gemini Flash Latest | 1048576 | 65536 | batchGenerateContent, countTokens, createCachedContent, generateContent | | gemini-flash-lite-latest | Gemini Flash-Lite Latest | 1048576 | 65536 | batchGenerateContent, countTokens, createCachedContent, generateContent | | gemini-nano-banana-2.1 | Nano Banana 2.1 | 65536 | 65536 | batchGenerateContent, countTokens, generateContent | | gemini-omni-flash-preview | Gemini Omni Flash Preview | 131072 | 65536 | countTokens, generateContent | | gemini-pro-latest | Gemini Pro Latest | 1048576 | 65536 | batchGenerateContent, countTokens, createCachedContent, generateContent | | gemini-robotics-er-1.6-preview | Gemini Robotics-ER 1.6 Preview | 131072 | 65536 | batchGenerateContent, countTokens, createCachedContent, generateContent | | gemini-robotics-er-2-preview | Gemini Robotics-ER 2 Preview | 131072 | 65536 | batchGenerateContent, countTokens, createCachedContent, generateContent | | gemma-4-26b-a4b-it | Gemma 4 26B A4B IT | 262144 | 32768 | countTokens, generateContent | | gemma-4-31b-it | Gemma 4 31B IT | 262144 | 32768 | countTokens, generateContent | | lyria-3-clip-preview | Lyria 3 Clip Preview | 1048576 | 65536 | countTokens, generateContent | | lyria-3-pro-preview | Lyria 3 Pro Preview | 1048576 | 65536 | countTokens, generateContent | | veo-3.1-fast-generate-preview | Veo 3.1 fast | 480 | 8192 | predictLongRunning | | veo-3.1-generate-preview | Veo 3.1 | 480 | 8192 | predictLongRunning | | veo-3.1-lite-generate-preview | Veo 3.1 lite | 480 | 8192 | predictLongRunning |

公开端点实现标准 generateContent、countTokens、embedContent、batchEmbedContents 和 predictLongRunning;bidiGenerateContent 与 bidiGenerateMusic 模型经 /v1/live 调用。/v1/models 与 /v1beta/models 原样汇总各账户实时上游目录;调度按目录明确提供的模型 ID、方法、能力字段和账户当前运行状态选择账户。

启用账户的订阅都不满足的模型(如只对 Google AI Ultra 开放的模型)同样列在目录中、不含 channels,调用时返回 403 并写明所需订阅。能力含 output_continuation 的模型(如 Gemini 4 Argon)与官网一样接受到 input_token_limit 的输出上限,超过 32768 时分轮自动续写,各轮输出合并为一个响应。模型名可以带思考后缀,例如 gemini-4-argon(low):括号内为 none、minimal、low、medium、high、xhigh、max、auto 或思考预算 token 数,后缀优先于请求体中的思考参数。客户端写死的模型名可用 MODEL_MAPPING 映射到目录中的模型,例如 MODEL_MAPPING=claude-haiku-5-5:gemini-3.8-flash,别名以目标模型的字段列在模型目录中。

项目架构

AIStudio2API/
├── cmd/aistudio2api/        # 薄入口
├── internal/app/            # 命令、管理监听、生成服务生命周期与调度
├── internal/setup/          # 账户导入和独立登录 CLI
├── internal/aistudio/       # AI Studio 协议、认证、模型与媒体
├── internal/api/            # OpenAI、Responses、Anthropic 与 Gemini 适配
├── internal/chromeauth/     # Windows Chrome 与 DBSC 导入
├── internal/camoufoxnative/ # Camoufox BiDi、登录与 WAA Worker
├── internal/webui/          # 内嵌前端产物
├── web/                     # Vue 3 + TypeScript 管理页面
├── docs/                    # 开发文档与协议规范
└── start.bat                # Windows 一键启动入口

配置说明

环境变量配置

复制并编辑环境配置文件:

cp .env.example .env

| 变量 | 默认值 | 作用 | | --- | --- | --- | | AISTUDIO_AUTH_STATES | auth | 账户文件、目录或多个逗号分隔路径 | | LISTEN_ADDR | 127.0.0.1:2048 | 管理页面与 API 监听地址 | | PROXY_API_KEY | 空 | 公开 API key | | AUTO_START | false | 管理程序启动后自动启动生成服务 | | REQUEST_BODY_LOG | false | 保存公开 API 请求与响应正文,各截断到 64 KiB,保留最近 1000 条 | | LOG_FILE | true | 同时把服务日志写入 runtime/logs/,单文件 10 MB 轮转 | | LOG_MAX_TOTAL_MB | 500 | 日志目录总量上限,超出时删除最旧的文件,不小于 20 | | ADMIN_AUTH_ENABLED | false | 管理控制台账号密码登录开关 | | ADMIN_USERNAME | admin | 管理员账号 | | ADMIN_PASSWORD | 空 | 管理员密码,开启登录时必填 | | PROXY | 空 | Chrome 导入、登录和账户默认使用的 HTTP、HTTPS 或 SOCKS5 代理,多个代理用逗号分隔组成代理池;留空时使用系统代理 | | INIT_TIMEOUT | 2m | 单账户 WAA 初始化超时 | | REQUEST_TIMEOUT | 30m | 单次请求最大执行时间,自动续写请求按续写轮数倍增 | | WARM_WORKER_LIMIT | 5 | 常驻预热账户数 | | MAX_ACTIVE_WORKERS | 10 | 高峰期最多同时运行的 Worker 数 | | WARM_STARTUP_CONCURRENCY | 5 | 同时冷启动的 Camoufox Worker 数,预热与按需扩容共用;WAA_BACKEND=go 时不限制 | | PER_ACCOUNT_CONCURRENCY | 2 | 单账号同时执行的请求数 | | ROUTING_STRATEGY | round-robin | round-robin 轮询;fill-first 账号粘性优先 | | UPSTREAM_CHANNELS | playground,build | 生成请求使用的上游通道,可只保留其一 | | MODEL_MAPPING | 空 | 客户端模型名到目录模型的映射,每项写成 别名:模型 ID,逗号分隔多项 | | BUILD_NATIVE_NONSTREAM | true | 非流式请求优先使用 Build 原生单次调用;不可用时回退流式并记录原因 | | WAA_BACKEND | camoufox | camoufox 在 Camoufox 页面运行 WAA;go 在服务进程内运行 WAA,不下载也不启动 Camoufox | | TEMPORARY_CHAT | false | WAA 预热页是否使用临时对话 |

服务启动时会载入 AISTUDIO_AUTH_STATES 中的全部账户;WARM_WORKER_LIMIT 控制常驻预热规模,MAX_ACTIVE_WORKERS 控制峰值 Worker 上限,WARM_STARTUP_CONCURRENCY 控制同时冷启动的 Camoufox Worker 数,PER_ACCOUNT_CONCURRENCY 控制单账户请求槽位;这四项在管理页面保存后立即作用于后续调度,峰值上限调低时关闭多出的空闲 Worker,常驻数调高时补足预热。

端口配置

管理控制台默认通过本机回环地址免密访问。远程管理时设置 ADMIN_AUTH_ENABLED=true、管理员账号和密码,重启程序后通过独立 /login 页面登录。登录会话有效期为 12 小时,支持退出登录;管理员共享同一个账户池、配置与日志。公开 API 使用独立的 PROXY_API_KEY。

反向代理使用 HTTPS,并保留原始 Host、设置 X-Forwarded-Proto: https。管理页“服务配置”可调整登录开关及凭据,保存后重启程序生效。

高级功能

代理配置

支持通过 HTTP、HTTPS 或 SOCKS5 代理访问 AI Studio,代理需要认证时在 URL 中填写账号密码,例如 socks5://user:password@host:1080:

1. 在“服务配置”中设置全局代理;留空时使用系统代理,先读 HTTPS_PROXY 环境变量,未设置时读 Windows 系统代理设置,代理输入框下方显示当前生成服务实际使用的出口 2. 全局代理可以填写多个,用逗号分隔组成代理池:没有专用代理的账户固定绑定到绑定账户最少的可用代理,绑定写入账户状态,重启后不变;代理连续 3 次网络错误或定时检测失败时,其账户改绑到其他可用代理,检测恢复后重新参与分配;“服务配置”列出各代理的状态与绑定账户数,账户卡片显示每个账户的出口 3. 在“账户”页面编辑单个账户时可以设置账户专用代理 4. 账户代理同时用于登录、WAA 与业务请求 5. 带账号密码的代理由程序在本机回环地址提供无认证 SOCKS5 中转供 Camoufox 使用,账号密码不写入浏览器 profile;中转运行期间,本机其他进程也能经它使用该代理

认证文件管理

认证文件默认存储在 auth/ 目录:

| 路径 | 内容 | | --- | --- | | auth//account.json | 账户邮箱、代理、语言、时区和启用状态 | | auth//storage-state.json | Google Cookie 与认证续签材料 | | auth//runtime-state.json | 权益等级、模型资格、冷却状态与资源所属账户 | | auth//camoufox-cache/ | 该账户浏览器的网页缓存,服务停止时可删除 | | auth/.leases/.lock | 同一账户目录的跨进程占用锁 | | [用户缓存]/AIStudio2API/runtime-leases/.lock | 当前电脑上该邮箱的 WAA Worker 占用锁 |

账户邮箱同时作为目录名、管理页面标识和日志来源,统一使用小写形式。.leases 协调账户目录读写,用户缓存中的 runtime lease 保证同一邮箱在当前电脑上只有一个 WAA Worker。

账户页支持 Chrome 批量导入和隔离 Camoufox 登录。ready 账户可以编辑、停用、立即刷新和删除,auth_required 账户可以重新登录;“刷新全部”立即读取全部启用账户的权益与模型目录,后台每 10 分钟也会读取一次。从未读取成功的账户权益显示为未知,并显示最近一次失败原因。

详细文档

重要提示

关于 Camoufox

本项目使用 Camoufox 浏览器来降低被检测为自动化脚本的风险。Camoufox 基于 Firefox,通过修改底层实现来保持真实的设备指纹。

Go 负责编码、调度、流式解码与公开协议;受 WAA 保护的 GenerateContent 通过账户固定指纹 Camoufox 页面发送,保留原生 Firefox TLS/HTTP2、请求头、Cookie 与页面指纹。

WAA_BACKEND=go 时,WAA 在服务进程内运行,按账户指纹模拟 Firefox 页面环境并以 Firefox 请求头直接发送,运行时不下载也不启动 Camoufox。账户页的浏览器登录仍使用 Camoufox,首次登录时按需准备。

使用限制

故障排除

Windows 端口被系统保留

如果启动时提示 LISTEN_ADDR 配置的端口被占用,任务管理器中又找不到占用进程,可能是 Hyper-V、WSL2 或 Docker 的 NAT 服务保留了端口段。

以下命令需要在管理员权限的 PowerShell 或 CMD 中运行。

1. 查看被 Windows 保留的端口范围

netsh interface ipv4 show excludedportrange protocol=tcp

如果 2048 落在输出的 Start Port 和 End Port 范围内,可以修改 LISTEN_ADDR,或重启 WinNAT 服务后再次检查:

net stop winnat
net start winnat

端口空闲后,也可以将 2048 加入持久保留:

netsh int ipv4 add excludedportrange protocol=tcp startport=2048 numberofports=1 store=persistent

常见运行状态:

| 状态 | 处理方法 | | --- | --- | | 页面未自动打开 | 手动打开 .env 中 LISTEN_ADDR 对应的地址 | | service_stopped | 在管理页面点击“启动服务” | | service_starting | 生成服务正在启动,稍后重试 | | 没有可用账户 | 在账户页新增、启用或重新登录账户 | | Camoufox 准备失败 | 检查 GitHub Release 访问,或设置 CAMOUFOX_PATH | | Linux 预热账户 exit status 255 |

GitHub Stars & Activity

355Stars
100Forks
0Open issues
GoLanguage

GitHub Popularity

GitHub stars355
Forks100
Open issues0
Primary languageGo
License-
Stars gained today35
Created-
Last pushed-

Trending History

Daily boardrank #47 · ▲ 35 stars
Weekly boardrank #63 · ▲ 100 stars

Related AI Projects

1

ollama / ollama

Go★ 183,729⑂ 18,390▲ 144 stars
→
2

mudler / LocalAI

Go★ 49,622⑂ 4,505▲ 26 stars
→
3

github / github-mcp-server

Go★ 33,729⑂ 5,315▲ 43 stars
→
4

gastownhall / beads

Go★ 27,988⑂ 1,894▲ 27 stars
→
5

google / ax

Go★ 13,931⑂ 722▲ 57 stars
→
6

agent-substrate / substrate

Go★ 5,481⑂ 599▲ 93 stars
→
7

feder-cr / git-ai

Go★ 1,529⑂ 194
→
8

heartleo / zlib

Go★ 1,071⑂ 84▲ 126 stars
→

More AI Rankings