Skill flagged — review recommended

ClawHub Security found sensitive or high-impact capabilities. Review the scan results before using.

web-ai-image-generation

v1.0.0

自动通过浏览器复用 Gemini 或 ChatGPT 登录态,提交提示词生成图片并下载保存到本地指定目录。

0· 27· 1 versions· 0 current· 0 all-time· Updated 2h ago· MIT-0

Install

openclaw skills install web-ai-image-generation

Web AI 生图

当用户需要通过 Gemini、ChatGPT 等网页端 AI 服务生成图片时,使用这个 skill。

能力说明

这个 skill 通过浏览器自动化打开真实的 Gemini / ChatGPT 网页,复用浏览器 profile 中的登录态,提交生图提示词,等待图片生成,并把图片保存到本地目录。

适合以下场景:

  • 不直接调用 Gemini / OpenAI 图片 API,而是复用网页端账号能力。
  • 自动生成 AI 封面图、营销图、短视频封面或其他提示词图片。
  • 需要复用网页登录状态,减少重复登录。
  • 需要处理 blob: 图片、Google 托管图片或 ChatGPT estuary/content 图片下载。

文件结构

web-ai-image-generation/
├── SKILL.md
├── DEPENDENCIES.md
├── requirements.txt
└── scripts/
    └── ai_image_playwright.py

说明:

  • scripts/ai_image_playwright.py:命令行脚本,包含 Gemini / ChatGPT 生图、等待、下载逻辑。
  • requirements.txt:Python 包依赖。
  • DEPENDENCIES.md:Python、Playwright、浏览器和系统环境安装说明。

默认目录

默认输出到当前 skill 目录下的运行时目录。默认 profile 和输出目录为:

skills/web-ai-image-generation/.runtime/profile
skills/web-ai-image-generation/.runtime/output

重要说明

浏览器通过 Playwright 的 launch_persistent_context() 启动 persistent context,并复用指定用户数据目录中的登录态。

首次使用全新 profile 时,需要在弹出的浏览器里手动登录 Gemini 和/或 ChatGPT。后续运行会自动复用该 profile 中保存的登录状态。

安装依赖

详见 DEPENDENCIES.md

快速安装:

python -m pip install -r requirements.txt
python -m playwright install chromium

命令行用法

Gemini 生图

python scripts/ai_image_playwright.py \
  --platform gemini \
  --prompt "一张竖屏 3:4 的短视频封面,主题是 AI 自动剪辑" \
  --output-dir ./output

ChatGPT 生图

python scripts/ai_image_playwright.py \
  --platform chatgpt \
  --prompt "一张电影海报风格的 AI 短视频封面" \
  --output-dir ./output

使用内置封面提示词构造

如果不传 --prompt,可以传 --title--description,脚本会自动构造短视频封面提示词:

python scripts/ai_image_playwright.py \
  --platform gemini \
  --title "AI 自动剪辑教程" \
  --description "如何用 AI 自动生成短视频" \
  --output-dir ./output

指定独立登录态目录

python scripts/ai_image_playwright.py \
  --platform chatgpt \
  --prompt "一张科技感产品海报" \
  --profile-dir ~/.ai-image-playwright/chatgpt-profile \
  --output-dir ./output

工作流概览

1. 启动浏览器

  • 使用 playwright.async_api.async_playwright()
  • 通过 launch_persistent_context() 启动 Chromium persistent context。
  • 当前实现使用 headless=False,需要桌面环境。
  • 默认优先尝试 /usr/bin/google-chrome,不存在则回退到 Playwright Chromium。
  • 启动后根据平台打开 Gemini 或 ChatGPT。
  • 如果跳转到登录页,会等待用户在浏览器中手动登录。

2. Gemini 生图流程

  • 打开 https://gemini.google.com/app
  • 尝试点击生图入口,支持 制作图片生成图片Create imageGenerate image 等文本。
  • 将提示词输入到 Gemini 的富文本输入框。
  • 点击发送按钮或按 Enter
  • 轮询页面中的大尺寸图片,判断图片是否生成完成。
  • 下载图片时优先处理:
    • blob: 图片:通过页面内 Canvas 提取。
    • googleusercontent.com / gstatic.com 图片:通过 Playwright request 下载。

3. ChatGPT 生图流程

  • 打开 https://chatgpt.com/
  • 尝试点击生图入口,支持 生成图片Create imageGenerate image 等文本。
  • 将提示词输入到 ChatGPT composer。
  • 点击发送按钮或按 Enter
  • 轮询页面中的图片候选,识别生成图。
  • ChatGPT 生成图常见特征:
    • URL 包含 chatgpt.com/backend-api/estuary/content
    • alt 包含 已生成图片
    • CSS class 包含特定图片布局特征。
    • ChatGPT 域名下的大尺寸图片。
  • 下载 estuary/content 图片时使用 page.request.get(),这样可以携带当前 Playwright context 的登录 cookie。
  • 如果 HTTP 下载失败,则尝试 Canvas 提取。

提示词规则

脚本支持两种提示词来源。

1. 直接传入完整提示词

如果传入 --prompt,脚本会原样发送该提示词,不做改写:

python scripts/ai_image_playwright.py \
  --platform gemini \
  --prompt "生成一张 3:4 竖屏封面,主题是 AI 自动剪辑,科技感,标题清晰"

2. 使用标题和描述自动构造封面提示词

如果不传 --prompt,脚本会使用 --title--description 调用内置 build_prompt() 构造提示词。

当前模板含义是:

  • 要求生成短视频竖屏封面图。
  • 比例为 3:4。
  • 主题来自 --title
  • 如果有 --description,会补充视频内容说明。
  • 要求标题文字必须清晰醒目,并包含原始标题。
  • 要求适合手机信息流。
  • 要求构图自然、有设计感、高清高质量。
  • 明确禁止生成 APP 界面、手机边框、点赞评论按钮、状态栏或导航栏。

模板生成的提示词大致如下:

请为短视频生成一张竖屏封面图片(3:4比例),主题是:{title}。{desc_part}

要求:标题文字必须清晰醒目并包含:'{title}';画面适合手机信息流;构图自然、有设计感、高清高质量;不要包含 APP 界面、手机边框、点赞评论按钮、状态栏或导航栏。

图片下载与保存

默认输出目录在当前 skill 文件夹下:

skills/web-ai-image-generation/.runtime/output

也可以通过 --output-dir 指定其他目录。

保存流程:

  1. 生图完成后,脚本扫描页面中的所有 img
  2. 根据平台筛选生成图片候选:
    • Gemini:优先选择尺寸大于约 400x400 的大图。
    • ChatGPT:优先识别 chatgpt.com/backend-api/estuary/content已生成图片、大尺寸 ChatGPT 图片等候选。
  3. 最多取最新 4 张候选图。
  4. 按平台和序号保存为 JPEG 文件。

文件名示例:

  • gemini_image_1.jpg
  • gemini_image_2.jpg
  • chatgpt_image_1.jpg
  • chatgpt_image_2.jpg

下载策略:

  • ChatGPT 的 chatgpt.com/backend-api/estuary/content 图片使用 page.request.get() 下载,可以携带当前登录 cookie。
  • Gemini 的 googleusercontent.com / gstatic.com 图片也使用 page.request.get() 下载。
  • 如果图片是 blob:,或 HTTP 下载失败,会尝试在页面内用 Canvas drawImage() 提取,再通过 toDataURL('image/jpeg', 0.95) 转为 JPEG base64,最后在 Python 端解码写入文件。
  • 文件小于约 10KB 会被认为无效并删除。

脚本运行成功后会在标准输出打印保存的图片路径。

调用建议

如果要在其他流程里调用这个 skill:

  1. 传入平台、提示词、输出目录、profile 目录。
  2. 由外部流程决定如何使用生成后的图片。
  3. 不要把 API Key 或账号凭据写入脚本。
  4. platform 做严格校验,只允许 geminichatgpt

常见问题

找不到“制作图片”或“生成图片”

可能原因:

  • 网页语言与选择器不匹配。
  • Gemini / ChatGPT UI 更新。
  • 当前账号没有生图入口。

处理建议:

  • 增加更多语言的选择器。
  • 截图确认页面状态。
  • 检查账号是否具备生图能力。

页面生成了图片但下载失败

可能原因:

  • 图片跨域导致 Canvas 读取失败。
  • 图片 URL 需要登录 cookie。
  • 图片 URL 规则发生变化。

处理建议:

  • ChatGPT 图片优先使用 page.request.get()
  • Gemini 增加更多图片域名白名单。
  • 必要时使用页面截图作为兜底方案。

一直等待直到超时

可能原因:

  • 没有成功切换到生图模式。
  • 提示词触发安全策略。
  • 页面出现错误提示,但代码没有识别。

处理建议:

  • 检查页面错误文案。
  • 增加对“生成失败”“无法生成”等状态的检测。
  • 调整等待策略,不只依赖图片数量稳定。

后续优化建议

  • 增加截图和 HTML dump,便于排查 UI 变化。
  • 把等待逻辑改成“生成中状态消失 + 图片出现”。
  • 对无桌面服务器支持 xvfb 或验证 headless 模式。
  • 将平台识别、图片识别、下载逻辑拆成更小的可测试函数。

Version tags

latestvk97700h1jwndcrd8bbv3vsgsy985whs3