图像与设计
为博客生成或编辑 AI 配图时:用 Gemini+MCP…
当用户需要博客 Hero、OG、内文插图、产品图或分区图,且环境已配置 nanobanana-mcp 与 Google AI API key 时,用 Gemini 生成、编辑、优化并交付可上线图片。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
为博客生成或编辑 AI 配图时:用 Ge特定
解决思路
- 扮演 Creative Director:不要让原始用户文本直接进入 API;始终先解释意图、增强描述,并用 6 组件 Reasoning Brief 构造优化提示词。
- 可用命令:`/blog image generate <idea>` 生成博客图片并进行完整提示词工程;`/blog image edit <path> <instructions>` 智能编辑已有博客图片;`/blog image setup` 配置 MCP server 与 API key。
- 按图片类型匹配博客用例:Hero/Cover 使用 `16:9`、2K 或 4K、Editorial/Landscape 域模式,放入 frontmatter `coverImage`。
- 按图片类型匹配博客用例:OG/Social Card 使用 `16:9`、1K、Editorial/Infographic 域模式,放入 frontmatter `ogImage`。
- 按图片类型匹配博客用例:Inline Illustration 使用 `16:9` 或 `4:3`、1K,域模式随主题变化,放在 H2 之后正文之前。
- 按图片类型匹配博客用例:Inline Product Shot 使用 `4:3` 或 `1:1`、1K、Product 域模式,放在产品相关章节中。
- 按图片类型匹配博客用例:Section Divider 使用 `21:9` 再裁剪、1K、Abstract/Landscape 域模式,放在主要章节之间。
- 满足尺寸要求:博客 hero/cover 用 1200x630(兼容 OG)或 1920x1080;Open Graph(OG)必须用 1200x630;内文图宽度至少 1200px。
- 生成前检查 MCP 是否可用:调用 `get_image_history`,传 `conversation_id: "default"`(轻量、无副作用)。
- 如果上一步成功:MCP 可用,继续生成。
- 如果上一步失败:MCP 未配置,告知用户「Image generation requires the nanobanana-mcp server. Run `/blog image setup` to configure it.」;当从 blog-write/blog-rewrite 内部调用时,静默返回、不报错,让调用工作流继续使用 stock photos。
- 生成工作流 Step 1 分析意图:判断图片类型(Hero、inline、OG card、section divider?)、博客主题、风格(photorealistic、editorial、illustrated、minimal?)、约束(品牌色、指定尺寸、平台格式?)、情绪(authoritative、inviting、dramatic、clean?)。
- 如果请求含糊:只问一个关于用例和风格的澄清问题。
- Step 2 选择 Domain Mode:Editorial 用于博客头图、特色图、lifestyle,提示词强调 styling、composition、publication references。
- Step 2 选择 Domain Mode:Product 用于电商文章、测评、对比,提示词强调 surface materials、studio lighting、clean BG。
- Step 2 选择 Domain Mode:Landscape 用于环境背景、旅行、hero section,提示词强调 atmospheric perspective、depth layers、time of day。
- Step 2 选择 Domain Mode:UI/Web 用于技术博客图标、插图、图表,提示词强调 clean vectors、flat design、exact colors。
- Step 2 选择 Domain Mode:Infographic 用于数据驱动文章、流程、对比,提示词强调 layout structure、hierarchy、accessible colors。
- Step 2 选择 Domain Mode:Abstract 用于图案背景、分区图、装饰,提示词强调 color theory、mathematical forms、textures。
- 加载 `references/prompt-engineering-blog.md` 获取域模式 modifier libraries。
- Step 3 构造 6 组件 Reasoning Brief:用自然叙述段落构建提示词,绝不要用关键词列表。
- 6 组件之 Subject:谁/什么,带丰富物理细节(textures、materials、scale)。
- 6 组件之 Action:正在发生什么、姿势、手势、运动、状态。
- 6 组件之 Context:环境、场景、时间、季节、天气。
- 6 组件之 Composition:相机角度、镜头类型、构图、负空间、深度。
- 6 组件之 Lighting:光源、质量、方向、色温、阴影。
- 6 组件之 Style:艺术媒介、美学、胶片型号、参考艺术家/时代。
- 使用 photorealistic 博客图片模板:`A photorealistic [shot type] of [subject with physical detail], [action/pose], set in [environment with specifics]. [Lighting conditions] create [mood]. Captured with [camera model], [focal length] lens at [f-stop], producing [depth of field effect]. [Color palette/grading notes]. Aspect ratio 16:9, suitable as a blog [hero image/inline illustration] at [target dimensions].`
- 使用 illustrated/stylized 模板:`A [art style] [format] of [subject with character detail], featuring [distinctive characteristics] with [color palette]. [Line style] and [shading technique]. Background is [description]. [Mood/atmosphere].`
- Step 4 设置宽高比:生成前调用 `set_aspect_ratio`,使用 `conversation_id: "default"`。
- 宽高比选择:Hero/Cover/OG 用 `16:9`;Product shot/Square 用 `4:3` 或 `1:1`;Section divider 用 `21:9`,必要时后处理再裁宽;Vertical(stories)用 `9:16`。
- Step 5 通过 MCP 生成:`set_aspect_ratio` 总是最先调用,即使目标是 1:1。
- Step 5 通过 MCP 生成:`gemini_generate_image` 用于从构造好的提示词生成新图。
- Step 5 通过 MCP 生成:`gemini_edit_image` 用于修改已有图片。
- Step 5 通过 MCP 生成:`gemini_chat` 用于迭代精修/多轮会话。
- Step 5 通过 MCP 生成:`get_image_history` 用于用 `conversation_id: "default"` 查看已生成图片。
- Step 5 通过 MCP 生成:`clear_conversation` 用于重置会话上下文。
- 模型选择:`flash`(默认)是 MCP 对 `gemini-3.1-flash-image` 的别名,最适合大多数博客图片。
- 模型选择:`pro` 是 MCP 对 `gemini-3-pro-image` 的别名,用于最终 hero 图片或文字较多的素材。
- 模型选择:`gemini-3.1-flash-lite-image` 只在直接 API 或明确支持该稳定 ID 的新 MCP 中使用。
- 加载 `references/mcp-tools.md` 获取参数细节,加载 `references/gemini-models.md` 获取模型规格、定价与速率限制。
- Step 6 必要时后处理:用 `magick input.png -resize 1200x630^ -gravity center -extent 1200x630 hero.png` 调整到博客 hero 尺寸 1200x630。
- Step 6 必要时后处理:用 `magick input.png -quality 85 output.webp` 转成 WebP 以优化网页。
- Step 6 必要时后处理:目标浏览器支持时用 `magick input.png -quality 80 output.avif` 转成 AVIF。
- Step 6 必要时后处理:用 `magick input.png -resize 1200x630^ -gravity center -extent 1200x630 og-image.png` 裁成精确 OG 尺寸。
- 检查 `magick`(ImageMagick 7)是否可用;如果不可用,回退使用 `convert`。
- Step 7 交付:提供图片路径,保存在 `~/Documents/nanobanana_generated/`。
- Step 7 交付:展示完整 Reasoning Brief 的 crafted prompt(有教学价值)。
- Step 7 交付:展示 settings,包括 model、aspect ratio、domain mode。
- Step 7 交付:生成 alt text,描述性句子,10-125 字符,自然包含主题关键词。
- Step 7 交付:为 hero/OG 图片提供 frontmatter 片段:`coverImage: "/path/to/generated-image.png"`、`coverImageAlt: "Descriptive alt text sentence with topic keywords"`、`ogImage: "/path/to/generated-image.png"`。
- Step 7 交付:如相关,提供 1-2 条 refinement suggestions。
- 编辑工作流:读取图片路径和编辑指令。
- 编辑工作流:增强指令,绝不要把原始指令直接传给 API;用户说 `remove background`,就构造为详细的保留边缘去背景描述。
- 编辑工作流:用户说 `make it warmer`,就构造为具体色温偏移并说明要保留的内容。
- 编辑工作流:用户说 `add text`,就补充字体风格、大小、位置、对比度和可读性说明。
- 编辑工作流:用户说 `make it brighter`,就补充增加曝光、提亮阴影、保持高光。
- 编辑工作流:用户说 `crop for social`,就用中心重心裁剪并 resize 到 1200x630。
- 编辑工作流:调用 `gemini_edit_image`,传入增强后的指令。
- 编辑工作流:返回修改后的图片路径和描述。
- 供 blog-write/blog-rewrite 内部调用时,输入由调用技能提供:`image_type` 为 hero、inline、og、divider;`topic` 为博客主题/标题;`section_context` 可选,表示图片支持的标题或章节;`style_preference` 可选,为 photorealistic、illustrated、editorial;`count` 可选,所需图片数量,默认 1。
- 内部调用输出到调用技能的 markdown:包含 Generated Image、Path、Alt Text、Type、Domain Mode、Aspect Ratio、Suggested Frontmatter(`coverImage`、`coverImageAlt`)。
- 内部调用 graceful fallback:如果 MCP 不可用,立即返回且不报错;调用工作流继续使用 stock photos;绝不要因为图片生成不可用而阻塞 blog-write 或 blog-rewrite。
- 为每张生成图片创建 alt text:完整描述句,不是关键词列表;10-125 字符;自然包含主题关键词;描述图片展示什么以及它与内容的相关性;图表/信息图要包含关键数据点。
- alt text 示例:好例子为 `Marketing team analyzing AI search traffic data on a dashboard showing citation metrics`;坏例子为 `SEO AI marketing blog optimization image`。
- Setup:运行 `python3 scripts/setup_image_mcp.py`(交互式)。
- Setup:优先用 `GOOGLE_AI_API_KEY=... python3 scripts/setup_image_mcp.py`,或用 `python3 scripts/setup_image_mcp.py --key-file /path/to/key.txt`。
- Setup:除非必要避免 `--key`,因为命令行参数可能进入 shell history 和进程列表。
- Setup:默认写入 `~/.claude/settings.json`(用户私有,mode 0600)。
- Setup:`--project` 标志会写入项目 `.mcp.json`(仅 env-expansion,拒绝把字面 key 写入被跟踪文件)。
- Setup:运行 `python3 scripts/validate_image_setup.py` 验证。
- Setup 依赖:Node.js 18+(npx);Google AI API key,可在 https://aistudio.google.com/apikey 免费创建;图片模型可能需要启用计费的项目。
- Setup:脚本固定包为 `@ycse/nanobanana-mcp@1.1.1`,其模型选择器接受 MCP 别名如 `flash` 和 `pro`;升级包时同步更新 setup、validation 和本文档。
- 安全过滤器自动改写:当返回 `IMAGE_SAFETY` 或 `SAFETY` 时不要放弃,自动改写并重试。
- 安全过滤器自动改写:识别可能触发点(暴力、公众人物、接近 NSFW,或过滤器过度谨慎)。
- 安全过滤器自动改写:用正向框架改写,描述你想要什么,而不是要避免什么。
- 安全过滤器自动改写:如果主体是人物,使其泛化,移除类似名人的具体特征。
- 安全过滤器自动改写:如果场景戏剧化,软化表述,例如 `intense` 改 `focused`,`battle` 改 `competition`。
- 安全过滤器自动改写:用改写后的提示词重试,最多 3 次后向用户报告;Google 承认过滤器有时比预期更谨慎,良性提示也会被拦,持续改写通常能成功。
- 编辑而不是重掷:如果图片 80% 正确,用 `gemini_chat` 进行对话式编辑,而不是从头重新生成;会话会保持风格一致性,针对性编辑可保留有效部分并修复无效部分。
- 编辑 vs 重新生成:颜色略微不对就编辑,例如 `shift the color temperature warmer`。
- 编辑 vs 重新生成:构图完全错误就用修订后的 brief 重新生成。
- 编辑 vs 重新生成:场景好但光线不对就编辑,例如 `change to golden hour lighting from the left`。
- 编辑 vs 重新生成:缺少细节就编辑,例如 `add a steaming coffee cup on the desk`。
- 错误处理:MCP not configured 就运行 `/blog image setup`。
- 错误处理:API key invalid 就到 https://aistudio.google.com/apikey 创建新 key。
- 错误处理:Rate limited(429)就等待 60s 重试,并到 https://ai.google.dev/gemini-api/docs/rate-limits 查看实时限制。
- 错误处理:`IMAGE_SAFETY` 就自动改写(见上),这是 Layer 2 filter,不可配置。
- 错误处理:`PROHIBITED_CONTENT` 是内容政策违规,主题被封锁,不可重试。
- 错误处理:`SAFETY` 就改写提示词,这是 Layer 1 filter。
- 错误处理:Vague request 就在生成前问一个澄清问题。
- 错误处理:Poor quality 就检查 Reasoning Brief,通常缺的是 lighting(最大质量差异因素)。
- 错误处理:MCP unavailable(内部调用)就静默返回,调用工作流使用 stock photos。
- 参考文档按需加载,不要在启动时全部加载:`references/prompt-engineering-blog.md` 包含域模式、6 组件系统、博客模板;`references/gemini-models.md` 包含模型规格、速率限制、宽高比、定价;`references/mcp-tools.md` 包含 MCP 工具参数和响应格式。
适用边界 · 注意事项
- 未配置 `nanobanana-mcp` 或 Google AI API key 时不能直接生图;应先运行 `/blog image setup`,或让 blog-write/blog-rewrite 静默回退到 stock photos。
- 从 blog-write/blog-rewrite 内部调用且 MCP 不可用时,不应报错或阻塞调用工作流。
- 遇到 `PROHIBITED_CONTENT` 等不可重试的内容政策违规时,不要继续改写或重试。