# ComfyUI-SimpleChat Architecture Design ## Design Philosophy **Do one thing, do best** - 每个节点只做一件事,做到极致。 ## 节点设计原则 1. **单一职责**: 每个节点只负责一个功能 2. **清晰命名**: 节点名称直接表达功能 3. **最少配置**: 合理默认值,减少必填项 4. **美观布局**: 输入输出顺序符合直觉 --- ## 节点清单 ### 配置节点 | 节点 | 功能 | 设计理念 | |------|------|----------| | `API Config` | 配置 API 连接 | 一次配置,到处使用 | ### 对话节点 | 节点 | 功能 | 设计理念 | |------|------|----------| | `Chat` | 基础对话 | 最简单的文本对话 | | `Chat with Image` | 发送图片给 LLM | 视觉理解 | | `Chat NoASS` | NoASS 格式对话 | 角色扮演优化 | ### 图片生成节点 (Gemini Only) | 节点 | 功能 | 设计理念 | |------|------|----------| | `Gemini Image Gen` | 文生图 | 纯文本生成图片 | | `Gemini Image Edit` | 图片编辑 | 基于参考图修改 | --- ## 节点详细设计 ### 1. API Config **功能**: 配置 API 连接参数 ``` ┌─────────────────────────────────────┐ │ 🔧 API Config │ ├─────────────────────────────────────┤ │ provider [openai ▼] │ │ api_key [••••••••••] │ │ base_url [ ] │ │ model [gpt-4o ▼] │ ├─────────────────────────────────────┤ │ CONFIG ○───│ └─────────────────────────────────────┘ ``` **输入:** - `provider`: 下拉 ["openai", "claude", "gemini"] - `api_key`: 密码输入 - `base_url`: 文本 (可选,留空使用默认) - `model`: 可编辑下拉 **输出:** - `CONFIG`: 配置对象 --- ### 2. Chat **功能**: 基础文本对话 ``` ┌─────────────────────────────────────┐ │ 💬 Chat │ ├─────────────────────────────────────┤ │ ───○ config │ ├─────────────────────────────────────┤ │ prompt [ ] │ │ [ ] │ │ system [ ] │ │ temperature [1.0 ] │ │ max_tokens [2048 ] │ ├─────────────────────────────────────┤ │ text ○───│ └─────────────────────────────────────┘ ``` **输入:** - `config`: CONFIG (必需) - `prompt`: 多行文本 - `system`: 系统提示 (可选) - `temperature`: 0-2, 默认 1.0 - `max_tokens`: 默认 2048 **输出:** - `text`: STRING --- ### 3. Chat with Image **功能**: 发送图片给 LLM 分析 ``` ┌─────────────────────────────────────┐ │ 🖼️ Chat with Image │ ├─────────────────────────────────────┤ │ ───○ config │ │ ───○ image │ ├─────────────────────────────────────┤ │ prompt [Describe this image ] │ │ [ ] │ │ system [ ] │ │ temperature [1.0 ] │ │ max_tokens [2048 ] │ ├─────────────────────────────────────┤ │ text ○───│ └─────────────────────────────────────┘ ``` **输入:** - `config`: CONFIG - `image`: IMAGE - `prompt`: 多行文本 - `system`: 系统提示 (可选) - `temperature`: 0-2 - `max_tokens`: 默认 2048 **输出:** - `text`: STRING --- ### 4. Chat NoASS **功能**: NoASS 格式的角色扮演对话 ``` ┌─────────────────────────────────────┐ │ 🎭 Chat NoASS │ ├─────────────────────────────────────┤ │ ───○ config │ │ ───○ history (optional) │ │ ───○ image (optional) │ ├─────────────────────────────────────┤ │ system [You are... ] │ │ [ ] │ │ user_input [ ] │ │ user_name [User ] │ │ char_name [Assistant] │ │ temperature [1.0 ] │ │ max_tokens [2048 ] │ ├─────────────────────────────────────┤ │ text ○───│ │ history ○───│ └─────────────────────────────────────┘ ``` **输入:** - `config`: CONFIG - `history`: STRING (可选,上一轮输出) - `image`: IMAGE (可选) - `system`: 系统提示/世界观设定 - `user_input`: 用户本轮输入 - `user_name`: 用户角色名 - `char_name`: AI 角色名 - `temperature`: 0-2 - `max_tokens`: 默认 2048 **输出:** - `text`: STRING (本轮 AI 回复) - `history`: STRING (完整对话历史,可连接到下一个节点的 history 输入) --- ### 5. Gemini Image Gen **功能**: Gemini 文生图 ``` ┌─────────────────────────────────────┐ │ 🎨 Gemini Image Gen │ ├─────────────────────────────────────┤ │ ───○ config (Gemini only) │ ├─────────────────────────────────────┤ │ prompt [A cat wearing a hat ] │ │ [ ] │ │ aspect [1:1 ▼] │ │ size [1K ▼] │ ├─────────────────────────────────────┤ │ IMAGE ○───│ │ text ○───│ └─────────────────────────────────────┘ ``` **输入:** - `config`: CONFIG (必须是 Gemini provider) - `prompt`: 多行文本 - `aspect`: 下拉 ["1:1", "16:9", "9:16", "4:3", "3:4"] - `size`: 下拉 ["1K", "2K", "4K"] **输出:** - `IMAGE`: IMAGE - `text`: STRING (Gemini 的文字描述) --- ### 6. Gemini Image Edit **功能**: Gemini 图片编辑 ``` ┌─────────────────────────────────────┐ │ ✏️ Gemini Image Edit │ ├─────────────────────────────────────┤ │ ───○ config (Gemini only) │ │ ───○ image │ ├─────────────────────────────────────┤ │ prompt [Add a red hat ] │ │ [ ] │ │ size [1K ▼] │ ├─────────────────────────────────────┤ │ IMAGE ○───│ │ text ○───│ └─────────────────────────────────────┘ ``` **输入:** - `config`: CONFIG (必须是 Gemini provider) - `image`: IMAGE (要编辑的图片) - `prompt`: 编辑指令 - `size`: 下拉 ["1K", "2K", "4K"] **输出:** - `IMAGE`: IMAGE - `text`: STRING --- ## 数据流示例 ### 基础对话 ``` [API Config] ──CONFIG──> [Chat] ──text──> [Display Text] ``` ### 图片分析 ``` [Load Image] ──IMAGE──┐ ├──> [Chat with Image] ──text──> [Display Text] [API Config] ──CONFIG─┘ ``` ### 多轮 NoASS 对话 ``` [API Config] ──CONFIG──> [Chat NoASS] ──history──> [Chat NoASS] ──history──> ... │ │ └──text──> └──text──> ``` ### Gemini 图片生成 ``` [API Config] ──CONFIG──> [Gemini Image Gen] ──IMAGE──> [Preview Image] │ │ │ ──text──> [Display Text] ``` --- ## 文件结构 ``` custom_nodes/ComfyUI-SimpleChat/ ├── __init__.py # 节点注册 ├── nodes/ │ ├── __init__.py │ ├── config.py # API Config │ ├── chat.py # Chat │ ├── chat_image.py # Chat with Image │ ├── chat_noass.py # Chat NoASS │ ├── gemini_gen.py # Gemini Image Gen │ └── gemini_edit.py # Gemini Image Edit ├── core/ │ ├── __init__.py │ ├── providers/ │ │ ├── __init__.py │ │ ├── base.py # Provider 抽象基类 │ │ ├── openai.py # OpenAI (+ 兼容 API) │ │ ├── claude.py # Claude/Anthropic │ │ └── gemini.py # Google Gemini │ ├── noass.py # NoASS 格式处理 │ └── image_utils.py # 图片转换 ├── docs/ # 文档 ├── requirements.txt └── README.md ``` --- ## 实现优先级 1. **Phase 1**: API Config + Chat (最小可用) 2. **Phase 2**: Chat with Image 3. **Phase 3**: Chat NoASS 4. **Phase 4**: Gemini Image Gen/Edit