SanDiegoDude/scg-prompt-forge
GitHub: SanDiegoDude/scg-prompt-forge
一个 ComfyUI 自定义节点,利用大语言模型将种子创意批量转化为结构化、可注入关键词的创意提示词,专为 LoRA 测试等图像生成工作流设计。
Stars: 0 | Forks: 0
# SCG Prompt Forge
一个用于**批量生成创意提示词**的 ComfyUI 自定义节点。给它一个种子创意(例如:“游击营销街头拍摄,参考 DKNY 或 American Eagle 风格的广告”),它就能批量输出独特且定制的提示词 —— 专为需要数百个带有特定触发关键词(例如十六进制颜色代码)的高质量提示词的 LoRA 测试工作流而打造。
它会在 ComfyUI 画布上方打开一个全屏的生成器界面,你可以在这里:
- 描述你正在构思的**种子创意**,以及可选的需要避免的元素。
- 可选地添加一张**参考图片**(点击、拖拽或通过 Ctrl+V 粘贴)。如果没有提供种子文本,图片的场景将成为生成的跳板;如果提供了种子文本,则种子创意处于主导地位,并可以引导图片的使用方式(仅使用其色调,或仅使用其主体等)。
- 列出**必选关键词**(LoRA 触发词、十六进制代码),可以选择注入到每个提示词中,或者在批次中**轮换**(每个提示词使用一个)。
- 加载 **wildcard .txt 文件**(点击或拖拽放入 —— 格式与 scg-wildcards 相同:每行一个选项,忽略 `#` 注释)。每个文件都会获得一个可编辑的关键词;每个提示词都会抽取各自的随机行。在种子创意或必选关键词中将文件引用为 `_name_`,可以控制该值出现的位置(关键词行占位符会解析为抽取的值,因此逐字检查仍然适用);未被引用的文件依然会被编织到每个提示词中。
- 从下拉菜单中选择一种**输出格式** —— 段落描述、聚焦摄影的多段落、booru/CSV 标签列表、Ideogram bbox JSON、简单 JSON 字段、YAML、markdown —— 或者选择 **Custom**(自定义),你可以用纯文本描述格式,Agent 会据此执行。
- 生成最多 500 个提示词的批次。Agent 首先将种子扩展为创意简报和不同的概念角度,然后分块编写提示词,确保每个提示词都有自己的角度,而不是 200 个几乎重复的内容。
- 审查批次:就地编辑任何提示词、删除、单独**重新生成** 提示词,或者点击 **Generate more** 追加更多内容。缺少必选关键词的提示词会被标记出来。
- **Save to node**(保存到节点)并在你的工作流中逐步执行该批次,**Copy all**(全部复制)到剪贴板,或将批次下载为文件:
- **.txt** —— UTF-8 编码,提示词由 `=== PROMPT n/N ===` 行分隔,因此无论提示词是什么格式,该文件都保持可拆分状态(`/^=== PROMPT \d+\/\d+ ===$/m`)。
- **.jsonl** —— UTF-8 编码,每行一个 JSON 编码的提示词字符串,非常适合脚本处理。
## 节点输出
| 输出 | 类型 | 说明 |
| --- | --- | --- |
| `prompt` | STRING | `prompts[index % count]` —— 当前提示词。 |
| `index` | INT | 实际输出的(循环折返的)索引。 |
| `count` | INT | 保存的批次中的提示词总数。 |
`index` 控件的默认控制模式为 **increment**(递增):排队 N 次运行,节点将在每次运行时遍历批次中的一个提示词,并在结束后循环折返。将控制模式设置为 **fixed**(固定)即可固定使用单个提示词。
该节点还有一个 **Copy Batch** 按钮,可将所有已保存的提示词复制到剪贴板(以空行分隔)。
## 安装说明
```
cd ComfyUI/custom_nodes
git clone https://github.com/SanDiegoDude/scg-prompt-forge.git scg_prompt_forge
```
然后**重启 ComfyUI**(该插件在启动时会注册两条小型服务器路由)。该节点将显示在 `SCG/PromptForge` 下的 **SCG Prompt Forge** 中。
### 依赖项
对于常见情况(兼容 OpenAI 的端点,如 LM Studio、OpenAI、Grok、Gemini 的 OpenAI 兼容 URL),**无需安装任何内容** —— Agent 调用通过 ComfyUI 服务器使用其内置的 `aiohttp` 进行代理。
唯一的可选依赖是 **`google-auth`**,*只有*在配置 **Vertex AI** 提供商时才需要(见下文):
```
pip install -r requirements.txt
```
## 配置 AI 提供商 (`.env`)
Agent 可以与任何**兼容 OpenAI** 的 chat-completions 端点(LM Studio、OpenAI、x.ai/Grok、Gemini 的 OpenAI 兼容端点等)进行通信。提供商在本地 `.env` 文件中声明,以便 **API 密钥仅保留在服务器上,永远不会发送到浏览器** —— UI 只能看到每个提供商的 ID/标签/模型,并请求 ComfyUI 服务器代为发起调用。
1. 复制示例文件:
cp .env.example .env
2. 每行添加一个提供商:
AI_PROVIDER_ = 标签 | 模型 | base_url (留空 = 官方 OpenAI) | api_key
示例:
AI_PROVIDER_OPENAI = OpenAI (gpt-5.4-mini) | gpt-5.4-mini | | sk-...
AI_PROVIDER_GROK = grok-4.3 | grok-4.3 | https://api.x.ai/v1 | xai-...
AI_PROVIDER_GEMINI = Gemini 3.5 Flash | gemini-3.5-flash | https://generativelanguage.googleapis.com/v1beta/openai | ...
AI_PROVIDER_LOCAL = Local (qwen3) | qwen3-... | http://192.168.0.180:1234 | 123
- 将 `base_url` 留空以使用官方 OpenAI 端点。
- 纯主机名(例如 `http://192.168.0.180:1234`,LM Studio)会自动在末尾追加 `/v1`。
- 使用 `#` 注释掉一行即可隐藏该提供商。
3. 在 Forge UI 中(**Agent Configuration → Agent settings**),从下拉菜单中选择你的提供商。修改 `.env` 后,点击 **Refresh**(刷新)即可热重载提供商 —— 无需重启。
### 通过 Vertex AI 使用 Gemini
Vertex 提供商通过 Vertex 的 OpenAI 兼容端点访问 Gemini。它们使用 `vertex://PROJECT/LOCATION` 作为 base URL,并通过 Google OAuth 进行身份验证(第 4 个字段中不需要静态密钥):
```
AI_PROVIDER_ = Label | model | vertex://PROJECT/LOCATION | [path/to/service-account.json]
```
将 `PROJECT` 替换为你的 Google Cloud 项目 ID,将 `LOCATION` 替换为 `global`(全局端点)或诸如 `us-central1` 的区域。将第 4 个字段留空即可使用 Application Default Credentials,或者将其设置为服务账号 JSON 文件的路径。服务器会添加所需的 `google/` 模型前缀,并为你获取/刷新 OAuth token,因此任何敏感信息都不会传输到浏览器。
**逐步设置:**
1. **启用 API。** 在你的 Google Cloud 项目中,启用 *Vertex AI API* 并确保已启用结算功能。
2. **安装身份验证依赖项** 到运行 ComfyUI 的相同环境中:
pip install -r requirements.txt
3. **身份验证** —— 选择一种方式:
- **Application Default Credentials(最简单)。** 安装 [gcloud CLI](https://cloud.google.com/sdk/docs/install),然后运行:
gcloud auth application-default login
将 `.env` 的第 4 个字段留空。
- **Service account(服务账号)。** 创建一个具有 *Vertex AI User* 角色的服务账号,下载其 JSON 密钥,并将文件路径放入 `.env` 的第 4 个字段中:
AI_PROVIDER_GEMINI = Gemini Vertex | gemini-2.0-flash | vertex://my-project-id/global | /home/me/keys/vertex-sa.json
4. **将提供商配置行添加** 到 `.env` 中(将占位符替换为你自己的项目、区域和模型):
AI_PROVIDER_GEMINI = Gemini Vertex | gemini-2.0-flash | vertex://my-project-id/us-central1 |
5. **重启 ComfyUI** 一次以注册提供商,然后从 **Agent Configuration → Agent settings** 的选择器中选择它。(后续修改 `.env` 只需点击 **Refresh** 按钮即可。)
### 关于 OpenAI GPT-5 / o 系列模型的说明
这些推理模型具有略有不同的 API 接口。服务器会自动为你处理:它会发送 `reasoning_effort: "low"`,使用 `max_completion_tokens` 代替 `max_tokens`,并省略 `temperature`(这些模型会拒绝该参数)。其他提供商使用标准的 `max_tokens` + `temperature`。
## 工作原理
- `nodes.py` —— `SCG Prompt Forge` 节点;逐步遍历已保存的批次。
- `providers.py` —— 解析 `.env` 并注册两条路由:
- `GET /scg_prompt_forge/providers` —— 提供商列表(不包含密钥)。
- `POST /scg_prompt_forge/chat` —— 连接到所选提供商的服务器端代理。
- `web/prompt_forge.js` —— 父扩展:隐藏批次控件,添加 Open Forge / Copy Batch 按钮,并在 iframe 与节点之间进行桥接。
- `web/Prompt_Forge.html` —— Forge UI(覆盖在 ComfyUI 画布上的 iframe):批次设置、两阶段分块生成 pipeline、可审查的提示词列表,以及带有可编辑规则集的 Agent Configuration 面板。
生成 pipeline 完全在覆盖层中运行(通过聊天代理);在你使用已保存的批次运行自己的工作流之前,不会向 ComfyUI 图队列发送任何内容。
## 许可证
MIT —— 详情请见 [LICENSE](LICENSE)。
标签:AIGC, AI绘画, ComfyUI, Linux安全, LoRA测试, Petitpotam, 后端开发, 工作流插件, 提示词工程, 数据可视化, 策略决策点, 自动化生成, 逆向工具