mcpField
D
download-gemini-images

download-gemini-images

github.com/daymade创意与媒体1.5k330 次安装今天更新
代码仓库

关于 download-gemini-images

用于从用户已登录的 Chrome 会话下载 Gemini 对话图片的技能,适合整理对话中的上传图像。它优先获取灯箱中的大图,也可在自动化失败时收集页面预览图并打包为 ZIP。

主要功能

  1. 01复用已登录的 Chrome 会话
  2. 02下载对话中的灯箱图片
  3. 03按顺序命名图像文件
  4. 04预览资源回退下载
  5. 05打包并验证 ZIP 文件

适用场景

  1. 01保存 Gemini 对话中的上传图片
  2. 02按对话顺序整理图像
  3. 03灯箱下载失败时提取页面预览
  4. 04打包图像并核对归档内容

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/daymade/claude-code-skills --skill download-gemini-images

安装后在 Claude Code 中输入/download-gemini-images确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
scripts/
download_gemini_images.mjs
package_images.sh

详细介绍

下载 Gemini 图片

概述

从用户已登录的 Chrome 会话中下载 Gemini 对话图片。优先使用灯箱图片,而不是缩略图或页面预览素材,因为 Gemini 通常只有在用户打开预览后才会显示较大的 blob: 图片。

工作流

  1. 使用 Chrome 插件,而不是新建未认证的浏览器,因为 Gemini 对话通常需要用户现有的 Google 会话。
  2. 按照 Chrome 技能的说明启动 Chrome;如果已存在打开的 Gemini 标签页,则接管该标签页;否则在 Chrome 中打开用户提供的 Gemini URL。
  3. 在 browser 可用后,通过 node_repl JS 调用导入并运行 scripts/download_gemini_images.mjs。
  4. 使用 scripts/package_images.sh 打包输出目录。
  5. 报告 ZIP 路径、图片数量,以及是否使用了较低分辨率的备用方案。
  6. 下载完成后结束 Chrome 控制;适当情况下,让用户原先打开的 Gemini 标签页保持打开。

主脚本

相对于此技能目录解析脚本路径,然后在用于自动化 Chrome 的同一 Node REPL 会话中导入该脚本:

var { downloadGeminiImagesFromChrome } = await import("/absolute/path/to/download-gemini-images/scripts/download_gemini_images.mjs");
var result = await downloadGeminiImagesFromChrome({
  browser,
  tabUrlIncludes: "gemini.google.com/app",
  expectedCount: 20,
  outputDir: `${nodeRepl.homeDir}/Downloads/gemini_conversation_images_${new Date().toISOString().slice(0, 10).replaceAll("-", "")}`
});
nodeRepl.write(JSON.stringify(result, null, 2));

仅当用户指定了确切数量时才设置 expectedCount。省略该参数即可下载所有可见的 Show the uploaded image in a lightbox 按钮对应的图片。

打包

主脚本返回 outputDir 后,运行:

/absolute/path/to/download-gemini-images/scripts/package_images.sh "$outputDir" "$HOME/Downloads/gemini_conversation_images.zip"

打包脚本会创建 ZIP、运行 zip -T,并验证压缩包中包含的图片文件与目录中的文件顺序一致。

备用方案

如果灯箱自动化失败,但页面已明确加载,则使用标签页的 pageAssets 功能:

var pageAssets = await tab.capabilities.get("pageAssets");
var inventory = await pageAssets.list();
var uploaded = inventory.assets.filter(a => a.kind === "image" && a.url.includes("lh3.googleusercontent.com/gg/"));
var bundle = await pageAssets.bundle({ inventoryId: inventory.id, assetIds: uploaded.map(a => a.id) });
nodeRepl.write(JSON.stringify(bundle, null, 2));

此方案通常会获取 512px 的预览 JPEG,而不是较大的灯箱图片。如果使用了此备用方案,请告知用户。

注意事项

  • 不要检查浏览器 Cookie、本地存储、密码或会话存储。
  • 下载文件属于入站传输,本身无需确认。
  • 如果 Gemini 要求用户登录,请暂停并让用户在 Chrome 中完成登录。
  • 如果用户希望图片顺序与对话串中的顺序一致,请使用脚本的有序命名:image_01.jpg、image_02.jpg 等。

评论

支持 Markdown