尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

ComfyUI 节点开发五步上手:从零写出并发布你的第一个自定义节点插件

ComfyUI 节点开发五步上手:从零写出并发布你的第一个自定义节点插件 ComfyUI 节点开发五步上手从零写出并发布你的第一个自定义节点插件【免费下载链接】ComfyUIThe most powerful and modular diffusion model GUI, api and backend with a graph/nodes interface.项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUIComfyUI 是目前最流行的开源扩散模型 GUI 与节点式 AI 工作流平台而 ComfyUI 节点开发也就是 ComfyUI 插件开发是扩展它最直接的方式几十行 Python 代码就能把你自己的 AI 能力变成画布上一个可连接的节点。这是一篇 ComfyUI 自定义节点教程全程按亲手搭一个节点的任务推进先拿到模板再一步步把节点写出来、调好参数、加上缓存最后发布成插件。不用任何营销话术只讲你真能跑起来的东西。第 1 步拿到一个能跑的 ComfyUI 节点模板开发 ComfyUI 自定义节点第一步不是写代码而是看官方给的模板。克隆仓库后custom_nodes/ 目录下就有一个现成的样例文件example_node.py.example把它复制一份、去掉.example后缀改名就是你插件的起点。一个现代写法节点文件只需要两样东西节点类和入口函数。模板的骨架长这样from comfy_api.latest import ComfyExtension, io async def comfy_entrypoint() - MyExtension: return MyExtension() # ComfyUI 启动时会调用它来加载你的节点comfy_entrypoint()是插件的入口ComfyUI 启动时扫描custom_nodes/目录找到这个函数就把你声明的节点注册进系统。后面所有步骤都是往这个骨架里填肉。第 2 步用 Schema 定义你的第一个 ComfyUI 节点节点的核心是define_schema——一份自我介绍我叫什么、放在哪个菜单、吃什么、吐什么。我们不用官方的图像反色例子换一个更实用的场景把 4 张图拼成 2x2 网格工作流里批量对比效果时经常用到。class StitchGrid(io.ComfyNode): classmethod def define_schema(cls) - io.Schema: return io.Schema( node_idStitchGrid, display_name图片九宫格拼接, categoryimage/composite, inputs[io.Image.Input(image)], outputs[io.Image.Output()], ) classmethod def execute(cls, image) - io.NodeOutput: b, h, w, c image.shape grid image.view(2, 2, h, w, c).permute(0, 2, 1, 3, 4).reshape(2*h, 2*w, c) return io.NodeOutput(grid)三个关键点记住就不容易踩坑node_id和display_name是两回事前者写进工作流 JSON、决定节点身份后者才是画布上显示的名字。category决定菜单位置image/composite意味着它出现在图像处理 → 合成菜单下。execute的返回值用io.NodeOutput包一层参数顺序和inputs声明顺序一致。逻辑其实就一行把[4, H, W, C]的批次张量重排成 2x2 的大图。ComfyUI 里几乎所有图像节点都是这个套路——吃张量、处理张量、吐张量。第 3 步给节点配置输入参数滑条、下拉框与默认值裸节点只有一个图输入用起来像半成品。ComfyUI 的类型系统支持给每个参数加修饰让前端自动生成对应的控件io.Float.Input(radius, default2.0, min0.0, max50.0, step0.5, display_modeio.NumberDisplay.slider), # 前端渲染成滑条 io.Combo.Input(mode, options[高斯, 均值], default高斯), # 渲染成下拉框 io.String.Input(prompt, multilineTrue, default), # 渲染成多行文本框min/max/step控制取值范围display_mode决定显示成数字输入框还是滑条default决定用户不改参数时的行为。默认值要给大多数人都能用的值这是新手最容易偷懒的地方——一个 0 或 1 的默认值往往让用户第一次用就以为节点坏了。常用输入类型按使用频率排Image、Latent、Model这类工作流数据流Int/Float/String/Bool这类标量参数以及Combo下拉框。comfy_extras/ 目录下的官方节点音频、视频、超分等上百个都是活的参考书遇到不会定义的参数先进去搜一个同类节点抄作业。第 4 步如何给节点加懒加载与指纹缓存提速工作流一复杂节点明明没变却每次都重跑就成了性能问题。ComfyUI 给了两个可选钩子按需启用即可。懒加载某些输入只在特定条件下才需要真正求值用check_lazy_status告诉系统哪些输入该算、哪些该跳过classmethod def check_lazy_status(cls, image, enable_debug, debug_text): if enable_debug on: return [debug_text] # 只有开启调试时才去读取这段长文本 return []指纹缓存系统默认任何输入变化就重跑但你可以用fingerprint_inputs定义自己的重跑条件——返回值和上次相同节点就直接复用缓存结果classmethod def fingerprint_inputs(cls, image, threshold): return f{image.shape}_{threshold}核心仓库的 LoadImage 节点就是这么干的返回图片哈希图没换就绝不重读磁盘。这两个钩子不写完全能跑写了能让长工作流快一个档次。第 5 步发布插件并扩展成完整能力节点写完只是开始。把多个节点装进一个插件靠的还是第 1 步的ComfyExtensionclass MyExtension(ComfyExtension): override async def get_node_list(self): return [StitchGrid, Watermark, BatchRename] # 一个插件可装任意多个节点插件还可以顺手做两件进阶的事挂 API 路由用 aiohttp 的 router 注册/xxx接口前端扩展就能和后端对话调外部 AI 服务参考 comfy_api_nodes/ 目录它内置了 Gemini、OpenAI、Kling 等几十家服务的集成框架execute写成async就能发起非阻塞的网络请求——这也是 ComfyUI 工作流扩展中最常见的接入外部模型路径。最后看一张节点真正跑起来的效果一个节点的输出最终会变成画布上这样可预览的作品小结回顾这条 ComfyUI 开发入门路径五步其实对应五件小事复制 custom_nodes/ 里的模板认识comfy_entrypoint入口用io.Schema声明输入输出写execute逻辑用min/max/Combo/default把参数面板做漂亮需要时用check_lazy_status和fingerprint_inputs提速用ComfyExtension打包发布想接外部服务就看 comfy_api_nodes/ 的现成框架。每个环节都有官方代码可抄comfy_extras/抄内部实现comfy_api_nodes/抄 API 集成。剩下的事只有一件——把你的第一个节点拖进画布连线点运行。【免费下载链接】ComfyUIThe most powerful and modular diffusion model GUI, api and backend with a graph/nodes interface.项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表