mcpField
N
nano-banana

nano-banana

github.com/glebis创意与媒体403211 次安装3 天前更新
代码仓库

关于 nano-banana

nano-banana 是通过 Google Gemini 图像生成 API 创建和编辑图像的命令行技能,面向需要按提示词生成视觉素材的人。它提供风格与平台预设、批量变体、参考图和项目历史管理。

主要功能

  1. 01文本生成与图像编辑
  2. 02风格和平台尺寸预设
  3. 03并行生成变体及联系表
  4. 04参考图引导风格
  5. 05项目输出与生成历史

适用场景

  1. 01为文章、演示文稿或社交媒体制作插图
  2. 02基于现有图像执行文本指令编辑
  3. 03用参考图统一多个图像的美术风格

安装

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

$npx skills add https://github.com/glebis/claude-skills --skill nano-banana

安装后在 Claude Code 中输入/nano-banana确认已加载。

包含的文件

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

platforms.yaml
presets.yaml
secrets.enc.yaml
.claude-plugin/
plugin.json
references/
api_reference.md
scripts/
generate_image.sh
nano_banana.py

详细介绍

Nano Banana - Gemini 图像生成

通过 Google 的 Gemini 图像生成 API,根据文本提示词生成和编辑图像。

适用场景

  • 用户要求根据文本描述生成、创建或制作图像
  • 使用文本指令编辑现有图像
  • 风格迁移:生成与参考图美学风格一致的新图像
  • 为演示文稿、文章、缩略图和社交媒体帖子创建插图
  • 为同一概念批量生成变体

首次设置

scripts/nano_banana.py init

向导会检查依赖项(sops、age、magick),验证 API 密钥,并将默认设置保存到 ~/.config/nano-banana/config.yaml。

快速开始

# Simple generation
scripts/nano_banana.py "a minimalist illustration of a rocket" ./rocket.png

# With style preset
scripts/nano_banana.py --preset editorial "interconnected nodes" ./nodes.png

# YouTube thumbnail (auto-cropped to 1280x720)
scripts/nano_banana.py --preset grain --platform youtube "coffee on desk" ./thumb.png

# Generate 4 variants + contact sheet
scripts/nano_banana.py --preset wireframe "a crystal" ./crystal.png --n 4

# Edit existing image
scripts/nano_banana.py --edit ./old.png "make the background deep teal" ./new.png

# Style reference (match aesthetic of existing image)
scripts/nano_banana.py --reference ./style.png "a new mountain landscape" ./mountain.png

# Re-roll last prompt
scripts/nano_banana.py again

# View history
scripts/nano_banana.py history -n 10

要求

  • GEMINI_API_KEY — 通过 SOPS + age 从 secrets.enc.yaml 自动解密。备用方式:export GEMINI_API_KEY=...
  • sops、age — 用于解密密钥
  • magick (ImageMagick) — 用于适配平台尺寸和制作联系表
  • 带有 pyyaml 的 python3

模型

模型别名Nano Banana 名称适用场景
gemini-3.1-flash-image-preview(默认)flashNano Banana 2指令遵循效果最佳,速度快
gemini-3-pro-image-previewproNano Banana Pro质量最高,可在图像中生成文本
gemini-2.5-flash-imageflash-2.5Nano Banana(原版)旧版

使用 --model flash|pro|flash-2.5 或完整 ID。

风格预设

scripts/nano_banana.py list-presets
scripts/nano_banana.py --preset editorial "your subject" out.png
预设风格
editorial黑底细线、低饱和配色,带有技术图表的感觉
blueprint深海军蓝底上的白色/青色线条,工程制图风格
ink日本水墨画风格,有机笔触,单色
risograph平涂色彩、颗粒感、陶土色 + 鼠尾草绿,独立杂志美学
wireframe3D 线框网格,黑底发光边缘
constellation星图圆点由浅色线条相连,天体风格
brutalist大胆形状、粗边框、硬阴影、平涂色彩
grain胶片颗粒感照片、高 ISO、温暖的电影色调

在 presets.yaml 中定义 — 可编辑以添加自定义预设。

平台预设

scripts/nano_banana.py list-platforms
scripts/nano_banana.py --platform youtube "your subject" out.png

生成的图像会自动调整大小并居中裁剪,以适配目标尺寸。

平台尺寸
youtube1280×720
youtube-short1080×1920
slides1920×1080
blog1200×630
x1600×900
square1080×1080
story1080×1920
pinterest1000×1500

功能

变体 + 联系表

--n N 会并行生成 N 个变体,并将它们拼成联系表:

scripts/nano_banana.py --preset ink "mountain" ./mt.png --n 6
# Creates mt-01.png ... mt-06.png + mt-contact.png
批量生成(宣传活动/多版本广告组)

当每个输出都需要不同的文本或提示词(例如,一组风格统一的广告)时,可遍历列表。--n 在这里帮不上忙 — 它会对同一个提示词重新生成。请使用共享的 $STYLE 字符串和逐项数组。

cd /abs/output/dir
REF="_reference.png"   # optional style anchor
STYLE="<shared visual-style description, written once>"

# Each entry: pipe-delimited fields + output filename. NAME the array — see gotchas.
ADS=(
"CALL NOW|FOR TOTAL|CONFIDENTIALITY|ad-callnow.png"
"REDACT|BEFORE|YOU SEND|ad-redact.png"
)
for entry in "${ADS[@]}"; do
  IFS='|' read -r L1 L2 L3 OUT <<< "$entry"
  python3 scripts/nano_banana.py \
    "$STYLE The exact text reads, on three centered lines: '$L1' / '$L2' / '$L3'. Spell every word correctly." \
    "$OUT" --reference "$REF" --platform youtube --model pro --no-metadata --project NAME
done

Shell 注意事项(这是 macOS 上的 zsh——这些问题总会踩到):

  • 切勿将循环数组命名为 LINES、COLUMNS、PATH、path、status、argv 等。 — zsh 保留了这些名称。LINES=(...) 会报错 can't assign array value to non-array special。请使用 ADS、ITEMS、JOBS。
  • zsh 不会像 bash 一样对未加引号的变量进行分词。 CMD="magick montage"; $CMD ... 会尝试查找一个字面名称为 "magick montage" 的命令。不要把多词命令塞进变量 — 直接调用命令,或使用数组(cmd=(magick montage); "${cmd[@]}")。
  • 始终给展开内容加引号 — "$OUT"、"${ADS[@]}" — 路径和提示词中可能包含空格。
  • 在双引号提示词中,使用 '单引号' 括起你希望准确呈现的文本,以便模型逐字复现。
  • 若要并行处理批次,请在每次循环迭代后追加 &,并在末尾使用 wait — 但要限制并发数(API 有速率限制);超过 6 个项目时,顺序处理最稳妥。

批量处理完成后,直接调用工具(不要通过变量间接调用)来制作审核联系表:magick montage ad-*.png -tile 2x3 -geometry 480x270+6+6 -background black _contact.png。

编辑模式

传入现有图像,提示词将变为编辑指令:

scripts/nano_banana.py --edit ./thumb.png "remove the watermark, warmer colors" ./clean.png
参考图像(风格锚点)

使用一张或多张参考图像引导美学风格,但不对其进行编辑:

scripts/nano_banana.py --reference ./episode1.png --reference ./episode2.png \
  "episode 3: data drift" ./ep3.png
项目 + 元数据

按项目整理输出:

scripts/nano_banana.py --project lab-04/meeting-02 --preset editorial "MCP loops" ./overlay.png
# Saves to ~/nano-banana/outputs/lab-04/meeting-02/20260414-<subject>.png + .json sidecar
重新生成 + 历史记录
scripts/nano_banana.py again              # rerun last prompt
scripts/nano_banana.py history -n 20      # show last 20 generations
scripts/nano_banana.py history --project lab-04
试运行

预览组合后的提示词,不调用 API:

scripts/nano_banana.py --preset editorial --platform youtube "subject" --dry-run

临时错误与重试

API 偶尔会返回 500/INTERNAL 或空候选结果。脚本最多重试 4 次,并采用指数退避(2s、4s、8s、16s)。永久性错误(4xx、安全违规)会立即失败,不进行重试。

提示词技巧

  • 指定视觉风格:"photograph"(摄影)、"flat illustration"(扁平插画)、"watercolor"(水彩)、"3D render"(3D 渲染)
  • 描述构图:"centered"(居中)、"white background"(白色背景)、"wide shot"(远景)
  • 指定颜色:"blue and white color scheme"(蓝白配色)、"warm earth tones"(暖土色调)
  • 要渲染文本时,使用 --model pro 并引用确切文本:'with the text "Hello"'

完整的 API 文档请参阅 references/api_reference.md。

文件

  • scripts/nano_banana.py — 主 CLI(Python)
  • scripts/generate_image.sh — 精简的 bash 包装脚本(向后兼容)
  • presets.yaml — 风格预设
  • platforms.yaml — 平台尺寸预设
  • secrets.enc.yaml — 加密的 API 密钥(SOPS + age)
  • ~/.config/nano-banana/config.yaml — 用户默认设置(来自 init)
  • ~/.config/nano-banana/history.jsonl — 生成日志
  • ~/.config/nano-banana/last.json — 上次运行记录(供 again 使用)

评论

支持 Markdown