首页 / 全部技能 / 内容创作 / canghe-danger-gemini-web
内容创作 · freestylefly/canghe-skills

canghe-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.

L5 严管 · 隔离环境与严格审计V2 已复核逆向接口条款/合规凭据/登录态执行命令联网读写文件Dual-pass Audit
Author freestyleflyGitHub freestylefly/canghe-skills ↗License MIT(仓库根 LICENSE)Commit dd0bf35595
管控等级描述 skill 的能力与建议配套的管控措施,不代表质量或安全认证,也不表示可用或不可用。是否使用由用户和管理者决定。不同 agent 宿主对权限的约束各不相同,请勿假定宿主一定会提供安全兜底。第三方 skill 版权归原作者,使用风险由使用者自行承担。

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

实现基础是一份手写的 Gemini Web 客户端:把开源 gemini_webapi 逐文件移植为 TypeScript(client/types/utils),因此能在没有官方 API Key 的情况下出文本与图像。

skills/canghe-danger-gemini-web/SKILL.md
| `scripts/gemini-webapi/*` | TypeScript port of `gemini_webapi` (GeminiClient, types, utils) |
这里在做什么:脚本目录共 25 个文件(main.ts 491 行 CLI 与 gemini-webapi 库),能力来自这份自维护客户端,而非官方 SDK。

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

skills/canghe-danger-gemini-web/scripts/gemini-webapi/constants.ts
'https://gemini.google.com/_/BardChatUi/data/assistant.lamda.BardFrontendService/StreamGenerate',
这里在做什么:把网页版前后端之间实际使用的私有路径固化为常量,后续所有生成请求都打这些路径。

认证第一步是取 access token:init 时用已有 cookie 调 get_access_token,拿不到有效 token 就抛错——所有生成请求都要带上它。

skills/canghe-danger-gemini-web/scripts/gemini-webapi/client.ts
const [token, valid] = await get_access_token(this.cookies, this.proxy, vb);
这里在做什么:token 存入 this.access_token;缺失时 client 直接抛 APIError('Missing access token.'),即没有会话凭据就无法工作。

凭据来源是浏览器会话 cookie:load-browser-cookies 会探测本机调试端口(/json/version,默认 127.0.0.1)并按需 spawn 浏览器进程读取真实登录态。

skills/canghe-danger-gemini-web/scripts/gemini-webapi/utils/load-browser-cookies.ts
const res = await fetch_with_timeout(`http://127.0.0.1:${port}/json/version`, { timeout_ms: 5_000 });
这里在做什么:Node 端直接连本机 Chrome/Chromium/Edge 的调试端口,读出 x.com 之外 Google 域的 cookie 供请求使用。

cookie 与轮换结果被持久化到本地文件:cookie-file 以 JSON 写盘,另有 rotate-1psidts 把刷新得到的 1PSIDTS 缓存到文件。

skills/canghe-danger-gemini-web/scripts/gemini-webapi/utils/cookie-file.ts
await writeFile(p, JSON.stringify(payload, null, 2), 'utf8');
这里在做什么:把过滤后的会话 cookie 落成 cookies.json;rotate-1psidts.ts 同样把新值写到 cachePath,等价于本地保存账号登录态。

图像能力落在 types/image.ts:下载远端图像并写盘(writeFile(dest, buf)),参考图则经 upload-file 走 content-push 上传通道。

skills/canghe-danger-gemini-web/scripts/gemini-webapi/types/image.ts
await writeFile(dest, buf);
这里在做什么:生成/网络抓到的图片字节被直接写入 dest;upload_file 用 FormData POST 到 Endpoint.UPLOAD 换取远端句柄。

多轮会话不是服务端会话,而是把 Gemini 的 chat metadata 存进本地 sessions/<id>.json,靠 --sessionId 复用同一 metadata 续聊。

skills/canghe-danger-gemini-web/SKILL.md
Session files stored in data directory under `sessions/<id>.json`.
这里在做什么:会话状态完全由 skill 自身管理并落盘;--list-sessions 用于列出已有会话。

逆向使用被显式要求“先同意”:首次必须校验 consent 文件(accepted 且 disclaimerVersion 1.0),拒绝则退出。

skills/canghe-danger-gemini-web/SKILL.md
1. Check if consent file exists with `accepted: true` and `disclaimerVersion: "1.0"`
这里在做什么:门禁写进 SKILL.md 流程,由 agent 依文档执行;同意文件位于 ~/.local/share/canghe-skills/gemini-web/consent.json(macOS/Windows 各有路径)。

请求层带重试装饰器 running:客户端未初始化时自动 init,遇到 APIError 且有剩余重试次数则 sleep 1s 后重试。

skills/canghe-danger-gemini-web/scripts/gemini-webapi/utils/decorators.ts
if (e instanceof APIError && r > 0) {
这里在做什么:用装饰器把“保证已 init + 失败重试”包在每次公开方法外层,出图错误另有更严格的重试上限。

2核心能力

01文本生成(三档模型:gemini-3-pro 默认 / gemini-2.5-pro / gemini-2.5-flash)
02图像生成(--image,默认 generated.png)
03Vision 参考图输入(--reference/--ref)
04多轮会话(--sessionId 复用本地 session metadata + --list-sessions)
05Cookie 生命周期自管理(首次浏览器登录、自动缓存、--login 强制刷新)
06代理支持(HTTP_PROXY/HTTPS_PROXY 供受限网络访问 Google)
07同意门禁(consent.json 的 accepted + disclaimerVersion 校验,拒绝即停)
08作为其它 skill 的图像生成后端

3外部依赖

KindDependency / Endpoint
networkgemini.google.com(INIT 页面取令牌 + StreamGenerate 私有生成接口 + batchexecute)
networkaccounts.google.com(RotateCookies 轮换会话 cookie)
networkcontent-push.googleapis.com(参考图上传)
networklh3.googleusercontent.com(返回图像资源 gg-dl)
clibun / npx(以 npx -y bun 直接运行脚本,无运行时抽象)
cli本机 Chrome/Chromium/Edge 可执行文件(按需 spawn 以读取会话 cookie)

4管控建议与判定依据

建议配套管控措施
面向 Agent
隔离环境,逐次授权
面向管理者
严格授权、全量审计、合规确认
判定依据(文件路径与关键语句摘要)
  • SKILL.md / 脚本: 调用未公开或逆向工程的私有 API / 伪造客户端标识
  • SKILL.md / 脚本参数: 包含绕过自动化检测、关闭宿主沙箱或跳过 SSL 证书校验
  • SKILL.md / 会话存储: 读取或复用浏览器用户登录态与会话 Cookie
  • 本地凭据 / 浏览器配置: 读取用户登录 Cookie/会话/密钥环: 浏览器会话 cookie:__Secure-1PSID / __Secure-1PSIDTS 等(本地 cookies.json,或经本机 Chrom
  • scripts/: 执行本地脚本或命令: scripts/main.ts(由 npx -y bun 运行;会按需探测并 spawn 本机浏览器读 cookie)
  • 网络端点: 声明外部网络访问: https://gemini.google.com/app(INIT 取页面令牌)
  • 本地工作目录: 文件读写与工件输出: cookies.json(凭据落盘:写入会话 cookie)
审计说明: (属能力/策略级判定,非恶意植入)。(a) 逆向工程 + 冒充网页客户端:直接调 gemini.google.com 的 StreamGenerate/BardChatUi 私有端点与 accounts.google.com/RotateCookies,靠浏览器会话 cookie 冒充已登录网页端,不是官方 API。(b) 凭证面:读取并使用浏览器会话 cookie(__Secure-1PSID/__Secure-1PSIDTS 等);load-browser-cookies.ts 会探测本机调试端口(/json/version)并 spawn Chrome/Chromium/Edge 读取真实登录态,随后把 cookie 落盘到 cookies.json,并单独轮换 1PSIDTS 再缓存。另有环境变量覆盖数据目录/浏览器路径。(c) 命令面:脚本会启动浏览器进程,请求层带自动重试。程度说明:未发现 TLS 校验降级、未发现反自动化伪装(无 webdriver patching/stealth)、无任意代码执行、无批量采集;定级依据是“逆向私有接口 + 私有凭据 + 冒充网页会话”,非 stealth 手段。

5第二遍独立确认

  • [ok] 逆向 API 而非官方 API(red 主因之一) — constants.ts 直指 gemini.google.com 的 StreamGenerate 私有路径;SKILL.md/description 自述 reverse-engineered,并设 consent 门禁。
  • [ok] 读取浏览器会话 cookie(red 主因之二) — load-browser-cookies.ts 探测 127.0.0.1 调试端口并按需 spawn 浏览器;SKILL.md 自述 First run opens browser for Google auth。
  • [ok] 凭据落盘 — cookie-file.ts 的 writeFile(p, JSON.stringify(payload, null, 2)) 与 rotate-1psidts.ts 的 writeFile(cachePath, v) 两处写盘,路径由 paths.ts 解析。
  • [ok] 无 TLS 降级 / 无 stealth 伪装 / 无任意代码执行 — 相关行为在 bundle 正文与 §3 风险扫描中均零命中;调度只有 init 重试与 sleep。
  • [ok] consent 门禁存在但为“软门禁” — SKILL.md 要求先建 consent.json 再使用;但脚本自身不校验该文件,属文档级约束,已写入 risks。
  • [ok] 功能声明与实现相符 — 文本/图像/vision/多轮四项在 SKILL.md Options 与 main.ts/client.ts 均有对应实现,未见夸大。

6结论

  • 零官方 key 可用:一次浏览器登录后靠缓存的会话 cookie 出文本与图像,省去 API 申请与计费。
  • 能力面完整:文本、图像、vision 参考图、多轮会话、三档模型、代理出口都在一个 CLI 里。
  • cookie 生命周期自动化:落盘 cookies.json 并单独轮换 1PSIDTS 缓存,比手贴 cookie 耐用。
  • 可作为其它 skill 的免费图像后端(description 明列为“image generation backend”)。
  • 有 consent 门禁与明确免责流程,知情使用门槛写清楚了。
  • 适合: 适合个人开发者做实验性/低敏感任务:没有官方 API key 时想用 Gemini 出图或问长文本、需要 vision 输入与多轮对话,或作为其它 skill 的图像后端(需愿意承担账号与稳定性风险)。
    不适合: 不适合企业生产、涉密数据处理、需要稳定 SLA 或合规审计的场景;不适合在主账号上高频使用;不适合无 Chrome/Chromium 且不愿装浏览器依赖的环境。
    Install Agent-Ready
    ① Verified Mirror 2026-10-10
    Option A · Direct DownloadDownload canghe-danger-gemini-web.tar.gz
    sha256: a98a97c1f7c81879…
    Option B · Copy Guide for Agent
    install.json
    agent 读 JSON 指南后会自动从本站下载安装,无需更多说明。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit dd0bf35595.