---
name: gemini-web2api-overview
description: "Sophomoresty/gemini-web2api на mac mini — OpenAI-совместимый прокси к Gemini Web (порт 1717, SOCKS5 через xray, anonymous mode без cookie)"
metadata: 
  node_type: memory
  type: project
  originSessionId: d66da292-7e67-41c7-9f4f-d2ff61ffbf08
---

## ⚠️ 2026-06-22: gemini-cli (OAuth-канал шины) — ТРУП. Утверждения ниже про «gemini-cli работает (voters #1/#2/#4)» УСТАРЕЛИ

`gemini-cli/*` через [[omniroute_cloud_bus]] больше НЕ отвечает: `POST :20127/v1/messages` → `HTTP 000` (шина не достукивается до OAuth-канала). В спорт-голосах Делора его уже не было (voter#1/#2/#4 ранее мигрированы на cerebras/Qwen). Остававшиеся 3 ссылки в `delor/config.py` перенацелены на проверенно-живые: `cloud_judge_model`→**mistral/mistral-medium-latest**, `crypto_llm_fallback2`→**siliconflow/deepseek-ai/DeepSeek-V3.2**, `crypto_llm_fallback3`→**mistral-medium**. ⚠️ **`fmd/gpt-5.4` тоже флапает** (на замере 2026-06-22 — `HTTP 000`, 40с таймаут; в judge не брал). **`gemini-web2api :1717` (этот файл, анонимный web-скрейп) — ЖИВ**, не путать с мёртвым `gemini-cli`. Делор kickstart, чисто. См. также удалённый [[risky_llm_provider_isolation]] aerolink (тоже выпилен 2026-06-22).

## ⚠️ 2026-06-15: gemini-web НЕ ОЖИВАЕТ с этой инфры (клещи гео/датацентр)

Пытались поднять авторизованный gemini как 5-й спорт-голос Делора. Прошли ВСЕ слои, упёрлись в IP:
- Обновили репу до upstream `9fb5cad` (commit `ee9ada5`→`9fb5cad`): добавлена **авторизованная маршрутизация** (`auth_user` → `/u/N`+`X-Goog-AuthUser`, `xsrf_token` → param `at=` = SNlM0e-токен) + surface `BardErrorInfo` вместо тихого null.
- Поставили **CloakBrowser** (анти-детект Chromium, см. ниже), залогинили throwaway Google c Gemini Pro через NL-прокси, сняли полный jar (26 кук вкл. `__Secure-1PSIDTS`).
- Для рабочего запроса нужны ВСЕ: полный cookie jar + `gemini_bl`=живой `cfb2h` (ротация ~раз/неделю, хардкод протух за 2 нед → 400) + `xsrf_token`=`SNlM0e` + `auth_user="0"`. Скрапятся из `WIZ_global_data` живой страницы.
- **РЕЗУЛЬТАТ — тупик по IP:** напрямую (домашний RU-IP) формат принят (200), но Google гео-блокирует РФ → **`BardErrorInfo [1060]`** (пусто). Через NL-прокси (датацентр) регион ок, но **429/405** (Google душит датацентр-IP). Нужен **residential non-RU прокси** — бесплатного нет. **CloakBrowser не помогает: проблема в гео/репутации IP исходящих API-запросов (urllib), а не в отпечатке браузера.**
- **Поправка к старому утверждению ниже (стр. «country by account, не IP») — НЕВЕРНО:** API гео-чекает IP запроса (RU IP с NL-аккаунтом всё равно дал 1060).
- Конфиг откатан в исходное (anonymous + NL socks5). **Вывод: у Делора уже есть рабочий gemini через [[omniroute_cloud_bus]] gemini-cli OAuth (voters #1/#2/#4) — он ходит в API-эндпоинты Google, не в consumer-web, потому гео/датацентр-фильтры его не режут. gemini-web :1717 reliable голос не даёт.**

**CloakBrowser** (github CloakHQ/CloakBrowser, 26k⭐ MIT, `pip install cloakbrowser`, бинарь авто-докачка SHA-verified): `~/.venvs/cloakbrowser`, бинарь `~/.cloakbrowser/chromium-*/Chromium.app`, drop-in Playwright (`cb.launch_persistent_context(dir, headless, proxy="socks5://...")`). Профиль логина `~/.cloak-gemini` (залогинен throwaway Gemini-Pro). Скрипты на мини: `~/gemini_cloak_login.py` (headful логин→дамп кук, запускать в GUI-сессии: `launchctl asuser` НЕ пускает из SSH без root → юзер сам в Терминале на Screen Sharing `vnc://Cebers-mini.local`), `~/get_tokens.py` (скрап cfb2h+SNlM0e→патч config), `~/dump_cookies.py`.

## Что это

`Sophomoresty/gemini-web2api` (293⭐, активный) — OpenAI-compatible прокси к веб-интерфейсу Gemini. Запущен на mac mini как launchd-сервис `com.cebers.gemini-web2api`.

**Эндпоинт:** `http://127.0.0.1:1717/v1/chat/completions` (OpenAI-совместимый), `http://127.0.0.1:1717/v1/models`, `http://127.0.0.1:1717/v1beta/models/.../generateContent` (Gemini-native).

**Auth:** anonymous (api_keys=[], cookie_file=null). Cookies не нужны и даже мешают (HTTP 400 при кривом формате).

## Файлы

- `~/Разработки/gemini-web2api/` — клон репы (commit `ee9ada5`)
- `~/Разработки/gemini-web2api/config.json` — port 1717, SOCKS5 127.0.0.1:2080, anonymous
- `~/.venvs/gemini-web2api/` — Python 3.12 + httpx[socks]
- `~/Library/LaunchAgents/com.cebers.gemini-web2api.plist` — KeepAlive Crashed, RunAtLoad
- `~/Разработки/gemini-web2api/logs/launchd.{out,err}.log`

## Модели (anonymous)

`gemini-3.5-flash` (рабочая), `gemini-3.5-flash-thinking`, `gemini-3.5-flash-thinking-lite`, `gemini-3.1-pro` (без подписки → routes на Flash), `gemini-auto`, `gemini-flash-lite`. Thinking depth: суффикс `@think=0..4`.

**Limitations:**
- Нет multimodal input (Gemini's image upload требует proprietary WIZ/ProcessFile RPC)
- Pro без cookie = Flash под капотом
- Single-turn (multi-turn эмулируется через previous messages в prompt)

## Почему не l4ckofsleep/geminiweb2api

Сначала ставили его (v1.3.1, 0⭐). Парсер сломан на новом протоколе Gemini Web (2026-05+): Google теперь возвращает model output как зашифрованный blob `$AT+...` 253 bytes — текст в открытом виде в stream вообще не приходит. Чинить парсер бесполезно — нужен полный реверс нового протокола. Sophomoresty работает с тем же протоколом нормально (правильно ходит в `/StreamGenerate` endpoint).

## Прокси через xray (важно)

Использует SOCKS5 `127.0.0.1:2080` (xray на mini, [[mac_mini_upterm_access]]). **xray ротирует outbound раз в 10 мин** (`cron-safe.py xray-refresh 600` в `~/Services/netproxy-xray/`). Текущий exit — Амстердам NL (AS50132 3nt solutions LLP). Это значит:
- Gemini может временно блокировать запросы после ротации (rate-limit на новом IP)
- При длинной сессии лучше прицепить cookie от не-РФ Google-аккаунта (см. ниже)

**Why:** Google country-блокировка работает по country setting аккаунта, не IP. Если использовать cookie от РФ-аккаунта — Gemini выдаст «недоступно в регионе» даже через NL прокси.

**How to apply:** для стабильной работы желательно создать throwaway Google-аккаунт через тот же прокси (country автоматом = NL) ИЛИ использовать существующий не-РФ аккаунт.

## Cookie flow (если понадобится)

1. Создать Firefox profile с SOCKS5 prefs: `~/Library/Application Support/Firefox/Profiles/gemini-web2api.dedicated`
2. Запустить с `--no-remote --profile <path>` (без `--no-remote` Firefox реюзит default profile)
3. Залогиниться, отправить сообщение
4. Достать `SID, HSID, SSID, APISID, SAPISID, __Secure-1PSID` из `cookies.sqlite` (`SELECT name, value FROM moz_cookies WHERE host LIKE '%google.com%'`)
5. Записать в `cookie.txt`: `SID=...; HSID=...; SSID=...; APISID=...; SAPISID=...; __Secure-1PSID=...`
6. В config.json: `"cookie_file": "cookie.txt"`. Sophomoresty сам считает SAPISIDHASH.

## Команды

- `launchctl list | grep gemini-web2api` — статус
- `launchctl unload/load -w ~/Library/LaunchAgents/com.cebers.gemini-web2api.plist` — рестарт
- `tail -f ~/Разработки/gemini-web2api/logs/launchd.err.log` — логи запросов
- Smoke: `curl -s -X POST http://127.0.0.1:1717/v1/chat/completions -H "Content-Type: application/json" -d '{"model":"gemini-3.5-flash","messages":[{"role":"user","content":"hi"}]}'`

## Альтернатива

[[omniroute_cloud_bus]] на `127.0.0.1:20127` уже даёт Gemini через one Bearer-токен (`gemini-cli/gemini-3.1-flash-lite-preview` и др.) — для большинства задач cebers-pulse/gaechkin/avtero этого достаточно. gemini-web2api имеет смысл, когда нужны: thinking-режимы, raw Gemini Web модели, web search через Gemini native.

## 2026-06-15: z.ai (chat.z.ai) free web — тоже анти-бот тупик
Пробовали GLM как независимый бесплатный voter#5. chat.z.ai из РФ без прокси/логина OK, гостевой JWT через `GET /api/v1/auths/`, модели `/api/models` (GLM-5/4.7/4.5=`0727-360B-API`). Чат: `POST /api/v2/chat/completions` с 3 слоями: (1) Bearer guest JWT, (2) **x-signature** = двойной HMAC-SHA256 (key `key-@@@@)))()((9))-xxxx&&&%%%%%`, period=ts/300000ms, signData=`requestId,..,timestamp,..,user_id,..|base64(content)|ts`) — **воспроизвёл, сервер принял**, (3) **`captcha_verify_param`** в body = Aliyun-токен (SceneId `didk33e0`, prefix `no8xfe`, SDK o.alicdn.com/captcha-frontend/aliyunCaptcha). Aliyun **риск-адаптивна**: из headless+датацентр/РФ эскалирует до визуала → `initAliyunCaptcha` timeout (а это НЕ GeeTest-слайдер → zemlya-решатель не тот тип, как и Qwen CF_APP_WAF). Обёртки `lixia051/zai2api`(Go+Node captcha-provider на CloakBrowser), `XxxXTeam/zai2api`. Проверено 2026-06-15: **логин аккаунтом (cebersdev1@gmail, role=user) капчу НЕ снимает** — тот же `FRONTEND_CAPTCHA_REQUIRED` → капча по IP/окружению, не гостевая. **Вывод: free web GLM = тот же треадмилл, не лечится ни логином, ни подписью.**

✅ **РЕШЕНО 2026-06-15 (commit 39a3397): Делор voter#5 = офиц. API z.ai** `https://api.z.ai/api/paas/v4`, модель **glm-4.5-flash** (бесплатная; платные glm-4.6/air → `1113 Insufficient balance`). Нужно `extra_body {"thinking":{"type":"disabled"}}` иначе reasoning съедает токены → пустой content. Ключ юзера в **launchd plist `EnvironmentVariables:DELOR_ZAI_API_KEY`** (НЕ в git/Obsidian/memory). Завёл через `CebersResearchClient(base_url=zai, api_key, extra_body)` + `AdvisorLLM`. Кворум-страж считает 5-й голос (`ping_zai()`). Без капчи/подписи/прокси, другой вендор → реальная независимость. Это и есть рабочий «платный якорь» (модель бесплатная, но канал официальный и стабильный). CloakBrowser-скрипты теста на мини: ~/test_zai_sig.py, ~/harvest_captcha.py, ~/capture_zai.py.
