ホーム / 全スキル / コンテンツ制作 / baoyu-danger-gemini-web
コンテンツ制作 · JimLiu/baoyu-skills

baoyu-danger-gemini-web

リバースエンジニアリングされたGemini Web APIを介して画像とテキストを生成します。テキスト生成、プロンプトからの画像生成、ビジョン入力用の参照画像、マルチターン会話をサポートします。他のスキルで画像生成バックエンドが必要な場合や、ユーザーが「Geminiで画像を生成」「Geminiテキスト生成」を要求した際、またはビジョン対応AI生成が必要な場合に使用します。

L5 厳格管理 · 隔離環境と厳格な監査V2 人間監査済リバースAPI規約/コンプライアンス認証情報/セッションコマンド実行ネットワーク通信ファイル書き込みDual-pass Audit
Author JimLiuGitHub JimLiu/baoyu-skills ↗Stars 25926License MIT(仓库根 LICENSE,Copyright (c) 2026 Jim Liu;GitHub API license.spdx_id=MIT)Commit 1567581c26
管理レベルは Skill の能力と推奨統制措置を示すものであり、品質や安全性の認証、利用可否の判定ではありません。使用の可否はユーザーおよび管理者が決定します。Agent 環境によって制約が異なるため、自動保護を仮定しないでください。第三者製 Skill の著作権は原著作者に帰属し、利用リスクは利用者が負います。

1仕組みと動作原理

実装の基盤は手書きのGemini Webクライアント(オープンソースのgemini_webapiから移植されたTypeScript)であり、Web版のプライベートAPIをSDKとして利用しています。これにより、公式APIキーなしでテキストや画像を生成できます。

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リポジトリ内で最大のコードベースを持つスキルです。

エンドポイントは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',
同ファイルには3つのモデルのx-goog-ext-525001261-jspbヘッダーのフィンガープリント(magic文字列9d8ca3786ebdfbeaなどを含む)も固定値として埋め込まれており、実質的にWeb版のモデル選択パラメータを再現しています。

認証の最初のステップはWebページからのSNlM0eアクセストークンの取得です:gemini.google.com/appに対してGETを実行し、正規表現で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にも記載されています:明示的なプロファイルが指定されていない場合、「実行中のローカル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配列)を含め、レスポンスはWeb版のストリーミングチャンクテキストとなるため、本文チャンクを抽出するために独自にアンパックする必要があります。

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のチャットメタデータをローカルセッションファイルに保存することで実現されます:--sessionIdで同一のメタデータを再利用して対話を継続し、メッセージ履歴もJSONに記録されます。

skills/baoyu-danger-gemini-web/SKILL.md
Session files stored in data directory under `sessions/<id>.json`.
main.tsはuser/assistantの2つのメッセージをpushして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でビジョン入力、--promptfilesでファイルからプロンプトを読み込むため、リポジトリ内では「単体でバックエンドとなる」例外的なスキルとして位置付けられています。

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、プロンプトは引数/ファイル/stdinから取得)
03Vision入力(--reference/--ref 参照画像)
04マルチターン会話(--sessionId + ローカルセッションファイル + --list-sessions)
05Cookieライフサイクルの自己管理(初回ブラウザログイン、CDP取得、バックグラウンドでの1PSIDTSローテーション、--loginによる強制更新)
06プロキシサポート(制限されたネットワークからGoogleへアクセスするためのHTTP_PROXY/HTTPS_PROXY)
07同意ゲート(consent.json accepted + disclaimerVersionの検証、拒否時は停止)
08他のスキル向けの画像生成バックエンド(ドキュメントで「単体でバックエンド」の例外として明記)

3外部依存関係

KindDependency / Endpoint
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推奨統制措置と判定根拠

安全運用のための推奨統制措置
Agent 向け
隔離環境で実行、都度明示的な認可
管理者向け
厳格な認可、全量監査、コンプライアンス確認
判定根拠(ファイルパスと抜粋)
  • SKILL.md / 脚本: 非公開またはリバースエンジニアリングされたプライベートAPIの呼び出し / クライアント識別の偽装
  • SKILL.md / 脚本参数: 自動検出のバイパス、ホストサンドボックスの無効化、またはSSL証明書検証のスキップを含む
  • SKILL.md / 会话存储: ブラウザのユーザーログイン状態およびセッションCookieの読み取りまたは再利用
  • 本地凭据 / 浏览器配置: ユーザーのログインCookie/セッション/キーチェーンの読み取り: ブラウザセッションCookie: __Secure-1PSID / __Secure-1PSIDTS(ローカルのcookies.jsonまたはCDP Network経由)
  • scripts/: ローカルスクリプトまたはコマンドの実行: scripts/main.ts(bunで実行。必要に応じてChromeデバッグセッションを起動/制御)
  • 网络端点: 外部ネットワークアクセスの宣言: https://gemini.google.com/app(SNlM0eトークン取得のためのINIT)
  • 本地工作目录: ファイルの読み書きおよび成果物の出力: cookies.json(クレデンシャルの永続化: __Secure-1PSID/1PSIDTSの書き込み)
監査ノート: (悪意ある埋め込みではなく、機能・ポリシーレベルの判定)。(a) リバースエンジニアリングされたプライベートAPI + Webクライアントの偽装:gemini.google.comのStreamGenerate/BardChatUiプライベートエンドポイントを直接呼び出し、ページHTMLからSNlM0eトークンを取得し、固定のx-goog-ext-525001261-jspbヘッダーを使用してWebクライアントのモデル選択を偽装しています(公式APIではありません)。(b) クレデンシャル面:ブラウザのセッションCookie __Secure-1PSID / __Secure-1PSIDTSを読み取って使用します。明示的なプロファイルがない場合はCDP経由で「実行中のローカルChrome/Chromiumデバッグセッション」を再利用し(Network.getCookiesで実際のログイン状態を取得)、フィルタリングされたCookieとバックグラウンドでローテーションされた1PSIDTSをcookies.json / .cached_1psidts_*.txtに永続化します。(c) コマンド面:スクリプトはブラウザプロセス(baoyu-chrome-cdp)を起動または制御し、バックグラウンドの自動更新ループによってaccounts.google.comへリクエストを送信し続けます。アカウント制限のリスクが存在します(READMEに「API使用が検出された場合のアカウント制限の可能性」と記載。コードにもIP_TEMPORARILY_BLOCKEDの分岐が存在)。重大度に関する説明:TLS検証のダウングレードや自動化検出回避の手法(navigator.webdriver patching / patchright / headless回避など)は確認されておらず、一括ターゲットスクレイピングや任意コード実行も行いません。評価基準は「プライベートAPIのリバースエンジニアリング + プライベート認証情報 + ローカルブラウザセッションの制御」によるものであり、ステルス手法によるものではありません。

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結論

  • 公式キー不要で利用可能:1回のブラウザログインのみで、以降はキャッシュされたセッションCookieを使用してテキストや画像を生成でき、API申請や課金の手間を省けます。
  • 充実した機能範囲:テキスト、画像、ビジョン参照画像、マルチターン会話、4つのモデル層、プロキシルーティングが単一のCLIに統合されています。
  • Cookieライフサイクルの自動化:バックグラウンドで1PSIDTSをローテーションし、失敗時にはブラウザからの読み取りにフォールバックするため、Cookieを手動で貼り付ける方法よりも耐久性があります。
  • 他のスキルの無料画像バックエンドとして利用可能(リポジトリドキュメントで「単体でバックエンド」の例外として明記)。
  • 同意ゲートとエラーコードのガイダンスを装備(クォータ超過、モデル不一致、IPブロックに対して明確なメッセージを提供)、インフォームドコンセントの要件が明確に提示されています。
  • 最適な用途: 個人開発者による実験的または機密性の低いタスクに最適:公式APIキーなしでGeminiを使用して画像生成や長文テキストの問い合わせを行いたい場合、ビジョン入力やマルチターン会話が必要な場合、または他のbaoyuスキルの画像バックエンドとして利用する場合(アカウントや安定性のリスクを受け入れる必要があります)。
    不向きな用途: エンタープライズの本番環境、機密データ処理、安定したSLAやコンプライアンス監査が必要な環境には不適。メインアカウントでの高頻度利用には不適。Chrome/Chromiumがなく、ブラウザ依存関係のインストールを望まない環境には不適。
    Install Agent-Ready
    ① Verified Mirror 2026-09-15
    Option A · Direct DownloadDownload baoyu-danger-gemini-web.tar.gz
    sha256: 076923f8aed80181…
    Option B · Copy Guide for Agent
    install.json
    Agent はこの JSON ガイドから自動的にダウンロードして検証します。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit 1567581c26.