🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

Baoyu Danger Gemini Web

by @nengnengz

Generates images and text via reverse-engineered Gemini Web API. Supports text generation, image generation from prompts, reference images for vision input,...

Versionv0.1.1
Downloads504
TERMINAL
clawhub install baoyu-danger-gemini-web-2

πŸ“– About This Skill


name: baoyu-danger-gemini-web description: 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. version: 1.56.1 metadata: openclaw: homepage: https://github.com/JimLiu/baoyu-skills#baoyu-danger-gemini-web requires: anyBins: - bun - npx

Gemini Web Client

Text/image generation via Gemini Web API. Supports reference images and multi-turn conversations.

Script Directory

Important: All scripts are located in the scripts/ subdirectory of this skill.

Agent Execution Instructions: 1. Determine this SKILL.md file's directory path as {baseDir} 2. Script path = {baseDir}/scripts/.ts 3. Resolve ${BUN_X} runtime: if bun installed β†’ bun; if npx available β†’ npx -y bun; else suggest installing bun 4. Replace all {baseDir} and ${BUN_X} in this document with actual values

Script Reference: | Script | Purpose | |--------|---------| | scripts/main.ts | CLI entry point for text/image generation | | scripts/gemini-webapi/* | TypeScript port of gemini_webapi (GeminiClient, types, utils) |

Consent Check (REQUIRED)

Before first use, verify user consent for reverse-engineered API usage.

Consent file locations:

  • macOS: ~/Library/Application Support/baoyu-skills/gemini-web/consent.json
  • Linux: ~/.local/share/baoyu-skills/gemini-web/consent.json
  • Windows: %APPDATA%\baoyu-skills\gemini-web\consent.json
  • Flow: 1. Check if consent file exists with accepted: true and disclaimerVersion: "1.0" 2. If valid consent exists β†’ print warning with acceptedAt date, proceed 3. If no consent β†’ show disclaimer, ask user via AskUserQuestion: - "Yes, I accept" β†’ create consent file with ISO timestamp, proceed - "No, I decline" β†’ output decline message, stop 4. Consent file format: {"version":1,"accepted":true,"acceptedAt":"","disclaimerVersion":"1.0"}


    Preferences (EXTEND.md)

    Check EXTEND.md existence (priority order):

    # macOS, Linux, WSL, Git Bash
    test -f .baoyu-skills/baoyu-danger-gemini-web/EXTEND.md && echo "project"
    test -f "${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-danger-gemini-web/EXTEND.md" && echo "xdg"
    test -f "$HOME/.baoyu-skills/baoyu-danger-gemini-web/EXTEND.md" && echo "user"
    

    # PowerShell (Windows)
    if (Test-Path .baoyu-skills/baoyu-danger-gemini-web/EXTEND.md) { "project" }
    $xdg = if ($env:XDG_CONFIG_HOME) { $env:XDG_CONFIG_HOME } else { "$HOME/.config" }
    if (Test-Path "$xdg/baoyu-skills/baoyu-danger-gemini-web/EXTEND.md") { "xdg" }
    if (Test-Path "$HOME/.baoyu-skills/baoyu-danger-gemini-web/EXTEND.md") { "user" }
    

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Path β”‚ Location β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ .baoyu-skills/baoyu-danger-gemini-web/EXTEND.md β”‚ Project directory β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ $HOME/.baoyu-skills/baoyu-danger-gemini-web/EXTEND.md β”‚ User home β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Result β”‚ Action β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Found β”‚ Read, parse, apply settings β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ Not found β”‚ Use defaults β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

    EXTEND.md Supports: Default model | Proxy settings | Custom data directory

    Usage

    # Text generation
    ${BUN_X} {baseDir}/scripts/main.ts "Your prompt"
    ${BUN_X} {baseDir}/scripts/main.ts --prompt "Your prompt" --model gemini-3-flash

    Image generation

    ${BUN_X} {baseDir}/scripts/main.ts --prompt "A cute cat" --image cat.png ${BUN_X} {baseDir}/scripts/main.ts --promptfiles system.md content.md --image out.png

    Vision input (reference images)

    ${BUN_X} {baseDir}/scripts/main.ts --prompt "Describe this" --reference image.png ${BUN_X} {baseDir}/scripts/main.ts --prompt "Create variation" --reference a.png --image out.png

    Multi-turn conversation

    ${BUN_X} {baseDir}/scripts/main.ts "Remember: 42" --sessionId session-abc ${BUN_X} {baseDir}/scripts/main.ts "What number?" --sessionId session-abc

    JSON output

    ${BUN_X} {baseDir}/scripts/main.ts "Hello" --json

    Options

    | Option | Description | |--------|-------------| | --prompt, -p | Prompt text | | --promptfiles | Read prompt from files (concatenated) | | --model, -m | Model: gemini-3-pro (default), gemini-3-flash, gemini-3-flash-thinking, gemini-3.1-pro-preview | | --image [path] | Generate image (default: generated.png) | | --reference, --ref | Reference images for vision input | | --sessionId | Session ID for multi-turn conversation | | --list-sessions | List saved sessions | | --json | Output as JSON | | --login | Refresh cookies, then exit | | --cookie-path | Custom cookie file path | | --profile-dir | Chrome profile directory |

    Models

    | Model | Description | |-------|-------------| | gemini-3-pro | Default, latest 3.0 Pro | | gemini-3-flash | Fast, lightweight 3.0 Flash | | gemini-3-flash-thinking | 3.0 Flash with thinking | | gemini-3.1-pro-preview | 3.1 Pro preview (empty header, auto-routed) |

    Authentication

    First run opens browser for Google auth. Cookies cached automatically.

    When no explicit profile dir is set, cookie refresh may reuse an already-running local Chrome/Chromium debugging session tied to a standard user-data dir. Set --profile-dir or GEMINI_WEB_CHROME_PROFILE_DIR to force a dedicated profile and skip existing-session reuse. This is a best-effort CDP session reuse path, not the Chrome DevTools MCP prompt-based --autoConnect flow described in Chrome's official docs.

    Supported browsers (auto-detected): Chrome, Chrome Canary/Beta, Chromium, Edge.

    Force refresh: --login flag. Override browser: GEMINI_WEB_CHROME_PATH env var.

    Environment Variables

    | Variable | Description | |----------|-------------| | GEMINI_WEB_DATA_DIR | Data directory | | GEMINI_WEB_COOKIE_PATH | Cookie file path | | GEMINI_WEB_CHROME_PROFILE_DIR | Chrome profile directory | | GEMINI_WEB_CHROME_PATH | Chrome executable path | | HTTP_PROXY, HTTPS_PROXY | Proxy for Google access (set inline with command) |

    Sessions

    Session files stored in data directory under sessions/.json.

    Contains: id, metadata (Gemini chat state), messages array, timestamps.

    Extension Support

    Custom configurations via EXTEND.md. See Preferences section for paths and supported options.

    πŸ’‘ Examples

    # Text generation
    ${BUN_X} {baseDir}/scripts/main.ts "Your prompt"
    ${BUN_X} {baseDir}/scripts/main.ts --prompt "Your prompt" --model gemini-3-flash

    Image generation

    ${BUN_X} {baseDir}/scripts/main.ts --prompt "A cute cat" --image cat.png ${BUN_X} {baseDir}/scripts/main.ts --promptfiles system.md content.md --image out.png

    Vision input (reference images)

    ${BUN_X} {baseDir}/scripts/main.ts --prompt "Describe this" --reference image.png ${BUN_X} {baseDir}/scripts/main.ts --prompt "Create variation" --reference a.png --image out.png

    Multi-turn conversation

    ${BUN_X} {baseDir}/scripts/main.ts "Remember: 42" --sessionId session-abc ${BUN_X} {baseDir}/scripts/main.ts "What number?" --sessionId session-abc

    JSON output

    ${BUN_X} {baseDir}/scripts/main.ts "Hello" --json

    βš™οΈ Configuration

    | Option | Description | |--------|-------------| | --prompt, -p | Prompt text | | --promptfiles | Read prompt from files (concatenated) | | --model, -m | Model: gemini-3-pro (default), gemini-3-flash, gemini-3-flash-thinking, gemini-3.1-pro-preview | | --image [path] | Generate image (default: generated.png) | | --reference, --ref | Reference images for vision input | | --sessionId | Session ID for multi-turn conversation | | --list-sessions | List saved sessions | | --json | Output as JSON | | --login | Refresh cookies, then exit | | --cookie-path | Custom cookie file path | | --profile-dir | Chrome profile directory |