ComfyUI 交互式图像生成器
核心原则
原则 1:环境自适应(Skill Environment Adaptation)
技能运行后,必须学习用户环境并缓存,下次运行直接使用,避免重复检测浪费时间。
所有使用此技能的 Agent 必须遵循:
- 首次运行 → 检测环境(路径、API、配置等)
- 检测结果 → 写入
memory/comfyui-env.json缓存文件 - 后续运行 → 先读取缓存,路径有效则直接使用,无效才重新检测
- 技能更新 → 将环境特定的经验写入 SKILL.md 或 MEMORY.md
目标:减少 50%+ 的重复 API 调用和路径检测,提升用户体验。
原则 2:完整交互流程
每次生图必须走完整的5步对话流程,绝不能跳过交互直接生成。
用户说"生成图片" → 立即进入 Step 1,禁止跳过交互步骤直接提交到 ComfyUI。
5步对话流程
Step 0 - 模板选择(必做,动态扫描)
用户说"生成图片"后,必须先动态扫描本地模板,然后显示以下固定格式,不得使用默认回复或硬编码模板列表:
🎨 图片生成助手已就绪!
第一步:选择工作流模板(直接输入编号)
你有 N 个本地模板可用:
编号 模板名称
0 不用模板,从零开始
1 模板A.json
2 模板B.json
...
也可以直接说类型开始:
1️⃣ 文生图 / 2️⃣ 图生图 / 3️⃣ 线稿上色
请输入编号:
模板扫描规则:
- 扫描路径:
C:\Users\<user>\Documents\ComfyUI\user\default\workflows\ - 只扫描根目录下的
.json文件(不递归进入子目录) - 模板数量 ≤10 个时:全部列出
- 模板数量 >10 个时:列出前 10 个,末尾加一行
... 还有 X 个模板,不再一一列出,用户说"更多"时才分批显示或让用户指定编号 - 每个模板名称显示文件全名(如
生图模板1.json),不截断
判断规则:
- 用户输入
0/跳过/不用→ 不加载模板,进入 Step 1 - 用户输入
1~N→ 加载对应模板,读取 JSON 提取参数预填到 Step 3,向用户展示模板参数并允许逐个修改 - 用户直接说「文生图」等 → 跳过模板选择,进入 Step 1
- 即使选了模板,也要逐个询问参数(见 Step 3 模板加载规则)
Step 2 - 收集创意参数(主题/风格)
主题+风格收集
| 参数 | 说明 | 默认 | |------|------|------| | 🎯 主题 | 生成什么内容?人物/风景/动物/建筑/UI设计... | 询问 | | 🎨 风格 | 视觉风格?写实/动漫/油画/水彩/赛博朋克/国风/扁平UI... | 询问 |
请告诉我:主题是什么?想要什么风格?
判断规则:
- 用户只给一个词(如「动漫」「风景」)→ 判断是主题还是风格,缺的那个追问一句即可,不要啰嗦
- 用户给组合词(如「动漫风景」「UI设计」「赛博朋克城市」)→ 自动拆分为主题+风格,直接进入下一步
- 组合词包含风格关键词(动漫/写实/油画/水彩/赛博朋克/国风/扁平UI…)→ 第一个为风格,第二个为主题
- 组合词不包含风格关键词(如「海边日落」)→ 整体为主题,风格追问
- 单个词是风格关键词 → 主题追问
- 单个词是主题关键词(风景/人物/动物/建筑/UI设计…)→ 风格追问
图生图额外参数:
请上传原图,并告诉我您想要怎么改造它?
等待用户提供主题和风格后,进入 Step 3。
Step 3 - 逐步引导参数调节(向导模式)
两种入口:
- 从模板加载:已提取模板中的参数值,逐个展示给用户确认/修改
- 从零开始:按默认值逐个询问
收集完创意参数后,逐个询问生成参数,每次只问一个,用户可以回复具体值或「默认」跳过。
逐个引导顺序:
| 顺序 | 参数 | 问题示例 | 默认值(根据主题或模板) |
|------|------|----------|--------------------------|
| ① | 尺寸 | 📐 图片尺寸有要求吗?快捷键:1:1 3:4 4:3 9:16 16:9,也可自定义如 1024x768 | 模板值 > 主题推荐 |
| ② | 步数 | ✨ 采样步数?步数越高越精细但越慢 | 模板值 > 20 |
| ③ | CFG | 🎛️ CFG(提示词引导强度 1-30)?数值越高越贴近提示词 | 模板值 > 7.0 |
| ④ | 种子 | 🎲 种子(随机数起点)?相同种子+相同提示词=几乎相同的图 | 模板值 > 随机(-1) |
| ⑤ | 采样器 | ⚙️ 采样算法有偏好吗? | 模板值 > euler_ancestral |
每轮对话格式(以尺寸为例,从模板加载时):
📐 图片尺寸(①/⑤) 模板预置:512×512 默认使用模板值,如需修改请输入新值 快捷键:
1:13:44:39:1616:9,也可自定义如1024x768回复「默认」使用模板值,「跳过」进入下一步
每轮对话格式(从零开始时):
📐 图片尺寸(①/⑤) 默认:16:9(768×512)(风景推荐横版) 快捷键:
1:13:44:39:1616:9也可自定义,如1024x768回复「默认」或「下一步」跳过
其余参数的从零开始提示模板:
步数:
✨ 采样步数(②/⑤) 默认:20(步数越高越精细但越慢,建议 10-50) 回复「默认」或「下一步」跳过
CFG:
🎛️ CFG(提示词引导强度)(③/⑤) 默认:7.0(数值越高越贴近提示词,建议 5-15,过高会过饱和) 回复「默认」或「下一步」跳过
种子:
🎲 种子(随机数起点)(④/⑤) 默认:-1(随机),每次出图结果不同 输入固定数值(如
42、888)→ 相同种子+相同提示词 ≈ 相同图片,方便微调复现 回复「默认」或「下一步」跳过
采样器:
⚙️ 采样算法(⑤/⑤) 默认:euler_ancestral(色彩丰富,适合动漫/创意风格) 常用:
euler(稳定)/dpm++_2m(精细)/dpm++_sde(质感) 回复「默认」或「下一步」跳过
其余参数的从模板加载提示模板:
步数:
✨ 采样步数(②/⑤) 模板预置:20 默认使用模板值,步数越高越精细但越慢(建议 10-50) 回复「默认」使用模板值,「跳过」进入下一步
CFG:
🎛️ CFG(提示词引导强度)(③/⑤) 模板预置:7.0 默认使用模板值,数值越高越贴近提示词(建议 5-15) 回复「默认」使用模板值,「跳过」进入下一步
种子:
🎲 种子(随机数起点)(④/⑤) 模板预置:888(固定种子) 固定数值可复现同一张图(相同种子+相同提示词 ≈ 相同结果) 回复「随机」改为 -1(每次不同),「默认」使用模板值,「跳过」进入下一步 如需其他固定种子,直接输入数值(如
42)
采样器:
⚙️ 采样算法(⑤/⑤) 模板预置:euler 默认使用模板值 常用:
euler(稳定)/euler_ancestral(色彩丰富)/dpm++_2m(精细) 回复「默认」使用模板值,「跳过」进入下一步
规则:
- 用户回复具体值 → 设置该参数,自动进入下一个参数
- 用户回复「默认」「跳过」→ 使用当前显示的默认值,进入下一个
- 用户回复「上一步」→ 返回修改前一个参数(第一个参数时返回主题/风格)
- 用户一次性回复多个值(如
16:9,30,8.5)→ 按顺序依次设置,快速跳过后续询问 - 所有问题回答完后,自动进入 Step 4
主题 → 默认尺寸映射表:
| 主题 | 默认尺寸 | 理由 | |------|----------|------| | UI设计 / 手机App | 9:16 (512×768) | 竖版更接近手机屏幕 | | 横幅 / 海报 / 风景 / 壁纸 | 16:9 (768×512) | 横版更自然 | | Logo / 头像 / 图标 | 1:1 (512×512) | 方形构图 | | 人物 / 动漫角色 | 3:4 (384×512) | 竖版适合人物 | | 其他 | 1:1 (512×512) | 通用 |
高级用法:批量修改语法(Agent 侧解析规则)
Agent 需解析用户输入,支持以下格式:
| 格式 | 示例 | 含义 |
|------|------|------|
| 尺寸快捷键 | 16:9 | 宽768 高512 |
| 自定义尺寸 | 1024x768 | 宽1024 高768 |
| 编号:值 | 3:30 | 第3项参数改为 30 |
| 编号,编号:值,值 | 4,5:8.5,-1 | 第4项=8.5,第5项=-1 |
| 组合 | 16:9,3:30,4:8.5 | 尺寸+步数+CFG 同时修改 |
| 上一步 | - | 返回前一个参数(或返回主题/风格) |
解析优先级:先检查尺寸快捷键/自定义尺寸,再按编号修改。
尺寸快捷键映射表:
| 快捷键 | 宽×高 | 适用场景 |
|--------|-------|----------|
| 1:1 | 512×512 | 头像、Logo、图标 |
| 3:4 | 384×512 | 竖版小幅 |
| 4:3 | 512×384 | 横版小幅 |
| 9:16 | 512×768 | 手机UI、竖版海报 |
| 16:9 | 768×512 | 横幅、壁纸、桌面 |
Step 4 - 提示词收集
第一阶段:收集用户描述
参数确认后,主动询问用户想要的具体画面内容:
🖼️ 请描述您想要的画面细节: 比如:画面中有什么?什么动作?什么场景?什么氛围? 可以用中文自由描述,也可以直接提供英文 prompt 回复「默认」我会根据主题和风格自动生成
用户回复后,Agent 需要做:
- 保留用户原始描述
- 基于主题+风格+用户描述,整理出英文提示词(SD 常用格式)
- 自动补充质量词(如
masterpiece, best quality, highres)和负面提示词 - 进入第二阶段确认
第二阶段:确认预览
展示完整配置供用户最终确认:
📋 请确认您的生成需求:
配置:
- 类型:文生图
- 主题:人物 | 风格:动漫
- 尺寸:512×512 | 步数:20 | CFG:7.0
您的描述: 一个可爱的动漫女孩,蓝色的长发,穿着校服,站在樱花树下
正向提示词:
masterpiece, best quality, highres, anime style, beautiful girl, long blue hair, school uniform, standing under cherry blossom tree, pink petals falling, soft lighting, detailed eyes, cel shading
负面提示词:
lowres, bad anatomy, bad hands, text, error, missing fingers, cropped, worst quality, low quality, jpeg artifacts
✅ 确认无误请回复「确认」或「开始生成」 🔄 如需修改提示词请直接告诉我 ⬆️ 输入「上一步」返回修改参数
规则:
- 用户可以修改提示词(如「加上日落背景」「去掉校服」)→ 更新提示词后重新展示
- 用户可以返回修改参数 → 回到 Step 3 对应参数
- 只有用户明确确认后才进入 Step 5 执行
Step 5 - 执行生成
用户确认后,执行 ComfyUI 生成:
- 检查 ComfyUI 服务状态
- 检测可用模型(自动)
- 构建工作流 JSON
- 提交到 ComfyUI API
- 轮询等待完成
回复格式:
⚙️ 正在生成中,请稍候... 🔄 已提交任务,等待完成...
生成完成后回复:
✅ 图片生成完成! 📐 尺寸:512×512 | 步数:20 | 模型:SD 1.5
然后发送图片:
MEDIA: <输出文件路径>
Step 6 - 结果与迭代
图片发送后,询问后续操作:
🐱 图片已送达!
- ✅ 满意的话可以继续生成
- 🔄 想换风格/参数?告诉我
- 📐 想换尺寸?比如横版或竖版
- 🎨 想加特效?比如加LoRA
ComfyUI 执行脚本
当用户确认后,调用 scripts/generate.py 执行生成。
脚本用法
# Windows PowerShell
python scripts/generate.py --prompt "一只可爱的小猫" --style "写实摄影" --size "512x512" --steps 20
模型检测逻辑
脚本自动检测可用模型,优先级:
- SD 1.5 checkpoint (
*.safetensorsin checkpoints/) - SDXL checkpoint
- 其他可用模型
若检测失败,回退到 SD 1.5 默认路径:
C:\Users\<user>\Documents\ComfyUI\models\checkpoints\
工作流构建
根据检测到的模型类型自动选择:
SD 1.5 工作流字段:
CheckpointLoaderSimple→ clip, model, vaeCLIPTextEncode→ positive/negativeEmptyLatentImage→ latentKSampler→ samplingVAEDecode→ decodeSaveImage→ output
输出路径
图片保存到 C:\Users\<user>\Documents\ComfyUI\output\
环境自适应(首次运行检测)
首次使用时,Agent 必须检测并缓存以下环境信息:
0. ComfyUI API 地址(固定)
⚠️ 重要:ComfyUI 桌面端默认端口是 8000,不要尝试其他端口!
固定配置:
- API 地址:
http://127.0.0.1:8000 - 端口:8000(不是 8188 或其他)
检查服务状态:
# 检查 ComfyUI 是否运行
Invoke-RestMethod -Uri "http://127.0.0.1:8000/system_stats" -TimeoutSec 2
- 成功 → ComfyUI 已运行,继续生成
- 失败 → 提示用户启动 ComfyUI 桌面版
禁止行为:
- ❌ 不要尝试 8188、7860 等其他端口
- ❌ 不要循环尝试多个端口
- ❌ 不要猜测端口号
1. 检测 ComfyUI 安装路径
ComfyUI 可能在以下位置:
- 用户目录:
C:\Users\<user>\Documents\ComfyUI\ - 安装目录:
C:\software\ComfyUI\resources\ComfyUI\
检测逻辑:
检查 1: C:\Users\<user>\Documents\ComfyUI\output\ 是否存在
检查 2: C:\software\ComfyUI\resources\ComfyUI\output\ 是否存在
→ 优先使用存在的路径
→ 如果都存在,检查哪个目录有更新的文件
→ 缓存结果到 memory/comfyui-env.json
2. 输出目录缓存
关键发现:ComfyUI 可能有多个输出目录,API 返回的文件名可能在任一目录。
检测流程:
- 先检查用户目录输出
- 再检查安装目录输出
- 缓存实际输出路径
3. 环境缓存文件格式
保存到 memory/comfyui-env.json:
{
"comfyui_url": "http://127.0.0.1:8000",
"comfyui_port": 8000,
"output_dir": "C:\\software\\ComfyUI\\resources\\ComfyUI\\output\\",
"workflows_dir": "C:\\Users\\<user>\\Documents\\ComfyUI\\user\\default\\workflows\\",
"checkpoints_dir": "C:\\Users\\<user>\\Documents\\ComfyUI\\models\\checkpoints\\",
"default_checkpoint": "v1-5-pruned-emaonly.safetensors",
"detected_at": "2026-04-20T18:05:00+08:00"
}
重要提示:
comfyui_url和comfyui_port是固定值,无需检测- 只需检测路径相关配置
每次生成前检查缓存:
- 缓存存在且路径有效 → 直接使用,跳过检测
- 缓存过期或路径无效 → 重新检测并更新缓存
执行优化(避免重复 API 调用)
1. API 请求格式规范
正确格式(ComfyUI API 要求):
{
"5": {
"class_type": "KSampler",
"inputs": {
"model": ["1", 0], // ← 必须是数组 [节点ID, 输出索引]
"positive": ["3", 0],
"latent_image": ["2", 0]
}
}
}
错误格式(会导致 'str' object has no attribute 'shape'):
{
"model": "1 0", // ❌ 字符串格式,ComfyUI 无法解析
"positive": "3 0"
}
Agent 构建工作流时必须确保节点连接格式正确!
2. 利用执行缓存
ComfyUI 有内置缓存机制:
- 相同的 checkpoint + 相同的参数 → 自动缓存,跳过重复计算
- 首次加载 checkpoint 后,后续生成会复用缓存
优化策略:
- 生成前不重复检测已缓存的节点
- 查看
/history接口确认缓存命中(execution_cached消息)
3. 状态检查合并
一次请求获取完整状态:
# 同时检查队列和历史(避免多次 API 调用)
$queue = Invoke-RestMethod -Uri "http://127.0.0.1:8000/queue"
$history = Invoke-RestMethod -Uri "http://127.0.0.1:8000/history"
4. 轮询优化
生成任务提交后,避免频繁轮询:
- CPU 模式:每 30 秒检查一次(10 步约需 2-3 分钟)
- GPU 模式:每 5 秒检查一次
5. 输出文件检查
生成完成后,优先检查缓存目录:
# 先读取缓存确定输出目录
$env = Get-Content memory/comfyui-env.json | ConvertFrom-Json
$outputFile = Join-Path $env.output_dir $filename
错误处理
| 错误 | 处理方式 | |------|----------| | ComfyUI 未运行 | 提示用户启动 ComfyUI 桌面版 | | 模型未找到 | 提示检查模型路径,列出可用模型 | | 生成失败 | 重试一次,失败则说明具体错误 | | 显存不足 | 建议降低分辨率或质量 | | API 格式错误 | 检查节点连接格式,确保使用数组而非字符串 | | 输出文件找不到 | 检查缓存目录 vs 用户目录,更新环境缓存 |
注意事项
- 必须交互:禁止跳过 Step 1-3 直接生成
- 参数完整:每个参数都要确认,不能假设
- 跨平台兼容:脚本必须在任何 QClaw 环境下运行
- Windows 编码:Python 脚本避免 emoji 输出,使用纯 ASCII 日志
- 模型路径:使用用户本地的 ComfyUI 模型目录,不要硬编码固定路径
给其他用户的说明
这个技能会自动学习您的环境
当您首次使用此技能时,Agent 会:
- 自动检测 ComfyUI 的安装位置
- 自动找到输出目录和模型目录
- 将检测结果保存到
memory/comfyui-env.json
下次使用时,Agent 会直接读取缓存,无需重复检测,为您节省时间。
如果您换了电脑或重新安装了 ComfyUI
删除 memory/comfyui-env.json 文件,技能会重新检测并更新缓存。
常见问题
Q: 为什么输出目录不在用户文档目录? A: ComfyUI 便携版可能将输出目录放在安装路径下。技能会自动检测正确的位置。
Q: 生成速度很慢怎么办? A: 如果您使用 CPU 模式,建议减少步数(如 10-15 步)或使用更小的分辨率。GPU 模式会快很多。
Q: 如何使用自定义模型?
A: 将模型文件(.safetensors)放到 ComfyUI 的 models/checkpoints/ 目录下,技能会自动检测并列出可用模型。
技能版本历史
| 版本 | 日期 | 更新内容 | |------|------|----------| | 1.1.0 | 2026-04-20 | 添加环境自适应机制,缓存检测结果,减少重复调用 | | 1.0.0 | - | 初始版本,5步交互式生图流程 |
Scan to join WeChat group