尧图精选

非程序员也能上手:用 Trae 开发 ComfyUI 自定义插件与节点,并配 TaoToken 统一 Key 通道

🕒 发布时间:2026/9/25 14:42:09 📁 来源:尧图网络
1. 非程序员做 ComfyUI 插件卡在哪一步ComfyUI 的自定义插件与节点本质就是往custom_nodes目录里放一个 Python 包里面用类声明节点、用字典声明输入输出。听起来像程序员的事但真正动手时你会发现难点不在语法而在三件事不知道目录该长什么样、不知道节点类要写哪些字段、不知道插件里要调 AI 能力时 Key 从哪来。前两件靠 Trae 这类 AI 编辑器可以边问边生成第三件如果每个插件都自己写一份 Key 读取逻辑很快就会变成一堆散落的明文密钥。这篇面向零编程基础的用户把路径拆成可跟做的动作用 Trae 打开本地文件夹、生成插件骨架、把节点注册进 ComfyUI、再用 TaoToken 做统一 Key/API 通道让插件不直接持有密钥而是走一个固定的接口地址和统一 Key。全程你只需要复制配置、改几个字段、跑一次验证请求。适合想给自己工作流加节点、又不想系统学 Python 的 ComfyUI 用户也适合已经在用 Trae 写小工具、想把 AI 调用收口到一处的人。我试过把 Key 写死在节点文件里换一次 Key 要翻遍所有插件后来改成统一通道才省心。下面按“先跑通再优化”的顺序来每一步都有可复制的文件和验证动作。2. 前置准备Trae 打开项目与 TaoToken 统一 Key 通道2.1 用 Trae 打开 ComfyUI 的 custom_nodes 目录Trae 支持导入本地文件夹。打开 Trae 后点左侧面板中央的“打开文件夹”或左上角“选择项目 打开文件夹”选中你的 ComfyUI 根目录下的custom_nodes文件夹。这样 Trae 的对话和文件树都围绕插件目录展开生成的代码能直接落到正确位置。如果你还没装 ComfyUI先把它跑起来确认能进到默认工作流界面再回来做插件。插件目录通常长这样ComfyUI/ ├─ custom_nodes/ │ └─ my_first_node/ - 你要新建的插件包 │ ├─ __init__.py │ ├─ nodes.py │ └─ config.toml ├─ models/ └─ main.py2.2 为什么用 TaoToken 做统一 Key 通道插件里要调 AI 能力比如让节点做图像描述、文本改写、轮廓提示词生成直接写 Key 有三个问题明文散落、换 Key 要改多处、不同插件各写一套请求逻辑。TaoToken 提供统一的 API 地址和 Key 管理插件只认一个base_url和一个api_key换 Key 只改一处配置。官网入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentAPI 地址不带 UTMhttps://taotoken.net/api你需要先去控制台创建 Key再把它写进插件的config.toml。控制台和 Key 管理页控制台https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewriteAPI Keyshttps://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite注意Key 只放在本地config.toml不要提交到 Git也不要在节点代码里硬编码。后面会给一个.gitignore建议。3. 可复制配置config.toml 与 settings.json 骨架3.1 插件目录结构示例在custom_nodes下新建文件夹my_first_node最终结构my_first_node/ ├─ __init__.py # 导出节点映射 ├─ nodes.py # 节点类定义 ├─ config.toml # TaoToken 统一通道配置 └─ settings.json # 节点默认参数3.2 config.toml统一 Key 通道# custom_nodes/my_first_node/config.toml [taotoken] base_url https://taotoken.net/api api_key sk-你的TaoTokenKey model gpt-4o-mini timeout 30 [node_defaults] max_tokens 512 temperature 0.7base_url固定为https://taotoken.net/api插件里所有 AI 调用都拼这个前缀。api_key从 TaoToken 控制台复制。model按你实际可用的模型填验证阶段先用一个便宜的小模型跑通链路。3.3 settings.json节点默认参数{ my_first_node: { enabled: true, prompt_prefix: 描述这张图的轮廓特征, max_tokens: 512, temperature: 0.7 } }3.4init.py把节点注册进 ComfyUI# custom_nodes/my_first_node/__init__.py from .nodes import MyFirstNode NODE_CLASS_MAPPINGS { MyFirstNode: MyFirstNode, } NODE_DISPLAY_NAME_MAPPINGS { MyFirstNode: 我的第一个节点, } __all__ [NODE_CLASS_MAPPINGS, NODE_DISPLAY_NAME_MAPPINGS]ComfyUI 启动时会扫描custom_nodes下每个包的__init__.py读取NODE_CLASS_MAPPINGS完成注册。名字对不上节点就不会出现在右键菜单里。3.5 nodes.py节点类与 TaoToken 调用# custom_nodes/my_first_node/nodes.py import os import json import tomllib import requests PLUGIN_DIR os.path.dirname(os.path.abspath(__file__)) def load_config(): with open(os.path.join(PLUGIN_DIR, config.toml), rb) as f: return tomllib.load(f) def load_settings(): with open(os.path.join(PLUGIN_DIR, settings.json), r, encodingutf-8) as f: return json.load(f) class MyFirstNode: classmethod def INPUT_TYPES(cls): return { required: { text: (STRING, {multiline: True}), }, } RETURN_TYPES (STRING,) RETURN_NAMES (result,) FUNCTION run CATEGORY MyNodes def run(self, text): cfg load_config()[taotoken] settings load_settings()[my_first_node] prompt settings[prompt_prefix] text resp requests.post( f{cfg[base_url]}/v1/chat/completions, headers{ Authorization: fBearer {cfg[api_key]}, Content-Type: application/json, }, json{ model: cfg[model], messages: [{role: user, content: prompt}], max_tokens: settings[max_tokens], temperature: settings[temperature], }, timeoutcfg[timeout], ) resp.raise_for_status() data resp.json() return (data[choices][0][message][content],)INPUT_TYPES声明输入RETURN_TYPES声明输出FUNCTION指向执行方法CATEGORY决定右键菜单里的分组。请求部分只依赖base_url和api_key换 Key 只改config.toml。3.6 用 Trae 生成与迭代的指令写法在 Trae 里不要只说“帮我写个节点”要给它上下文。可以这样提我在 ComfyUI 的 custom_nodes/my_first_node 下开发插件。 已有 __init__.py 导出 NODE_CLASS_MAPPINGS。 请帮我写 nodes.py要求 1. 节点类名 MyFirstNodeCATEGORY 为 MyNodes 2. 输入一个 STRING 文本输出一个 STRING 3. 调用 https://taotoken.net/api 的 chat/completions 4. base_url 和 api_key 从同目录 config.toml 读取 5. 不要硬编码 Key。生成后先看它有没有把 Key 写死有就让它改成读config.toml。迭代时把报错原文贴回去比描述“报错了”有效得多。4. 验证请求节点加载与 Key 通道生效4.1 先单独验证 TaoToken 通道在写节点之前先用一条命令确认 Key 和地址可用。把sk-你的TaoTokenKey换成真实 Keycurl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer sk-你的TaoTokenKey \ -H Content-Type: application/json \ -d { model: gpt-4o-mini, messages: [{role: user, content: 只回复通道正常}], max_tokens: 16 }返回里能看到choices[0].message.content就说明通道通了。这一步不通后面节点一定不通先解决这里。4.2 重启 ComfyUI 并确认节点加载保存文件后重启 ComfyUI。启动日志里会打印扫描到的自定义节点。如果看到类似MyFirstNode或你的显示名说明注册成功。然后在工作流画布空白处右键找到MyNodes分类应该能看到“我的第一个节点”。4.3 在画布上跑一次把节点拖进画布在text输入框里填一句话接一个能显示文本的节点点运行。如果输出框里出现模型返回的内容说明节点加载和 Key 通道都生效了。这一步同时验证了三件事目录结构对、注册映射对、TaoToken 调用对。4.4 用模型对话页做交叉验证如果节点输出为空但 curl 正常可以去模型对话页手动发一条同样的提示词确认模型本身可用模型对话https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite对话页能出结果、节点不出问题就在节点代码或配置读取不在通道。5. 本篇常见错排查5.1 节点不出现在右键菜单先看 ComfyUI 启动日志有没有报错。常见原因是__init__.py里NODE_CLASS_MAPPINGS拼写错误或nodes.py导入失败。把 Trae 切到文件树确认__init__.py和nodes.py在同一层。改完必须重启 ComfyUI热重载不一定生效。5.2 config.toml 读取报错tomllib是 Python 3.11 起内置的。如果你的环境低于 3.11会报ModuleNotFoundError。两个办法升级 Python或在 Trae 里让它改成用tomli并pip install tomli。另外确认config.toml和nodes.py同目录路径用的是__file__相对定位。5.3 401 或 403Key 错了、过期了或复制时带了空格。去 API Keys 页面重新复制一个粘贴进config.toml后重启。注意Authorization头是Bearer加 Key中间一个空格别漏。5.4 404 或地址拼错base_url是https://taotoken.net/api请求路径拼/v1/chat/completions。如果你在base_url末尾多写了/v1就会变成/v1/v1/...。检查config.toml里base_url不要带/v1。5.5 超时或连接失败先确认本机网络能访问https://taotoken.net/api。timeout设 30 秒一般够用模型响应慢可以调到 60。如果 curl 能通、节点超时多半是节点里请求头或 JSON 体拼错把 Trae 生成的请求段和上面nodes.py对照一遍。5.6 改了代码没变化ComfyUI 对custom_nodes的改动通常要重启进程。养成“改完重启、看日志”的习惯。另外确认你改的是正在运行的那个 ComfyUI 目录下的插件别改到了另一个副本。6. 把 Key 通道收口继续扩展节点跑通第一个节点后扩展就简单了复制my_first_node成新插件目录改__init__.py里的映射名和nodes.py里的类名config.toml可以共用同一份 Key 配置也可以每个插件各放一份但指向同一个 TaoToken Key。这样新增节点不用再碰密钥逻辑。如果你要长期写多个插件、甚至让 Trae 帮你批量生成节点建议把调用逻辑抽成一个公共模块各节点只传 prompt。Coding Plan 适合这种持续编码场景Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite接入细节和参数说明看文档接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite最后给一个.gitignore建议放在插件目录或仓库根目录避免 Key 进版本库config.toml __pycache__/ *.pyc把config.toml排除后可以再放一个config.example.toml作为模板里面api_key留空别人拿到你的插件时照着填即可。这样你的 ComfyUI 自定义节点既能跑又不会因为一个 Key 泄露而牵连所有插件。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →