A High-Performance Go Proxy Server
Converts the Google AI Studio web protocol into OpenAI, Responses, Anthropic, and Gemini compatible APIs
Playground + Build Dual Quota Channels •
High-Concurrency Multi-Account •
Camoufox and Pure Go WAA Backends
Claude Code, Codex, and Other Agent Clients •
Nano Banana, Veo, TTS, and Omni
- Dual Quota Channels: Every account has separate Playground and Build app proxy quotas, and
UPSTREAM_CHANNELSenables either or both; when one channel hits its limit, the same account continues on the other - High-Concurrency Multi-Account: Detects Free, Pro, Ultra, and Plus benefits and routes across accounts by the live model catalog with round-robin or fill-first
- Two WAA Backends: Camoufox holds the official WAA lifecycle by default; with
WAA_BACKEND=go, pure Go generates the official proof and no browser is downloaded or launched at runtime - Four API Protocols: OpenAI Chat Completions, OpenAI Responses, Anthropic Messages, and Gemini GenerateContent
- Mainstream Agent Clients: Works with Claude Code, Codex, OpenCode, pi, omp, OpenClaw, and Hermes, including file read and write tool calls; native web search works in Claude Code, Codex, and omp
- Native Streaming: Text, reasoning summaries, function calls, Google tools, media, and usage
- TTS Speech Generation: Gemini TTS models for single-speaker and multi-speaker audio
- Image Generation: Nano Banana image generation
- Video Generation: Veo video generation and image-to-video; Gemini Omni accepts text, image, and video input and returns text and MP4 video through the four generation APIs
- YouTube Input: Paste a video URL to attach and read the external video
- Smart Model Switching: Discover models from AI Studio and route through the
modelfield - Google Tools: Search, Image Search, URL Context, Code Execution, and Maps
- Files and Transcribe: File upload, metadata, content, deletion, and audio transcription
- Live and Robotics: WebSocket text, audio, JPEG images, media end, tool calls, resumption, and interruption
- Anti-Fingerprinting: Camoufox holds the official WAA lifecycle with a stable browser fingerprint and network exit per account
- GUI Launcher: Manage accounts, service controls, live logs, models, requests, and configuration in the web UI
- Modular Architecture: Go handles protocols, scheduling, APIs, and management; Camoufox hosts WAA and isolated login
- Windows Release Runtime: Windows 10 or later,
aistudio2api.exe, andstart.bat - Linux Release Runtime: Extract
linux-amd64.tar.gzand run./aistudio2api; Camoufox needs the Firefox system libraries, on Debian/Ubuntu runsudo apt install libgtk-3-0 libasound2 libnss3 libdbus-glib-1-2 libxtst6 libxrandr2 libgbm1 libxkbcommon0 libpango-1.0-0 libcairo2 libxcomposite1 libxdamage1 libxfixes3 fonts-liberation - Source Build: Go 1.25.0+, Node.js 22.13+ or 24+, and its bundled npm
- Operating System: Windows, macOS, Linux
- Memory: 2GB+ available memory for one account; each resident prewarmed account adds about 0.6GB
- Network: Stable internet connection to Google AI Studio
Download the windows-amd64.zip package from Releases, extract it, and run start.bat. The package includes the management interface and is ready to run.
To start from source:
git clone https://github.com/Mag1cFall/AIStudio2API.git
cd AIStudio2API
copy .env.example .envThen double-click start.bat. You can also run it from PowerShell:
.\start.batThe script runs an existing aistudio2api.exe immediately. In a source checkout without the executable, it installs frontend dependencies and builds the frontend and Go program.
The first launch downloads Camoufox for the current platform to runtime/camoufox/. Set CAMOUFOX_PATH to use an existing executable instead.
- Go 1.25.0 or later
- Node.js 22.13+ or 24+, with its bundled npm
git clone https://github.com/Mag1cFall/AIStudio2API.git
cd AIStudio2API
cp .env.example .envcd web
npm ci
npm run build
cd ..
go build -o aistudio2api ./cmd/aistudio2api
chmod +x ./aistudio2api
./aistudio2apiThe first Linux or macOS launch also prepares the matching Camoufox build automatically.
-
Prepare the first account:
Windows can import a local Chrome account:
start.bat setupLinux and macOS use an isolated Camoufox login:
./aistudio2api setup --login
The Google email is read from AI Studio after login, and Google Drive is authorized for the account. The account is saved under the path configured by
AISTUDIO_AUTH_STATESin.env. Locale and timezone default to the current computer and can be set with--localeand--timezone. -
Start the management UI:
- Double-click
start.baton Windows - Run
./aistudio2apion Linux or macOS - The browser opens
http://127.0.0.1:2048 - The initial state is
STOPPED, with Logs open by default
- Double-click
-
Add another account:
- Open Accounts
- "Import Chrome accounts" supports selecting multiple local Chrome accounts
- "Browser login" opens an isolated Camoufox window, detects the email after login, authorizes Google Drive, and saves the account; when Google asks to verify your identity, confirm it in that window or on your phone
-
Start the API:
- Click "Start service" to start the data plane
- The state advances through
LAUNCHINGtoRUNNING; "Stop service" cancels an in-progress launch - Use Logs to confirm account, model, and request status
- The API listens on
http://127.0.0.1:2048by default
Account actions depend on state:
| Account state | Available actions |
|---|---|
ready |
Edit, disable, verify, delete |
disabled |
Edit, enable, delete |
auth_required |
Edit, disable, log in again, verify, delete |
"Log in again" appears only when the account state is auth_required.
- Double-click
start.baton Windows; run./aistudio2apion Linux or macOS - Click "Start service" to enable the APIs
- "Stop service" cancels an in-progress launch or active requests and closes WAA workers while the management UI and Logs remain available
- Click "Start service" again to resume the APIs
Starting again loads the latest data-plane settings from .env. Changes to LISTEN_ADDR or PROXY_API_KEY require restarting the management process.
Press Ctrl+C in the launch window or close that window to exit the manager. Closing the browser tab does not stop the manager.
start.bat: Starts the manager and opens the web UI.
start.bat -open-ui=false: Starts the manager without opening the web UI.
start.bat setup: Scans local Chrome accounts. Use --email or --profile to select a Chrome account. Run start.bat setup --login for an isolated login, or start.bat setup --storage-state <file> to import a file.
After starting the service, call OpenAI Chat Completions directly:
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
}'| Protocol | Base URL | API key |
|---|---|---|
| OpenAI Chat / Responses | http://127.0.0.1:2048/v1 |
PROXY_API_KEY from .env |
| Anthropic Messages | http://127.0.0.1:2048 |
PROXY_API_KEY from .env |
| Gemini | http://127.0.0.1:2048 |
PROXY_API_KEY from .env |
Read model names from GET /v1/models or GET /v1beta/models. When PROXY_API_KEY is empty, only pages on this machine can call the API from a browser; web clients and some desktop clients need PROXY_API_KEY set.
For Cherry Studio:
- Open Cherry Studio settings
- Add an OpenAI-compatible provider
- Set the API host to
http://127.0.0.1:2048/v1 - Set the API key to
PROXY_API_KEYfrom.env - Load models from
/v1/models, or addgemini-3.6-flashandgemini-3.7-flashmanually
Claude Code uses the Anthropic endpoint. Subagents pick models by the opus, sonnet, and haiku tiers; the variables below map them to AI Studio models. WebSearch runs on 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 uses the Responses endpoint. Add a provider to ~/.codex/config.toml and put PROXY_API_KEY in the AISTUDIO2API_KEY environment variable. Codex's web_search tool runs on 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 runs its web_search tool through its own provider order. Set GOOGLE_GEMINI_BASE_URL=http://127.0.0.1:2048 and GEMINI_API_KEY=<PROXY_API_KEY>, and put the Gemini provider first in the omp config:
providers:
webSearchOrder:
- gemini
webSearchGeminiModel: gemini-3.8-flashMain endpoints:
| Capability | Endpoint |
|---|---|
| Models | 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 |
| Files | POST /v1/files, GET /v1/files/{id}, GET /v1/files/{id}/content, DELETE /v1/files/{id} |
| Anthropic | POST /v1/messages, POST /v1/messages/count_tokens |
| Gemini | POST /v1beta/models/{model}:generateContent, :streamGenerateContent, :countTokens |
| Images | POST /v1/images/generations |
| Speech | POST /v1/audio/speech |
| Transcription | POST /v1/audio/transcriptions |
| Music | Gemini generateContent with responseModalities: ["AUDIO"] |
| Video | POST /v1/videos, GET /v1/videos/{id}, GET /v1/videos/{id}/content |
| Gemini Video | POST /v1beta/models/{model}:predictLongRunning, GET /v1beta/operations/{id} |
| Live (including live translation and live transcription) / Robotics | GET /v1/live, GET /v1/robotics/stream |
All four generation APIs can enable Search, Image Search, URL Context, Code Execution, and Maps through their protocol fields. Request and event formats for Files, Transcribe, Live, and Robotics are documented in the Google AI Studio protocol specification.
Inline attachments in generation requests are preferentially uploaded as temporary Drive files and cleaned up when the request ends. If the account has not granted Drive access, the original inline data is sent instead. Images, audio, video, PDFs, and other inputs must be supported by the selected model. Upload reusable attachments once through the Files API and reuse their file IDs.
Gemini attachments and video image inputs accept inlineData / inline_data, fileData / file_data, mimeType / mime_type, and fileUri / file_uri. Base64 media data supports standard and URL-safe alphabets, padded and unpadded forms, and the data:<MIME>;base64, prefix. Markdown images in OpenAI assistant history also support URL-safe Base64 and CR/LF line breaks. Inline GIFs and GIFs uploaded through video multipart requests are converted to PNG using the first frame, preserving the logical canvas, frame position, and transparency.
TalkifyTTS and the Google Gen AI SDK can connect to http://127.0.0.1:2048/v1beta/interactions; the stable endpoint is /v1/interactions. Authenticate with x-goog-api-key. Both gemini-3.8-flash-tts and gemini-3.8-flash-lite-tts support single-speaker and multi-speaker synthesis.
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)Streaming defaults to Base64-encoded 24 kHz, 16-bit little-endian mono PCM. Non-streaming defaults to a complete WAV file, available through interaction.output_audio.data. Set response_format.mime_type to audio/l16 or audio/wav to select the format. See the Interactions protocol for style annotations and multi-speaker input.
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.wavMulti-speaker speech is available through Gemini generateContent with 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.jsonAvailable voices are returned by capability_options.voices in the live model catalog. Models with the speech_metadata capability, such as gemini-3.8-flash-tts, accept the same Speaker: line script, and each text part can also set speechMetadata.speaker and speechMetadata.style, with multiSpeakerVoiceConfig.mode selecting VERBATIM or CONVERSATIONAL; OpenAI instructions become the speech style on these models.
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"
}'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"
}'After creating the operation, poll GET /v1/videos/{id} and download the result from GET /v1/videos/{id}/content.
The model catalog follows AI Studio updates; clients read the current values from /v1/models or /v1beta/models. The table below is a catalog-shape example; runtime results are authoritative for model IDs, limits, and methods:
| 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-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 |
Public endpoints implement generateContent, countTokens, and predictLongRunning. /v1/models and /v1beta/models preserve the live upstream catalogs across accounts; scheduling uses explicit model ID, method, and capability fields plus current account runtime state.
AIStudio2API/
├── cmd/aistudio2api/ # Thin entry point
├── internal/app/ # Commands, management listener, data-plane lifecycle, and scheduling
├── internal/setup/ # Account import and isolated-login CLI
├── internal/aistudio/ # AI Studio protocol, authentication, models, and media
├── internal/api/ # OpenAI, Responses, Anthropic, and Gemini adapters
├── internal/chromeauth/ # Windows Chrome and DBSC import
├── internal/camoufoxnative/ # Camoufox BiDi, login, and WAA workers
├── internal/webui/ # Embedded frontend build
├── web/ # Vue 3 and TypeScript management UI
├── docs/ # Development guide and protocol specification
└── start.bat # Windows one-click launcher
Copy and edit the environment file:
cp .env.example .env| Variable | Default | Purpose |
|---|---|---|
AISTUDIO_AUTH_STATES |
auth |
Account file, directory, or comma-separated paths |
LISTEN_ADDR |
127.0.0.1:2048 |
Management UI and API listen address |
PROXY_API_KEY |
empty | Public API key |
ADMIN_AUTH_ENABLED |
false |
Enable username/password login for the console |
ADMIN_USERNAME |
admin |
Administrator username |
ADMIN_PASSWORD |
empty | Administrator password, required when login is enabled |
PROXY |
empty | HTTP, HTTPS, or SOCKS5 proxy used by Chrome import, login, and accounts without an override |
INIT_TIMEOUT |
2m |
Per-account WAA initialization timeout |
REQUEST_TIMEOUT |
5m |
Maximum request execution time |
WARM_WORKER_LIMIT |
5 |
Number of resident prewarmed accounts |
MAX_ACTIVE_WORKERS |
10 |
Maximum workers active during peak load |
WARM_STARTUP_CONCURRENCY |
2 |
Accounts initialized concurrently during prewarming |
PER_ACCOUNT_CONCURRENCY |
2 |
Concurrent requests allowed per account |
ROUTING_STRATEGY |
round-robin |
round-robin rotates accounts; fill-first reuses the first available account |
UPSTREAM_CHANNELS |
playground,build |
Upstream channels for generation requests; either one can be used alone |
BUILD_NATIVE_NONSTREAM |
true |
Prefer native Build unary calls for non-streaming requests; log any fallback to stream collection |
WAA_BACKEND |
camoufox |
camoufox runs WAA in a Camoufox page; go runs WAA inside the service process and neither downloads nor starts Camoufox |
TEMPORARY_CHAT |
false |
Use Temporary Chat for the WAA prewarm page |
The service loads every account from AISTUDIO_AUTH_STATES. WARM_WORKER_LIMIT sets the resident warm pool, MAX_ACTIVE_WORKERS caps peak worker count, WARM_STARTUP_CONCURRENCY controls concurrent prewarming, and PER_ACCOUNT_CONCURRENCY controls request slots per account.
The console allows passwordless loopback access by default. For remote management, set ADMIN_AUTH_ENABLED=true, configure the administrator username and password, and restart the process. The separate /login page creates a 12-hour session with sign-out support. Administrators share the instance's account pool, configuration, and logs. Public APIs use the separate PROXY_API_KEY.
Use an HTTPS reverse proxy that preserves Host and sets X-Forwarded-Proto: https. Console login settings can also be saved from the settings page and take effect after restarting the process.
- Management UI and APIs: Default port
2048 - Camoufox: Local ports are allocated dynamically
HTTP, HTTPS, and SOCKS5 proxies without embedded credentials are supported:
- Set the global proxy under Service Configuration
- Edit an account to set an account-specific proxy
- The account proxy is used for login, WAA, and business requests
Authentication files are stored in auth/ by default:
| Path | Contents |
|---|---|
auth/<Google email>/account.json |
Account email, proxy, locale, timezone, and enabled state |
auth/<Google email>/storage-state.json |
Google cookies and authentication renewal material |
auth/<Google email>/runtime-state.json |
Benefit tier, model eligibility, cooldowns, and resource ownership |
auth/<Google email>/camoufox-cache/ |
Web cache of that account's browser; can be deleted while the service is stopped |
auth/.leases/<Google email>.lock |
Cross-process lease for the account directory |
[user cache]/AIStudio2API/runtime-leases/<Google email>.lock |
WAA Worker lease for that email on the current computer |
The lowercase Google email is the account directory, management UI identity, and log source. .leases coordinates account-directory access, while the runtime lease in the user cache allows one WAA Worker per email on the current computer.
The Accounts page supports Chrome batch import and isolated Camoufox login. ready accounts can be edited, disabled, verified, and deleted; auth_required accounts can log in again.
- Development and contribution
- Google AI Studio protocol specification
- WAA implementation
- Build channel
- Runtime logging
- Reusable reverse-engineering development guide
This project uses Camoufox to reduce automation detection. Camoufox is based on Firefox and changes lower-level browser behavior to retain a realistic device fingerprint.
Go handles encoding, scheduling, streaming decode, and public protocols. WAA-protected GenerateContent requests are sent by the account's fingerprinted Camoufox page, preserving the native Firefox TLS/HTTP2 stack, headers, cookies, and page fingerprint.
With WAA_BACKEND=go, WAA runs inside the service process, emulates the Firefox page environment from the account fingerprint, and sends requests with Firefox request headers; Camoufox is neither downloaded nor started at runtime. Browser login on the Accounts page still uses Camoufox and prepares it on first login.
- Client-Managed History: Clients submit complete conversation context for Chat, Anthropic, and Gemini requests
- AI Studio History: API requests are not saved to website history;
TEMPORARY_CHAT=truealso disables autosave for the WAA prewarm page - Responses Sessions:
previous_response_idis stored only in the current process and is cleared on restart - Authentication Expiry: Chrome imports retain DBSC renewal material; isolated-login accounts must log in again after authentication expires
If startup reports that the port configured by LISTEN_ADDR is unavailable while Task Manager shows no owning process, Hyper-V, WSL2, or Docker NAT may have reserved the port range.
Run the following commands from an elevated PowerShell or CMD window.
netsh interface ipv4 show excludedportrange protocol=tcpIf 2048 falls inside a reserved range, change LISTEN_ADDR, or restart WinNAT and inspect the range again:
net stop winnat
net start winnatWhen the port is free, it can be reserved persistently:
netsh int ipv4 add excludedportrange protocol=tcp startport=2048 numberofports=1 store=persistentCommon runtime states:
| State | Resolution |
|---|---|
| The page does not open automatically | Open the address configured by LISTEN_ADDR in .env |
service_stopped |
Click "Start service" in the management UI |
| No account is available | Add, enable, or log in to an account from Accounts |
| Camoufox preparation fails | Check access to GitHub Releases or set CAMOUFOX_PATH |
Linux account warmup exit status 255 |
Install the Camoufox runtime libraries, see the apt command in “System Requirements” |
Issues and Pull Requests are welcome!
- ✅ TTS Support: Adapted
gemini-2.5-flash/pro-preview-ttsspeech generation models - ✅ Media Generation: Supports Imagen 3, Veo 2, Nano Banana image/video generation
- ✅ Documentation: Update and optimize documentation in
docs/directory - One-Click Deployment: Provide fully automated install and launch scripts for Windows/Linux/macOS
- ✅ Go Refactoring: Migrate core proxy service to Go for improved concurrency and reduced resource usage
- ✅ Multi-Worker Load Balancing: Support multi-Google account rotation pool for higher concurrency limits
- ✅ Pure Go backend:
WAA_BACKEND=goruns the official interpreter and program inside the service process, emulating the Firefox page environment from each account fingerprint; it neither downloads nor starts Camoufox at runtime, while account login still uses Camoufox - Firefox engine details: implement
Intlformatting, the global resolution timing of regular-expression literals, and the Symbol key order ofRegExp.prototype