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.

View Source
name:baoyu-danger-gemini-webdescription: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.

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:

  • Determine this SKILL.md file's directory path as SKILL_DIR

  • Script path = ${SKILL_DIR}/scripts/.ts

  • Replace all ${SKILL_DIR} in this document with the actual path
  • Script Reference:

    ScriptPurpose
    scripts/main.tsCLI 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:

  • Check if consent file exists with accepted: true and disclaimerVersion: "1.0"

  • If valid consent exists → print warning with acceptedAt date, proceed

  • 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
  • Consent file format: {"version":1,"accepted":true,"acceptedAt":"","disclaimerVersion":"1.0"}

  • Preferences (EXTEND.md)

    Use Bash to check EXTEND.md existence (priority order):

    # Check project-level first
    test -f .baoyu-skills/baoyu-danger-gemini-web/EXTEND.md && echo "project"

    Then user-level (cross-platform: $HOME works on macOS/Linux/WSL)


    test -f "$HOME/.baoyu-skills/baoyu-danger-gemini-web/EXTEND.md" && echo "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
    npx -y bun ${SKILL_DIR}/scripts/main.ts "Your prompt"
    npx -y bun ${SKILL_DIR}/scripts/main.ts --prompt "Your prompt" --model gemini-2.5-pro

    Image generation


    npx -y bun ${SKILL_DIR}/scripts/main.ts --prompt "A cute cat" --image cat.png
    npx -y bun ${SKILL_DIR}/scripts/main.ts --promptfiles system.md content.md --image out.png

    Vision input (reference images)


    npx -y bun ${SKILL_DIR}/scripts/main.ts --prompt "Describe this" --reference image.png
    npx -y bun ${SKILL_DIR}/scripts/main.ts --prompt "Create variation" --reference a.png --image out.png

    Multi-turn conversation


    npx -y bun ${SKILL_DIR}/scripts/main.ts "Remember: 42" --sessionId session-abc
    npx -y bun ${SKILL_DIR}/scripts/main.ts "What number?" --sessionId session-abc

    JSON output


    npx -y bun ${SKILL_DIR}/scripts/main.ts "Hello" --json

    Options

    OptionDescription
    --prompt, -pPrompt text
    --promptfilesRead prompt from files (concatenated)
    --model, -mModel: gemini-3-pro (default), gemini-2.5-pro, gemini-2.5-flash
    --image [path]Generate image (default: generated.png)
    --reference, --refReference images for vision input
    --sessionIdSession ID for multi-turn conversation
    --list-sessionsList saved sessions
    --jsonOutput as JSON
    --loginRefresh cookies, then exit
    --cookie-pathCustom cookie file path
    --profile-dirChrome profile directory

    Models

    ModelDescription
    gemini-3-proDefault, latest
    gemini-2.5-proPrevious pro
    gemini-2.5-flashFast, lightweight

    Authentication

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

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

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

    Environment Variables

    VariableDescription
    GEMINI_WEB_DATA_DIRData directory
    GEMINI_WEB_COOKIE_PATHCookie file path
    GEMINI_WEB_CHROME_PROFILE_DIRChrome profile directory
    GEMINI_WEB_CHROME_PATHChrome executable path
    HTTP_PROXY, HTTPS_PROXYProxy 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.