From e904d7af1d56e5fbb19d4a5591d9c22055ff2fb4 Mon Sep 17 00:00:00 2001 From: jks703 <409745752@qq.com> Date: Tue, 3 Mar 2026 10:37:14 +0800 Subject: [PATCH] first commit --- README.md | 141 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..2af4bab --- /dev/null +++ b/README.md @@ -0,0 +1,141 @@ +# NanoBanana2 本地调用脚本 + +本项目提供一个简单的 Python/Node 脚本,帮助你通过速创 API 的 **NanoBanana2** 接口,根据提示词和本地参考图或参考图 URL 生成图片,并将结果图片保存到本地目录。 + +## 环境准备(Python 或 Node 二选一) + +1. 安装 Python 3.9+(Windows 可在 `python.org` 下载并安装)。 +2. 在项目目录下安装 **Python 依赖**(如果使用 Python 脚本): + +```bash +pip install -r requirements.txt +``` + +3. 在项目目录下安装 **Node 依赖**(如果使用 Node + `npm run dev`): + +```bash +npm install +``` + +4. 在速创 API 控制台获取你的接口密钥(key)。 +5. 在 `config_nano_banana.json` 中直接填写密钥、默认提示词,以及可选的参考图 URL(推荐,文件已在项目根目录创建): + +```json +{ + "api_key": "在这里填写你的速创API密钥", + "prompt": "在这里填写默认提示词(可留空,留空则运行时输入或用命令行参数覆盖)", + "size": "1K 或 2K 或 4K,可选", + "reference_urls": [ + "https://你的参考图1.png", + "https://你的参考图2.jpg" + ] +} +``` + +6. 或将密钥配置到环境变量: + +```bash +setx WUYIN_API_KEY "你的密钥" +``` + +重新打开终端后生效。 + +也可以在运行 Python 脚本时通过 `--api-key` 参数传入,或用 `-p/--prompt` 临时覆盖配置文件中的提示词。 + +### Cloudflare R2 图床(可选,仅 Node 版本) + +若希望将 `01` 目录的参考图先上传到 **Cloudflare R2**,用公网 URL 作为生图参考(并在每次生图结束后自动删除当次上传的图片),可在 `config_nano_banana.json` 中增加 R2 配置: + +```json +{ + "api_key": "你的速创API密钥", + "prompt": "默认提示词", + "r2_account_id": "你的 Cloudflare 账户 ID", + "r2_access_key_id": "R2 API 的 Access Key ID", + "r2_secret_access_key": "R2 API 的 Secret Access Key", + "r2_bucket": "桶名称", + "r2_public_url": "https://pub-xxxx.r2.dev" +} +``` + +- **r2_account_id**:Cloudflare 账户 ID(Dashboard 右侧或 R2 概览页)。 +- **r2_access_key_id / r2_secret_access_key**:在 [Cloudflare Dashboard → R2 → Manage R2 API Tokens](https://dash.cloudflare.com/?to=/:account/r2/api-tokens) 创建。 +- **r2_bucket**:R2 桶名称。 +- **r2_public_url**:桶的公开访问地址。需在 R2 桶设置中开启 **Public access** 并绑定 R2.dev 子域或自定义域名,例如 `https://pub-xxxx.r2.dev`(不要以 `/` 结尾)。 + +配置完成后,运行 `npm run dev` 时会自动把 `01` 中的图片上传到 R2、用返回的 URL 作为参考图请求生图,并在生图流程结束后删除本次上传的 R2 对象。**不配置 R2 时**,脚本仍使用原有逻辑:将 `01` 中的图片转为 base64 直接提交。 + +## 目录说明 + +- `01`:参考图目录(可自行创建)。把你希望作为参考的图片放到这里(支持 `.jpg/.jpeg/.png/.webp/.bmp/.gif`)。若配置了 **Cloudflare R2 图床**,脚本会将本目录图片上传到 R2 并以其 URL 作为生图参考,生图结束后自动删除本次上传的文件。 +- `save`:生成图片保存目录(脚本会自动创建)。 +- `nano_banana_client.py`:Python 主脚本。 +- `nano_banana_client.js`:Node 主脚本,配合 `npm run dev` 使用。 +- `package.json`:Node 项目配置(内置 `dev` 脚本)。 + +## 使用方式(Python) + +在项目根目录(`nano_banana_client.py` 所在目录)打开终端,执行: + +```bash +python nano_banana_client.py -p "你的提示词" +``` + +常用参数示例: + +- 指定提示词: + +```bash +python nano_banana_client.py -p "一只坐在阳台上的橘猫,写实风格,4k 高清" +``` + +- 指定尺寸与比例: + +```bash +python nano_banana_client.py -p "科幻城市夜景" --size 4K --aspect-ratio 16:9 +``` + +- 指定参考图目录与保存目录: + +```bash +python nano_banana_client.py -p "保持人物外观一致,换一套商务正装" --input-dir 01 --output-dir save +``` + +运行后脚本会: + +1. 从 `input-dir`(默认 `01`)中读取参考图并转为 base64; +2. 调用 `https://api.wuyinkeji.com/api/async/image_nanoBanana2` 创建任务; +3. 根据任务 `id` 调用结果详情接口轮询任务状态; +4. 将返回的图片 URL 下载到 `output-dir`(默认 `save`)。 + +> 说明:Python 脚本里的结果查询接口使用的是通用「结果详情」接口地址,如官方文档有更新,请根据最新文档调整 `RESULT_DETAIL_URL` 常量的值。 + +## 使用方式(Node + npm run dev) + +1. 确保已经在 `config_nano_banana.json` 中填好: + +```json +{ + "api_key": "你的速创API密钥", + "prompt": "默认提示词,例如:一只坐在阳台上的橘猫,写实风格,4k 高清", + "size": "1K 或 2K 或 4K,可选", + "reference_urls": [ + "https://你的参考图1.png", + "https://你的参考图2.jpg" + ] +} +``` + +2. 在项目根目录执行: + +```bash +npm run dev +``` + +3. Node 版本脚本的行为: + +1. 从 `config_nano_banana.json` 中读取 `api_key` 和 `prompt`。 +2. **若已配置 R2**:将 `01` 目录中的参考图上传到 R2,得到公网 URL,作为生图参考;**未配置 R2**:将 `01` 目录图片转为 base64。再合并配置中的 `reference_urls`。 +3. 调用 `https://api.wuyinkeji.com/api/async/image_nanoBanana2` 创建任务。 +4. 使用 `https://api.wuyinkeji.com/api/async/detail` 和返回的 `id` 轮询任务状态。 +5. 将生成图片下载到 `save` 目录;若使用了 R2,随后删除本次上传的 R2 参考图。