Extensions/ComfyUI-Nanobanana
ComfyUI Extension

ComfyUI-Nanobanana

Gemini native generateContent custom nodes for ComfyUI with Nano Banana, Nano Banana 2, and Nano Banana Pro, supporting both Google direct access and Gemini-compatible native relay endpoints.

By magicwang1111·Created 6 months ago·Updated 20 days ago· 0
magicwang1111/ComfyUI-Nanobanana
Nodes3
On cloudLocal install
CategoryComfyUI-Nanobanana
Stars0
Updated20 days ago
Readme

ComfyUI-Nanobanana

通过 Vapeur 或 AIHubMix 的 Gemini 原生图像接口生成图片,支持参考图、并行请求与标准 ComfyUI IMAGE 输出。

节点

| 节点 | 内置模型 | | --- | --- | | Nano Banana | gemini-2.5-flash-image | | Nano Banana 2 | gemini-3.1-flash-image-preview | | Nano Banana Pro | gemini-3-pro-image-preview |

三个节点保留 prompt、seed、aspect_ratio、response_mode、system_prompt、parallel_requests 和可选参考图。2 / Pro 提供 resolution、thinking_level;2 另有 include_thoughts 和 thought_image 输出。

前端不显示 api_source 或 model_override。服务商与模型别名统一由后端配置决定。

配置

安装 requirements.txt 中的依赖,将 config.example.json 复制为 config.local.json:

{
  "api_source": "vapeur",
  "vapeur_api_key": "",
  "aihubmix_api_key": "",
  "request_timeout": 60,
  "vapeur_base_url": "https://api.vapeur.ai",
  "aihubmix_base_url": "https://aihubmix.com/gemini",
  "send_seed": true,
  "vapeur_model_overrides": {},
  "aihubmix_model_overrides": {}
}
  • api_source 只接受 vapeur 或 aihubmix,缺省为 vapeur。
  • 两条链路分别读取自己的密钥,优先 JSON,其次环境变量 VAPEUR_API_KEY / AIHUBMIX_API_KEY,不交叉回退。
  • 已移除 Google 官方直连、Google 密钥配置和旧 configured 链路。原 AIHubMix 用户将 api_key 改为 aihubmix_api_key,并设置 api_source 为 aihubmix。
  • request_timeout 单位为秒,最小 5,默认 60。
  • send_seed=false 时不发送 generationConfig.seed。
  • config.local.json 已加入 .gitignore,每次执行重新读取。修改配置无需重启;更新节点代码后需重启 ComfyUI 并刷新页面。

若服务商模型 ID 与内置名称不同,在对应服务商的 *_model_overrides 中添加映射。例如:

{
  "vapeur_model_overrides": {
    "gemini-3-pro-image-preview": "服务商实际模型ID"
  }
}

参数校验仍按节点内置模型规格执行。旧工作流加载时会移除原 api_source 和 model_override 的控件值,保留其他参数位置。

请求链路

| 服务商 | 图像生成地址 | 鉴权 | | --- | --- | --- | | Vapeur | https://api.vapeur.ai/gemini/v1beta/models/{model}:generateContent | Authorization: Bearer ... | | AIHubMix | https://aihubmix.com/gemini/v1beta/models/{model}:generateContent | x-goog-api-key |

同步与异步客户端均支持 list_models(),以 Bearer 鉴权访问服务商根路径 GET /v1/models,返回 object / data 原始结构。不会在启动或生成时自动拉取模型列表,也不会把列表显示到前端。

Vapeur 的 Nano Banana Pro 默认使用 gemini-3-pro-image,可由后端模型映射覆盖。Vapeur 与 AIHubMix 的 Nano Banana Pro 均自动移除不受支持的显式 thinkingLevel,Nano Banana 2 保持原样。AIHubMix 协议参见其 Gemini 指南。

输出与限制

  • 标准 IMAGE 输出可接 PreviewImage / SaveImage;另有 text 和 response_json。
  • response_json 隐去 base64 图像数据,保留响应其余结构。
  • 支持 inlineData / inline_data 图像响应。Nano Banana 2 未返回 thought 图时输出占位黑图。
  • Nano Banana 最多 3 张参考图,2 / Pro 最多 14 张。
  • 只支持单次 Gemini 原生请求,不保存会话或 thought signatures,不支持 grounding 或 Chat Completions 格式。
  • 示例工作流见 examples/README.md。

测试

python -m unittest discover -s tests -v
node tests/test_workflow_migration.mjs

节点费用预估

生成完成后,节点底部显示本次费用预估和 Token 用量,不新增输出插槽或模型切换控件。并行请求的费用汇总显示。

当前仅配置 Vapeur gemini-3-pro-image 价格(USD / 百万 Tokens):输入 2、缓存输入 0.2、文本及思考输出 12、图片输出 120。采用用户提供的 Vapeur 价格表,价格变化后需更新。

优先使用响应中的 usageMetadata 模态明细;缺少图片 Token 数时按生成张数及请求分辨率估算:1K/2K 每张 1120 Tokens,4K 每张 2000 Tokens。该换算参考 Google 价格说明,假设 Vapeur 沿用同一计量方式。未返回的输入、文本或思考用量不计费估算并明确标注“部分费用”;不把总 Token 数当作图片用量。实际扣费以服务商账单为准。

其他服务商或模型显示暂无价格配置。费用文本不写入工作流控件值,原始 response_json 输出保持不变。