gemini-image
Skill0 starsChanged 44 days agoMITView on GitHub
Generate and edit images with Google's Gemini models (Nano Banana, Gemini 3 Pro Image, 3.1 Flash Image) from a zero-dependency Python CLI. Use to create, edit, restyle, or compose an image with Gemini or Google AI, including image-to-image with reference images. Also handles text and model-listing. The maintained successor to the older `gemini-client` plugin.
- Reads credentials
12 other projects use a version of this.
Adopted by
Most recently taken up by
- akrindev/google-studio-skillstheir own version, first seen Nov 8, 2026
- schroneko/skillstheir own version, first seen Oct 29, 2026
- brandonbryant12/clearframetheir own version, first seen Oct 20, 2026
- redf0x1/camofox-browsertheir own version, first seen Oct 8, 2026
- zephyrwang6/myskilltheir own version, first seen Oct 8, 2026
- tyrchen/geektime-bootcamp-aitheir own version, first seen Oct 8, 2026
Used with
Projects with it also use deepl, imagemagick-conversion and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
zephyrwang6Skilldeepl
Übersetzt Texte, Dokumente und XLIFF-Dateien via DeepL API. Verwende für Übersetzungen mit /deepl translate, /deepl file oder /deepl xliff.
Also in 4 projects that use this
zephyrwang6Skillimagemagick-conversion
Convert and manipulate images with ImageMagick. Covers format conversion, resizing, batch processing, quality adjustment, and image transformations. Use when user mentions image conversion, resizing images, ImageMagick, magick command, batch image processing, or thumbnail generation.
Also in 4 projects that use this
- +10 more from zephyrwang6
Other versions12 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 12
- redf0x1/camofox-browser★ 438same name
- zephyrwang6/myskill★ 339same name
- tyrchen/geektime-bootcamp-ai★ 236same name
- Agentchengfeng/gemini-image-skill★ 43same name
- SpaceZephyr/allSkills★ 14same name
- akrindev/google-studio-skills★ 7same name
- xingfanxia/AX-skills★ 4same name
- brandonbryant12/clearframe★ 1same name
- cocyuhao/my-ai-skills-library★ 1same name
- schroneko/skills★ 1same name
2 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository15 other files it gives its agents.
- chat-arch-thrash-detectSkill
- chat-history-searchSkill
- email-editorial-passSkill
- fable-seatSkill
- global-review-loopSkill
- monitor-agent-threadSkill
- pattern-retrospectiveSkill
- review-loopSkill
- seo-index-validationSkill
- session-endSkill
- session-handoffSkill
- session-portalSkill
- ship-itSkill
- transcript-analysisSkill
- weekly-work-logSkill
The file
We split this skill into the rules it gives an agent
1 rule. 0 are common, 1 is distinctive, and 0 are very specific to this project.
0
Common
Most of the 6 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 133
Every generated image carries an invisible SynthID watermark (Google, non-optional).
“Common” is measured: kept by at least 6 in 10 of the 6 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
gemini-image
The maintained, machine-wide core for image generation and editing with
Google Gemini. One zero-dependency Python file — runs on any machine with
python, no per-project install. It is the canonical successor to the
gemini-client plugin (strict superset; that plugin is retired in its favour).
Quick start
GEM=~/.claude/skills/gemini-image/scripts/gemini_image.py
# Generate
python "$GEM" --image -o castle.png "A watercolor painting of a medieval castle"
# Pick a model / aspect ratio / resolution
python "$GEM" --image -o hero.png --model gemini-3-pro-image \
--aspect-ratio 2:3 --image-size 2K "Botanical oil painting of peonies"
# Edit or compose from reference image(s) — repeat -i (limits are per-model, see table below)
python "$GEM" --image -o staged.png -i room.png -i sofa.png \
"Place this sofa in this room with warm afternoon light"
# See which image models your key can use
python "$GEM" --list-models --images-onlyAuth resolves in order: --api-key → GEMINI_API_KEY → GOOGLE_API_KEY →
.env (cwd, then next to the script). The key is sent as x-goog-api-key.
Models (verified against the live API, 2026-07)
| Model | Marketing name | Status | Use for |
gemini-3-pro-image / -preview | Nano Banana Pro | GA / preview | Auto-selected default — highest fidelity, accurate text rendering, 1K/2K/4K, up to 6 object + 5 character reference images. Mockups, design, data-viz. ~$0.134/1K–2K, $0.24/4K. |
gemini-3.1-flash-image / -preview | Nano Banana 2 | GA / preview | Balanced, and the offline/error fallback floor. Extreme aspect ratios (1:4…8:1), the 512 size, 4K, up to 10 object / 4 character / 3 style reference images, video-to-image. ~$0.067/1K. |
gemini-3.1-flash-lite-image | Nano Banana 2 Lite | GA (2026-06-30) | Cheapest and fastest (~$0.0336/image). 1K only — any other --image-size is a hard 400. Standard aspect ratios only; up to 14 object reference images, but no character-consistency or style references. High-volume drafts. |
gemini-2.5-flash-image | Nano Banana | GA — deprecated | Shuts down 2026-10-02. Still callable, but migrate: Google's named replacement is gemini-3.1-flash-image. |
imagen-4.0-* | Imagen 4 | deprecated | Shuts down 2026-08-17, and uses the separate :predict endpoint — not covered by this generateContent client. |
Aspect ratios: 1:1 2:3 3:2 3:4 4:3 4:5 5:4 9:16 16:9 21:9; gemini-3.1-flash-image
adds the extreme ratios 1:4 4:1 1:8 8:1.
Sizes are per-model, not universal — the CLI accepts the union and the API is
the arbiter. Measured 2026-07: only gemini-3-pro-image and
gemini-3.1-flash-image genuinely deliver 2K/4K. gemini-3.1-flash-lite-image
returns a 400 for anything but 1K, and gemini-2.5-flash-image accepts 2K
but silently returns a 1024×1024 image.
Default model: best available, auto-selected
Omit --model (CLI) or model= (library) and the skill resolves the best
image model your key can access — currently gemini-3-pro-image — instead of
a fixed id. It stays current automatically: a future GA Pro model (e.g.
gemini-4-pro-image) is adopted the day your key gains access, no code change.
A newer flash model never displaces a GA pro one (newer ≠ higher fidelity).
- Explicit always wins:
--model <id>/model="<id>"skips resolution entirely (and the/modelslookup). - Pin a default:
GEMINI_IMAGE_DEFAULT=<id>hard-pins (e.g. a cost-sensitive project pinsgemini-3.1-flash-lite-image); explicit--modelstill overrides it. - Cost/speed: the best model costs more and is slower than the floor (~$0.134 vs ~$0.067/1K image, ~3× latency — Google list pricing, 2026-07). CLI use prints a one-line stderr notice when a non-default model is auto-selected; library use stays silent.
- Never fails: the resolution is cached per key for 24h (a temp-file keyed by
a hash of the API key — the key itself is never written). If
/modelsis unreachable it falls back togemini-3.1-flash-image, so a network blip can never break generation or cause a surprise bill. - Why that floor and not the cheapest model: the floor has to be non-deprecated,
honour every
--image-sizethe CLI advertises, and stay well below pro pricing.gemini-3.1-flash-lite-imageis cheaper but 1K-only, so a fallback would have turned a 2K request into a hard failure;gemini-2.5-flash-imageis retiring on 2026-10-02.gemini-3.1-flash-imageis the only current model that clears all three.
What it does beyond the old plugin
- Reference-image input (
-i/--input-image, repeatable) — image editing and multi-image composition, which the plugin could not do. - Multi-image output — when the model returns several images they are all
saved (
out.png,out-2.png, …) instead of overwriting one file. - Safety-block diagnostics — a blocked/empty result reports the
blockReason/finishReason/ safety ratings instead of a bare "no image". - Verified model menu + exponential-backoff retry (429/5xx) + a
GeminiErrorexception contract so projects can vendor the file and build thin wrappers (CLI exit 2 = image blocked, 1 = error, 0 = ok).
Importable
generate, generate_image, resolve_best_image_model, extract_text,
extract_images, extract_usage, list_models, and GeminiError are public.
generate_image() returns
{output_paths, output_path, model, mime_type, text, blocked, diagnostic, raw}.
Calling it from another language
Non-Python callers reuse this skill by shelling out and reading stdout JSON
(--json), rather than reimplementing the API shape. stderr carries human
notices; exit codes are 0 ok, 2 image blocked, 1 error.
python "$GEM" --image --json -o out.png "A watercolor castle"
# stdout: {"output_paths":[…], "output_path":"out.jpg", "model":"gemini-3-pro-image", …}Two fields exist specifically for callers and are easy to get wrong:
output_path— read the saved path from here, never from your own-ovalue. The models choose their own output format, so-o out.pngroutinely comes back asout.jpg.model— the id that actually ran, after resolution. On the default path the model is chosen here, at call time, so a caller that records its own hard-coded guess for provenance will drift silently the first time resolution picks something else.
This is the right integration for build-time scripts and CLIs. A compiled
server or MCP runtime can't shell out to a CLI; those conform to the contract in
SPEC.md instead of sharing this code.
Notes
- Every generated image carries an invisible SynthID watermark (Google, non-optional).
- The saved file's extension matches the model's actual output format (the
image models choose it —
gemini-3-pro-imagereturns JPEG). A.pngrequest that comes back as JPEG is saved as.jpgwith a stderr note, so a file never lies about its contents. - The request uses
generationConfig.imageConfig— the shape proven across all current production callers and accepted by the live API. The newerresponseFormat.imageshape is tracked as a future migration inSPEC.md, which is the canonical contract this skill and the project-specific TypeScript callers (ShopForge, ShopSmith, shopforge_v4) all conform to. - Per-project business logic (brand denylists, print-spec validation, Sharp compositing, pack rules) stays in those projects — this core only does correct generation/editing.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

