跳到主要内容

你的插件在用户眼里长什么样

装了你插件的人在「设置 → 第三方插件 → 你」里读到的每一个字,几乎都直接来自 manifest.json 与你目录里那份 README——没有一处是宿主替你编的。所以清单里那些看着像注释的字段,实际上是面向用户的文案

详情页骨架固定(概览 / 环境检测 / 调用测试 / 各家供应商 / 诊断与日志),内核管形状,你管内容

概览:一条能力一张卡

  • 能力的 label 是大标题(写人话),id 是旁边的等宽小字——两者都显示,别把 label 写成 id 的样子。
  • 每个 inputs[] 渲染成参数表一行,description 整段显示在最右列。判据:能不能让一个没读过你源码的人填对这一格——说清取值域(「16:9 / 9:16 / 1:1;留空按 1:1」)、说清边界(「不是每家都吃参考图,吃不下会在日志里说一声」)。
  • output.formats 要写真实会产出的格式——声明 png 却吐 jpeg,按声明写的消费者换一家就炸。
  • 供应商行的 label 按「短名(它到底是什么)」写,括号会被拆开用:"ComfyUI(本机自建)" → 名字 + 右侧说明。
  • traits 只声明为真的那些(false 等于没写,不会显示成「不支持」)。

README:目录里那份就是说明书

详情页「作者写的说明」展开就是你的 README.md 原文(fork 别人项目时可另写 README.channek.md,优先读它)。渲染限制:表格能渲染;链接不可点、图片不渲染——别把关键信息只画在图里。

推荐骨架(按来这一页的人依次要问什么排):

# <显示名> · `<插件 id>`
一句话:它是什么、给谁用。

## 它提供什么 能力表:收什么 / 出什么 / 几家能供
## 谁在供,各自在调什么 一家一行:跑在哪 · 什么时候选它
## 要你准备什么 前置 / 密钥 / 设置
## 用它时要知道的 坑、边界、契约(照实说)
## 开发 目录、打包(给贡献者的,放最后)

调用测试:让人一键试你的能力

声明了能力就有「调用测试」栏:按你的 inputs 生成表单,真跑一次,产物摆出来。给 sample / sampleFile 一个样例值,用户才有那颗「用样例」按钮——同一份样例还会喂进命令行速查里那行可照抄的 channek invoke 示例。

按下去要付什么代价,由 traits 推出来写在按钮上——两个互不相干的轴分别声明:

声明回答
跑在哪儿traits.runsLocally算力在谁那儿
出不出门traits.needsNetwork要不要联网、会不会花钱

起本机脚本去调收费云服务的候选,第一个轴是 true、第二个轴也是 true——只写前者,它会顶着「不联网、无费用」的假绿灯。不声明的代价:宿主宁可写「插件没声明,代价无从判断」也不替你编一个「免费」,而用户看到这句多半就不按了。

禁止做的事

  • ❌ 把 description / label 当注释写(它们一字不差显示给用户)
  • formats 声明得比实际产出的窄
  • ❌ 为了凑「多家可选」硬造第二家 provider——一条能力一家是正常形态
  • ❌ 起本机脚本调收费服务却只写 runsLocally: true
  • ❌ 把试跑产物写进频道目录(它会被诚实灯轨扫成真工件)