--- name: gemini-web-generate description: "通过 Gemini 网页版生图。支持文生图、图生图(单张/多张参考图)、多轮对话生图、会话管理。底层使用 Puppeteer 驱动的 CLI 脚本自动化全流程。使用场景:(1) 用户要求用 Gemini 生成图片,(2) 用户说「Gemini 生图」,(3) 图生图 / 风格转换,(4) 继续已有 Gemini 生图对话。" --- # Gemini 网页版生图 通过 Puppeteer 驱动的 CLI 脚本自动化 Gemini 网页生图全流程:打开标签页 → 导航 → 粘贴参考图 → 输入提示词 → 发送 → 等待生成 → 下载原图。 ## 环境 | 组件 | 说明 | |:---|:---| | CLI 入口 | `scripts/cli.js` | | Node 路径 | `/home/dazhi/.nvm/versions/node/v22.22.0/bin/node` | | 浏览器 CDP | `http://127.0.0.1:9223`(由 `browser` 工具管理) | ## 安装部署 ```bash cd ~/.openclaw/skills/gemini-web-generate/scripts && npm install ``` 安装后 `output/originals/` 和 `output/screenshots/` 会自动创建。 ## 命令参数 以下 `` 指本 skill 的安装根目录(`~/.openclaw/skills/gemini-web-generate`)。 所有命令的 Node 和 CLI 路径使用绝对路径: ```bash NODE="/home/dazhi/.nvm/versions/node/v22.22.0/bin/node" CLI="/scripts/cli.js" ``` ### generate — 生图 ```bash # 文生图 $NODE $CLI generate --prompt "一只可爱的猫" --mode single # 图生图 — 单张参考图 $NODE $CLI generate --prompt "换成水墨风格" --image /path/to/ref.png --mode single # 图生图 — 多张参考图(最多 10 张,逗号分隔) $NODE $CLI generate --prompt "融合这些图片" --images "/path/a.png,/path/b.png" --mode single # 从文件读取提示词(支持换行) $NODE $CLI generate --prompt-file /path/to/prompt.txt --mode single # 从管道读取提示词 echo "提示词" | $NODE $CLI generate --prompt stdin --mode single # 通过对话链接继续生图 $NODE $CLI generate --chatUrl "https://gemini.google.com/app/xxxx" --prompt "换成晚上场景" # 仅下载已有图片(chatUrl 不加 --prompt) $NODE $CLI generate --chatUrl "https://gemini.google.com/app/xxxx" --mode single # 指定超时(毫秒) $NODE $CLI generate --prompt "复杂提示词" --timeout 600000 --download-timeout 180000 --mode single # 出错时自动截图诊断 $NODE $CLI generate --prompt "..." --screenshot --mode single ``` **参数说明**: | 参数 | 说明 | 默认值 | |:---|:---|:---| | `--prompt` | 提示词。设为 `"stdin"` 或管道传值可从标准输入读取 | 必填(含 `--chatUrl` 时可省略进入下载模式) | | `--prompt-file` | 从文件读取提示词 | - | | `--image` | 单张参考图路径 | - | | `--images` | 多张参考图路径,逗号分隔,最多 10 张 | - | | `--session` | 复用已有会话 | - | | `--chatUrl` | 打开指定 Gemini 对话链接 | - | | `--mode` | `single` 生成后关闭标签页,`multi` 保持打开 | `multi` | | `--tool` | 发送前选择的工具名 | 制作图片 | | `--timeout` | 生成超时(毫秒) | 300000 | | `--download-timeout` | 下载超时(毫秒) | 120000 | | `--screenshot` | 出错/超时时自动截图 | 关闭 | | `--json` | NDJSON 模式输出 | 关闭 | ### status — 状态检查 ```bash # 立即返回当前状态 $NODE $CLI status --session # 持续轮询直到完成 $NODE $CLI status --session --wait # 带截图诊断 $NODE $CLI status --session --wait --screenshot ``` 状态值:`idle`(空闲)、`generating`(生成中)、`done`(完成)、`error`(异常)、`page_error`(页面崩溃)、`not_logged_in`(未登录)。 ### download — 下载图片 ```bash # 下载全部新生成图片 $NODE $CLI download --session # 下载指定索引(从 0 开始) $NODE $CLI download --session --index 2 ``` ### 会话管理 ```bash # 列出所有活跃会话 $NODE $CLI sessions # 通过对话链接找回丢失的 session $NODE $CLI find_session --chatUrl "https://gemini.google.com/app/xxxx" --open # 关闭指定会话 $NODE $CLI close --session ``` ## 标准生图流程 ### 1. 确保浏览器已启动 ``` browser action=start ``` ### 2. 执行生图 默认使用 `--mode single`,CLI 自动完成全流程并下载图片到 `/scripts/output/originals/`。 ```bash $NODE $CLI generate --prompt "提示词" --mode single ``` ### 3. 处理结果 **成功** — 移动图片到最终目录并清理: ```bash LATEST=$(ls -t /scripts/output/originals/ | head -1) mv "/scripts/output/originals/$LATEST" ~/.openclaw/workspace/media/generated/ # 清理已移动的文件 for f in Gemini_Generated_Image_*.png generated-*.png; do [ -f "~/.openclaw/workspace/media/generated/$f" ] && rm "/scripts/output/originals/$f" 2>/dev/null done ``` **超时或失败** — 用 status 检查: ```bash $NODE $CLI status --session --wait ``` - 返回 `done` → 执行 `$NODE $CLI download --session ` 手动下载 - 返回 `generating` → 继续等待 - 返回 `error` → 报告错误,建议修改提示词重试 **确认下载成功**:检查 `output/originals/` 目录,确认文件名和大小。 ### 4. 发送图片 用 `message` 工具的 `media` 参数发送最终图片。 ## 多轮对话 ```bash # 首轮(不加 --mode) $NODE $CLI generate --prompt "画一幅日落风景" # 续次(不加 --mode) $NODE $CLI generate --session --prompt "在画面中加入一艘小船" # 末轮(--mode single 自动关闭) $NODE $CLI generate --session --prompt "最终调整" --mode single ``` ⚠️ 续次不加 `--mode`。关闭:末轮加 `--mode single`,或 `close --session `。 ## 注意事项 - 参考图路径不要包含空格 — shell 会把空格当参数分隔符。先 `cd` 到参考图目录再用相对路径 - `browser` 工具负责浏览器生命周期;CLI 只管 Gemini 交互