全部技能 / 内容创作 / baoyu-danger-gemini-web
内容创作 · JimLiu/baoyu-skills

baoyu-danger-gemini-web

Generates images and text via reverse-engineered Gemini Web API. Supports text generation, image generation from prompts, reference images for vision input, and multi-turn conversations. Use when other skills need image generation backend, or when user requests "generate image with Gemini", "Gemini text generation", or needs vision-capable AI generation.

风险提醒:红色 · 谨慎使用AI 侦查报告
作者 JimLiuGitHub JimLiu/baoyu-skills ↗Stars 25926许可 MIT(仓库根 LICENSE,Copyright (c) 2026 Jim Liu;GitHub API license.spdx_id=MIT)commit 1567581c26
agent 宿主通常会约束 skill 执行权限;风险提醒为 AI 侦查观点,不构成质量或安全保证。第三方 skill 仅作拆解与展示,安装使用风险自负,版权归原作者。

1实现原理 · 为什么它能做到

实现基础是一份手写的 Gemini Web 客户端(TypeScript 移植自开源 gemini_webapi),把网页端私有接口当 SDK 用——这就是它能在没有官方 API Key 的情况下出文本与图片的原因。

skills/baoyu-danger-gemini-web/SKILL.md
| `scripts/gemini-webapi/*` | TypeScript port of `gemini_webapi` (GeminiClient, types, utils) |
注:脚本目录 513 行 CLI(main.ts)+ 约 2100 行库代码(client/constants/types/utils),是 baoyu 仓库里代码量最大的 skill。

端点集中在 constants.ts:INIT 取页面令牌、GENERATE 走 StreamGenerate 私有接口、ROTATE_COOKIES 轮换会话 cookie、UPLOAD 传参考图、BATCH_EXEC 走 batchexecute。

skills/baoyu-danger-gemini-web/scripts/gemini-webapi/constants.ts
'https://gemini.google.com/_/BardChatUi/data/assistant.lamda.BardFrontendService/StreamGenerate',
注:同一文件还固化了三个模型的 x-goog-ext-525001261-jspb 头部指纹(含 magic 字符串 9d8ca3786ebdfbea 等),等于把网页版的模型选择参数抄了下来。

认证第一步是抓网页里的 SNlM0e 访问令牌:GET gemini.google.com/app,用正则从 HTML 中提取,随后所有生成请求都带上它。

skills/baoyu-danger-gemini-web/scripts/gemini-webapi/utils/get-access-token.ts
const m = text.match(/\"SNlM0e\":\"(.*?)\"/);
注:令牌值即 this.access_token,配合 cookie 头一起发;找不到就抛 'Missing SNlM0e in response'。

凭据来源是浏览器会话 cookie(__Secure-1PSID / __Secure-1PSIDTS):先读本地 cookie 文件,失败则通过 CDP 连浏览器读 cookie,且默认会复用已运行的本地 Chrome 调试会话。

skills/baoyu-danger-gemini-web/scripts/gemini-webapi/utils/load-browser-cookies.ts
const existingCookies = hasExplicitProfile ? null : await fetch_cookies_from_existing_chrome(30_000, verbose);
注:SKILL.md 也自述这一点:无显式 profile 时可能复用“已运行的本地 Chrome/Chromium 调试会话”;读取后会把过滤出的 cookie 落盘(write_cookie_file(..., 'cdp-existing'))。

Cookie 与令牌被持久化:cookies.json 存 __Secure-1PSID/1PSIDTS 等,且后台定时任务用 RotateCookies 刷新 1PSIDTS 并再次落盘。

skills/baoyu-danger-gemini-web/scripts/gemini-webapi/client.ts
this.cookies['__Secure-1PSIDTS'] = newTs;
注:刷新循环默认 540 秒一次(refresh_interval),每次刷新后调用 write_cookie_file(..., 'refresh');路径由 paths.ts 的 resolveGeminiWebCookiePath() 决定(默认数据目录下 cookies.json,可用 GEMINI_WEB_COOKIE_PATH 覆盖)。

生成请求是表单 POST:body 里带 at(访问令牌)与 f.req(嵌套 JSON 数组),响应是网页版的流式分段文本,需要自行拆包取正文段。

skills/baoyu-danger-gemini-web/scripts/gemini-webapi/client.ts
const body = new URLSearchParams({ at: this.access_token, 'f.req': f_req }).toString();
注:解析失败时按错误码分流:1037 用量超限、1050 模型与历史不一致、1052 模型头无效、1060 IP 被临时封禁(提示用代理)。

多轮会话靠把 Gemini 的 chat metadata 存进本地 session 文件实现:--sessionId 复用同一 metadata 继续对话,消息史也写进 JSON。

skills/baoyu-danger-gemini-web/SKILL.md
Session files stored in data directory under `sessions/<id>.json`.
注:main.ts 会 push user/assistant 两条消息并 saveSession;--list-sessions 按更新时间列最近 100 个(内容取最后一条消息首行)。

逆向使用被显式要求“先同意”:首次使用要写 consent.json(accepted + disclaimerVersion 1.0),拒绝则直接退出。

skills/baoyu-danger-gemini-web/SKILL.md
1. Check if consent file exists with `accepted: true` and `disclaimerVersion: "1.0"`
注:同意文件落在 ~/Library/Application Support 或 ~/.local/share 下的 baoyu-skills/gemini-web/consent.json(Windows 走 %APPDATA%)。

它同时是图像后端:--image 出图(默认 generated.png)、--reference/--ref 做 vision 输入、--promptfiles 从文件读 prompt,因此被仓库定位为“自身即后端”的例外 skill。

docs/image-generation-tools.md
Skills that **are themselves** image-generation backends — currently `baoyu-image-gen`, `baoyu-image-gen` (deprecated), and `baoyu-danger-gemini-web` — do NOT include a `## Image Generation Tools` section.
注:图像由 types/image.ts 的 save() 落盘(writeFile(dest, buf));出图走同一条 StreamGenerate 通道,再从响应里解析图像候选并下载。

2核心能力

01文本生成(多模型:gemini-3-pro 默认 / flash / flash-thinking / 3.1-pro-preview)
02图像生成(--image,prompt 来自参数/文件/stdin)
03Vision 输入(--reference/--ref 参考图)
04多轮会话(--sessionId + 本地 session 文件 + --list-sessions)
05Cookie 生命周期自管理(首次浏览器登录、CDP 读取、后台轮换 1PSIDTS、--login 强制刷新)
06代理支持(HTTP_PROXY/HTTPS_PROXY 供受限网络访问 Google)
07同意门禁(consent.json accepted + disclaimerVersion 校验,拒绝即停)
08作为其它 skill 的图像生成后端(被 docs 明列为“自身即后端”例外)

3外部依赖

类型依赖
networkgemini.google.com(INIT 页面 + StreamGenerate 私有接口 + batchexecute)
networkaccounts.google.com(RotateCookies 轮换 1PSIDTS)
networkwww.google.com(基础页/常量)
networkcontent-push.googleapis.com(参考图上传)
packagebaoyu-chrome-cdp ^0.1.1(npm,用于发现/启动/接管 Chrome 调试会话并读 cookie)
clibun / npx(${BUN_X} 运行时)
cli本机 Chrome/Chromium/Edge 可执行文件(CDP 取 cookie;路径可由 GEMINI_WEB_CHROME_PATH 覆盖)

4风险提醒 风险提醒:红色 · 谨慎使用

风险提醒:红色 · 谨慎使用
  • 账号风险(逆向接口 + 网页会话冒充) — 私有端点与固定 header 指纹随时可能失效或触发风控;README 明确 'Account restrictions possible if API usage detected',代码也处理 IP_TEMPORARILY_BLOCKED。建议只用小号/非关键账号。
  • 浏览器凭据被读取并落盘 — 经 CDP 从真实 Chrome 会话取 __Secure-1PSID/1PSIDTS,并写入本地 cookies.json 与 .cached_1psidts_*.txt;这些文件等价于账号登录态,需按密钥对待(勿放进同步盘/仓库)。
  • 会接管已运行的浏览器调试会话 — 无显式 profile 时复用现有 Chrome 调试会话;若用户正好在调试其它站点,可能干扰本机浏览器状态。用 --profile-dir / GEMINI_WEB_CHROME_PROFILE_DIR 可隔离。
  • --promptfiles 是无过滤的本地文件读取入口 — 任何被指向的文件内容都会被拼进 prompt 发往 Google;上层 skill 或用户若不慎指向密钥文件,等于主动外泄。
  • consent 只是文档级约束 — 脚本自身不校验 consent.json,靠 agent 按 SKILL.md 执行;在无 skill 规范的宿主里可能被直接调用。
  • 内容出境与合规 — 提示词与参考图都会离开本机(含上传到 content-push.googleapis.com),企业内网/涉密内容不适用。
风险提醒:红色,谨慎使用(属能力/策略级判定,非恶意植入)。(a) 逆向工程私有接口 + 冒充网页客户端:直接调 gemini.google.com 的 StreamGenerate/BardChatUi 私有端点,从页面 HTML 抓 SNlM0e 令牌,并用固定 x-goog-ext-525001261-jspb header 冒充网页端选模型——不是官方 API。(b) 凭证面:读取并使用浏览器会话 cookie __Secure-1PSID / __Secure-1PSIDTS;无显式 profile 时经 CDP 复用“已在运行的本地 Chrome/Chromium 调试会话”(Network.getCookies 抓真实登录态),并把过滤后的 cookie 与后台轮换得到的 1PSIDTS 落盘到 cookies.json / .cached_1psidts_*.txt。(c) 命令面:脚本会启动/接管浏览器进程(baoyu-chrome-cdp),并有自动刷新循环在后台持续请求 accounts.google.com。存在账号被限制风险(README 自述 'Account restrictions possible if API usage detected';代码亦有 IP_TEMPORARILY_BLOCKED 分支)。程度说明:未发现 TLS 校验降级、未发现反自动化探测的伪装手法(无 navigator.webdriver patching / patchright / headless 规避)、不做批量定向采集、无任意代码执行——定级依据是“逆向私有接口 + 私有凭据 + 接管本机浏览器会话”,不是 stealth 手段。

5第二遍独立确认

  • [ok] 逆向 API 而非官方 API(red 主因之一) — constants.ts 直指 gemini.google.com 的 StreamGenerate 私有路径;get-access-token.ts 用正则从页面抓 SNlM0e;SKILL.md/description 自述 reverse-engineered,README 有 Disclaimer 段落。
  • [ok] 读取浏览器 cookie(red 主因之二) — load-browser-cookies.ts 走 CDP(引用 'Network.getCookies')读 cookie;get-access-token.ts 优先本地 cookie 文件,失败回落 CDP;client.ts 在 init/refresh 两处写 cookie 文件。
  • [ok] CDP 复用已运行 Chrome 调试会话 — SKILL.md 原文与 load-browser-cookies.ts 的 fetch_cookies_from_existing_chrome(30_000, ...) 一致;另有 hasExplicitProfile 判断(设了 --profile-dir 或 GEMINI_WEB_CHROME_PROFILE_DIR 才跳过复用)。
  • [ok] token 落盘 — cookie-file.ts write_cookie_file → writeFile(p, JSON.stringify(payload, null, 2));rotate-1psidts.ts 另写 .cached_1psidts_<sid>.txt。paths.ts 默认数据目录可用 GEMINI_WEB_DATA_DIR/GEMINI_WEB_COOKIE_PATH 覆盖。
  • [ok] 无 TLS 降级 / 无 stealth 反检测 / 无任意代码执行 — grep rejectUnauthorized / NODE_TLS / --ignore-certificate 与 webdriver / patchright / blink-features 均零命中;无 eval/new Function/远程脚本加载;Chrome 以本机真实 profile 启动(--remote-debugging-port),未做指纹伪装。
  • [ok] consent 门禁存在但为“软门禁” — SKILL.md 要求先建 consent.json 再使用;但门禁由 agent 按文档执行,脚本自身不校验该文件——属文档级约束,已在 risks 写明。
  • [ok] meta 元数据 — GitHub API:MIT、25926 stars、pushed_at 2026-09-10T15:13:43Z;本地 HEAD 与 pin 1567581c26ec… 一致。

6结论

  • 零官方 key 可用:只需一次浏览器登录,之后靠缓存的会话 cookie 出文本与图像,省去 API 申请与计费。
  • 能力面完整:文本、图像、vision 参考图、多轮会话、四个模型档位、代理出口都在一个 CLI 里。
  • cookie 生命周期自动化:后台轮换 1PSIDTS 并在失败时回落浏览器读取,比手贴 cookie 的方案耐用。
  • 可作为其它 skill 的免费图像后端(仓库文档明列为“自身即后端”的例外)。
  • 有 consent 门禁与失败码提示(用量超限/模型不符/IP 封禁都给了明确文案),知情使用门槛写清楚了。
  • 适合:适合个人开发者做实验性/低敏感任务:没有官方 API key 时想用 Gemini 出图或问长文本、需要 vision 输入与多轮对话、或作为其它 baoyu skill 的图像后端(需愿意承担账号与稳定性风险)。
    不适合:不适合企业生产、涉密数据处理、需要稳定 SLA 或合规审计的场景;不适合在主账号上高频使用;不适合无 Chrome/Chromium 且不愿装浏览器依赖的环境。
    安装 agent 直装可复制
    ① 本站镜像 更新 2026-09-15
    方式 A · 人下载镜像包下载 baoyu-danger-gemini-web.tar.gz
    sha256: 076923f8aed80181…
    方式 B · JSON 格式安装指南,复制给 agent
    安装指南
    agent 读 JSON 指南后会自动从本站下载安装,无需更多说明。
    ② 上游 GitHub · 原始来源
    能访问 GitHub?直接去上游安装(实时版,可能已更新)GitHub 原始 ↗
    本页镜像锁定 commit 1567581c26;上游为实时仓库。
    来源信息 GitHub 原始
    作者 / 仓库JimLiu / JimLiu/baoyu-skills
    Stars25926
    最近推送2026-09-10
    本 skill commit1567581c26
    许可MIT(仓库根 LICENSE,Copyright (c) 2026 Jim Liu;GitHub API license.spdx_id=MIT)
    本站信息
    收录日期2026-09-06
    分类内容创作
    侦查报告AI 侦查 · 2 遍 · 2026-09-06
    本站镜像与 GitHub 原始是不同来源:本站锁定 commit 快照经 /r2 分发;GitHub 为实时上游,内容可能已更新。
    同分类邻近