7.0 KiB
7.0 KiB
name, description
| name | description |
|---|---|
| gemini-web-generate | 通过 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 工具管理) |
部署
首次使用前需安装依赖:
cd <skill 安装目录>/scripts && npm install
命令速查
以下 <skill> 指本 skill 的安装根目录。
NODE="/home/dazhi/.nvm/versions/node/v22.22.0/bin/node"
CLI="<skill>/scripts/cli.js"
文生图
$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
多轮对话生图
# 首轮(不加 --mode,标签页保持打开)
$NODE $CLI generate --prompt "画一幅日落风景"
# 续次(不加 --mode,可传入新的参考图)
$NODE $CLI generate --session <id> --prompt "在画面中加入一艘小船"
$NODE $CLI generate --session <id> --prompt "换成夜晚风格" --image /path/to/ref.png
# 末轮(加 --mode single,自动关闭标签页)
$NODE $CLI generate --session <id> --prompt "最终调整" --mode single
⚠️ 续次不要加 --mode,保持标签页打开。关闭方式二选一:末轮加 --mode single 自动关,或用 close 命令手动关。
通过对话链接继续
$NODE $CLI generate --chatUrl "https://gemini.google.com/app/xxxx" --prompt "换成水彩风格"
仅下载已有图片(不生成新图)
打开已有生图对话,直接下载所有已生成的图片,不发送新提示词:
$NODE $CLI generate --chatUrl "https://gemini.google.com/app/xxxx" --mode single
不加 --prompt 即进入纯下载模式,自动下载对话中所有已生成图片后关闭标签页。
状态与诊断
# 立即检查状态
$NODE $CLI status --session <id>
# 持续轮询直到完成(适用于 CLI 超时后确认是否后台还在生成)
$NODE $CLI status --session <id> --wait
# 带截图诊断
$NODE $CLI status --session <id> --wait --screenshot
状态返回值:idle(空闲)、generating(生成中)、done(完成)、error(异常)、page_error(页面崩溃)、not_logged_in(未登录)。
下载
# 下载新生成的所有图片
$NODE $CLI download --session <id>
# 下载指定索引(从 0 开始)
$NODE $CLI download --session <id> --index 2
会话管理
# 列出所有活跃会话
$NODE $CLI sessions
# 通过对话链接找回丢失的 session
$NODE $CLI find_session --chatUrl "https://gemini.google.com/app/xxxx" --open
# 关闭指定会话
$NODE $CLI close --session <id>
标准生图流程
1. 确保浏览器已启动
browser action=start
2. 执行生图
默认使用 --mode single(生成后自动关闭标签页)。仅多轮对话时不加 --mode。
NODE="/home/dazhi/.nvm/versions/node/v22.22.0/bin/node"
CLI="<skill>/scripts/cli.js"
$NODE $CLI generate --prompt "提示词" --mode single
CLI 自动完成:创建标签页 → 导航 Gemini → 粘贴参考图 → 输入提示词 → 发送 → 等待生成 → 下载到 output/originals/ → 关闭标签页(single 模式)。
超时默认值:生成 300 秒(5 分钟),下载 120 秒。
推荐加 --screenshot:出错或超时时自动截图保存,便于诊断。
3. 处理结果
成功时:移动图片到最终目录并清理:
# 移动最新生成的图片
LATEST=$(ls -t <skill>/scripts/output/originals/ | head -1)
mv "<skill>/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 "<skill>/scripts/output/originals/$f" 2>/dev/null
done
超时或失败时:用 status 命令检查:
$NODE $CLI status --session <id> --wait
- 返回
done→ 执行$NODE $CLI download --session <id>手动下载 - 返回
generating→ 继续等待(--wait会自动轮询) - 返回
error→ 报告错误,建议修改提示词重试
确认下载成功:下载后必须检查 output/originals/ 目录,确认文件名和文件大小。
4. 发送图片
用 message 工具的 media 参数发送最终图片。不要用截图预览——CLI 下载的是原图。
关键规则
- 浏览器管理用
browser工具,CLI 只负责 Gemini 交互 - 所有路径用绝对路径:node 路径、CLI 路径都用明确的值
- 默认单次生图:所有生图请求默认加
--mode single,生成后自动关闭标签页 - 多轮续次不加 mode:续次不加
--mode。关闭:末轮加--mode single自动关,或close --session <id>手动关 - 不需要
--json:直接读 CLI 文本输出即可 - 参考图路径处理(⚠️ 重要教训):
- ❌ 不要直接用带空格的绝对路径 — shell 会把空格当参数分隔符
- ✅ 先
cd到参考图目录,用相对路径 - ✅ 用
ls | grep动态获取文件名,避免手动写带空格的路径
cd /home/dazhi/.openclaw/workspace/media/参考图/ FILE1=$(ls | grep -v "^[0-9]" | head -1) FILE2=$(ls | grep -v "^[0-9]" | head -2 | tail -1) $NODE $CLI generate --prompt "..." --images "$FILE1,$FILE2" --mode single - 不要用带序号的参考图(如
01-xxx.jpg)— Gemini 会因重复使用而限流 - 失败 3 次后停下来检查 — 不要盲目重试,先排查路径/Gemini 状态/限流原因
- 下载后立即移动到
media/generated/,并清理 originals 中的副本 - 生成完成后初步检查图片内容:确认内容符合预期再发送给用户
- 参考图限流:同一批参考图重复使用多次后 Gemini 可能只回文字,换新参考图或间隔一段时间再试
- 善用
--screenshot:出错或超时自动截图,快速定位问题