AIRI 接入本地 ComfyUI:工作流驱动的图像生成配置全指南
AIRI 接入本地 ComfyUI工作流驱动的图像生成配置全指南【免费下载链接】airi Self hosted, you-owned Grok Companion, a container of souls of waifu, cyber livings to bring them into our worlds, wishing to achieve Neuro-samas altitude. Capable of realtime voice chat, Minecraft, Factorio playing. Web / macOS / Windows supported.项目地址: https://gitcode.com/GitHub_Trending/ai/airiComfyUI 是 AIRI 项目中的本地艺术服务商Local Artistry Provider通过它AIRI 可以直接调用你本机或可信局域网中自建的 ComfyUI 服务把保存在本地的图像生成工作流变为可由 AI 智能体按需触发的工具。本文以 官方 ComfyUI 配置文档 为主线结合仓库中设置页面、桌面端 Provider 实现与配置存储代码完整讲解从准备 ComfyUI 服务、导入工作流、暴露参数、验证生成到排查故障的全过程。读完本文你将掌握如何在 AIRI 中完成「本地 ComfyUI API 工作流 Tool Calling 聊天模型」三者的串联并理解底层POST /prompt、/history轮询与字段覆盖注入的实现原理。为什么选择 ComfyUI 作为 AIRI 的本地艺术服务商AIRI 的「艺术Artistry」能力不止一种后端除 ComfyUI 外还支持云端推理服务 Replicate如 flux-schnell 等预设与 Google AI Studio 的 Nano BananaGemini 原生图像生成这些配置项可以在 桌面端配置 Schema 与中文界面文案 settings.yaml 中看到。选择 ComfyUI 的场景非常明确你希望使用自己安装的模型、自定义节点Custom Nodes和亲手搭建的工作流并把图像生成完全留在本地环境中。这正是官方文档对「为什么选择 ComfyUI」给出的定位。相应地AIRI 对 ComfyUI 的界面文案也将其描述为「本地图像生成运行器」并明确指出责任边界模型下载与节点安装需要由你自行完成AIRI 只负责「连接 → 提交工作流 → 取回图片」。第一步准备 ComfyUI 服务与可执行的工作流在进入 AIRI 配置之前需要先完成三件事启动 ComfyUI 服务。AIRI 默认连接http://localhost:8188该默认值在 artistry.ts 的 Schema 与 comfyui.ts 的 Provider 中均有定义这也是 ComfyUI 的标准端口。在 ComfyUI 中准备一个能够直接执行的图像工作流并导出其API 格式API Format的工作流 JSON。导出方式是在 ComfyUI 中启用开发者模式Developer Mode然后通过工作流菜单「保存API 格式」导出。中文界面文案对此的说明是「启用开发者模式 → 保存API 格式」见 settings.yaml。注意AIRI 上传解析器只接受 API 格式的扁平 JSONnodeId → node的映射结构而非图形编辑器的nodes/links结构这一点在后面的字段解析机制中会详细展开。确认网络可达。若 AIRI 与 ComfyUI 不在同一台设备需确认该地址可从 AIRI 所在设备访问例如同一局域网内的http://192.168.x.x:8188。⚠️本地服务与工作流安全不要把 ComfyUI 的服务端口暴露给不受信任的公共网络。导入工作流前应检查其中的节点、模型路径和参数不要导入来源不明的工作流 JSON —— 恶意工作流可能引用不存在的节点、指向可疑的外部模型路径甚至包含不受控的输入参数。第二步在 AIRI 中完成 ComfyUI 配置配置入口为设置 → 服务商 → 艺术 → ComfyUI对应仓库中的设置页面 comfyui.vue。完整流程如下打开设置 → 服务商 → 艺术 → ComfyUI进入连接配置面板。填写ComfyUI Server URL界面标签「服务器地址」。本机默认使用http://localhost:8188该值会被持久化到桌面端配置的artistryGlobals.comfyuiServerUrl字段。点击测试连接确认 AIRI 能读取 ComfyUI 服务状态。在「工作流模板」区域上传 API 工作流 JSON填写工作流名称并勾选要让 AIRI 暴露给 AI 智能体的输入字段即「公开参数」。保存工作流并通过单选按钮将它设为活动工作流。测试连接桌面端与浏览器的两条路径从源码看测试连接有两种实现见 comfyui.vue桌面端Electron通过 IPC 调用artistryTestComfyUIConnection事件事件地址定义在 artistry.ts由主进程代理请求从而绕过浏览器的 CORS 限制。浏览器端Web直接以 CORS 模式fetchComfyUI 的/system_stats端点成功后会解析返回的devices数组并展示 GPU 名称例如「已连接 — NVIDIA GeForce RTX 4090」此路径受 CORS 约束失败时会提示 CORS 相关错误。上传工作流与「公开字段」机制上传工作流时设置页面会读取 JSON 文件并做如下解析见 comfyui.vue将 API 格式的扁平对象nodeId → node逐节点展开节点标题取node._meta?.title缺失时回退到node.class_type遍历node.inputs跳过值为数组的字段——这些是节点间的连线引用如[4, 0]表示连接不能被当作可写输入剩余的非数组字段展示为「复选框列表」例如正向提示词的text、seed、width、height、cfg、steps等由你决定哪些公开给 AI 智能体。勾选的字段会形成exposedFields按节点标题分组的字段名映射连同原始工作流一起保存为ComfyUIWorkflowTemplate。保存时工作流 id 由名称生成name.toLowerCase().replace(/[^a-z0-9]/g, -)例如Anime Text2Img会变成anime-text2img同名 id 的工作流会覆盖更新保存第一个工作流时会自动将其设为活动工作流未勾选任何字段时「保存」按钮不可用totalExposed 0时禁用。保存后展开工作流条目可以看到「公开参数」可视化列表以及一个可直接复制的「绘图配置片段」示例 JSON它形如{ template: anime-text2img, KSampler: { seed: 123, cfg: 7 } }界面文案说明这个片段可粘贴到AIRI 角色卡的绘图配置Artistry 配置中用于按节点标题覆盖这些公开字段——这正是下文中applyOverrides机制所消费的输入格式。第三步验证配置并触发首次生成配置完成后按以下步骤验证整条链路在设置 → 意识Consciousness中选择支持Tool Calling / Function Calling工具函数调用的聊天模型。AIRI 需要由该聊天模型在对话中调用 ComfyUI 图像生成工具仅支持文本对话的模型无法触发生成工具。打开设置 → 艺术选择ComfyUI作为艺术服务商。选择刚保存的工作流使用一条不含敏感信息的提示词发起生成。在 ComfyUI 的Queue队列或History历史中确认任务出现工作流完成并返回图片即表示连接、工作流、聊天模型和可暴露字段配置全部成功。底层生成调用链从请求到图片的完整闭环发起生成后桌面端由ComfyUIProvidercomfyui.ts接管任务其完整流程如下解析模板按request.extra?.template→request.model→ 活动工作流 id 的优先级选择要执行的ComfyUIWorkflowTemplaterequest.extra?.template即上面示例 JSON 中的template字段可对单次请求做模板级覆盖。若找不到模板任务直接以「未配置工作流」失败。处理双向图片/提示词流程检测{{IMAGE}}与{{PROMPT}}占位符。若存在{{IMAGE}}且请求携带了图片如角色卡换装、换材质等图生图场景会先调用POST /upload/image以 multipart 表单上传图片文件名形如vhack_时间戳.png、overwrite: true、60 秒超时并将返回的文件名替换进{{IMAGE}}占位符。注入覆盖字段applyOverrides会深拷贝工作流模板避免污染已保存的模板然后若请求带有提示词且未使用{{PROMPT}}占位符则把提示词自动注入到第一个公开的text字段兼容模式将请求 extra 参数中按节点标题组织的对象合并为对节点的覆盖值按节点_meta.title匹配节点只覆盖exposedFields中公开的字段——这是源码中明确注释的「安全边界security boundary」若公开字段包含seed且请求未显式指定则自动随机化Math.floor(Math.random() * 1e15)。提交任务POST {serverUrl}/prompt请求体为{ prompt: resolvedPrompt }15 秒超时失败时抛出「无法连接到 ComfyUI」错误。轮询结果以 5 秒为间隔轮询GET /history/{prompt_id}单次请求 10 秒超时总超时上限 5 分钟。轮询期间会处理一个已知的竞态条件任务完成但outputs为空时等待 1 秒后重试读取一次 history仍无图片则判定失败并记录原始 History 供排查。取回图片遍历输出节点取第一个nodeOutput.images[0]按/view?filename...subfolder...type...拼出图片 URL 并标记任务成功任务完成后约 10 秒清理回调与结果缓存防止内存泄漏。这一整套「上传 → 覆盖 → 提交 → 轮询 → 取图」的闭环保证了 AIRI 与 ComfyUI 之间不依赖 WebSocket、不依赖共享文件目录仅通过 ComfyUI 的标准 HTTP API 即可完成工作。排查指南官方文档给出的排查路径与源码中的错误处理一一对应测试连接失败时检查 ComfyUI 是否正在运行Server URL、端口与网络访问是否正确浏览器端若报跨域CORS错误按 ComfyUI 设置页显示的 CORS 启动参数重新启动服务。中文界面给出的命令是python main.py --enable-cors-header *源码中设置页面检测到错误信息包含fetch或CORS关键字时会专门展示琥珀色的「检测到 CORS 阻止」提示块并给出上述命令见 comfyui.vue。桌面端因走主进程代理通常不受此限制。工作流无法执行时确认导入的是API 格式 JSON扁平nodeId → node结构而非图形编辑器的nodes/links结构确认工作流所用的节点与模型已在 ComfyUI 中安装——这属于 AIRI 之外的责任范围AIRI 只负责提交任务。ComfyUI Queue 中没有新任务时检查当前聊天服务商与模型是否支持并启用了Tool Calling / Function Calling仅支持文本对话的模型无法触发生成工具需要更换到支持函数调用的模型另外可检查是否设置了活动工作流——未配置任何模板时任务会直接以「未配置工作流」失败界面文案提示「前往设置 → 提供商 → ComfyUI 上传工作流模板」。配置存储与安全边界小结所有 ComfyUI 相关配置comfyuiServerUrl、comfyuiSavedWorkflows、comfyuiActiveWorkflow都持久化在桌面端artistry配置文件的artistryGlobals中见 artistry.ts对应options.json并通过artistrySyncConfig事件同步到渲染进程浏览器端则由 Pinia storeartistry.ts管理并在设置页与角色卡之间共享。三条值得记住的安全与设计边界字段暴露即授权只有你在上传工作流时勾选的字段才会被 AI 智能体覆盖未公开的节点输入不可被注入服务仅限本地/可信网络不要把 ComfyUI 端口暴露到不受信任的公共网络模板深拷贝每次生成都会深拷贝工作流模板请求参数不会污染已保存的工作流。相关文件索引官方配置文档docs/content/zh-Hans/docs/manual/config/providers/artistry/comfyui.md设置页面实现连接测试、工作流上传与字段选择packages/stage-pages/src/pages/settings/providers/artistry/comfyui.vue桌面端 Provider 实现提交、轮询、覆盖注入、图片上传apps/stage-tamagotchi/src/main/services/airi/widgets/providers/comfyui.ts配置 Schema 与默认值apps/stage-tamagotchi/src/main/configs/artistry.tsIPC 事件定义连接测试、配置同步packages/stage-shared/src/artistry.ts中文界面文案含 CORS 启动命令packages/i18n/src/locales/zh-Hans/settings.yaml浏览器端状态存储packages/stage-ui/src/stores/modules/artistry.ts【免费下载链接】airi Self hosted, you-owned Grok Companion, a container of souls of waifu, cyber livings to bring them into our worlds, wishing to achieve Neuro-samas altitude. Capable of realtime voice chat, Minecraft, Factorio playing. Web / macOS / Windows supported.项目地址: https://gitcode.com/GitHub_Trending/ai/airi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考