Downloads images from Google Gemini conversation pages using Chrome automation, opening lightbox previews, renaming files, and packaging as ZIP.
How this skill is triggered — by the user, by Claude, or both
Slash command
/download-gemini-images:download-gemini-imagesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Download Gemini conversation images from the user's logged-in Chrome session. Prefer the lightbox image over thumbnail/page-preview assets because Gemini often exposes a larger `blob:` image only after the user opens a preview.
Download Gemini conversation images from the user's logged-in Chrome session. Prefer the lightbox image over thumbnail/page-preview assets because Gemini often exposes a larger blob: image only after the user opens a preview.
scripts/download_gemini_images.mjs from a node_repl JS call after browser is available.scripts/package_images.sh.Resolve the script path relative to this skill directory, then import it in the same Node REPL session used for Chrome automation:
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));
Set expectedCount only when the user gave a specific count. Omit it to download every visible Show the uploaded image in a lightbox button.
After the main script returns outputDir, run:
/absolute/path/to/download-gemini-images/scripts/package_images.sh "$outputDir" "$HOME/Downloads/gemini_conversation_images.zip"
The packaging script creates the ZIP, runs zip -T, and verifies that the archive contains the same ordered image files as the directory.
If lightbox automation fails but the page is visibly loaded, use the tab pageAssets capability:
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));
This usually captures 512px preview JPEGs, not the larger lightbox files. Tell the user when this fallback is used.
image_01.jpg, image_02.jpg, etc.npx claudepluginhub daymade/claude-code-skills --plugin download-gemini-imagesScrapes all images from a given URL using Python3/curl, with fallback to browser automation for JavaScript-rendered pages. Downloads images locally.
Downloads files (PDFs, CSVs, images) from websites using the browser's authenticated session, preserving cookies and login state. Also reads downloaded PDF content.
Generates images and text from prompts using Google Gemini Web. Supports reference image uploads, multi-turn sessions, and experimental video generation as backend for other skills.