ComfyUI-TypedDecision
以 Jev 为开端,只做判断的 MLLM 正在流行起来。它不写文章,你问「这张图里有人吗」,它就回答 yes / no,并附上有多确定。这类任务被称为 typed decision。
Jev 的本地替代项目有好几个,其中 imajev 与 ComfyUI 的核心系统非常契合,所以我先把它做成了自定义节点。
那就来看看 typed decision 能做什么,在 ComfyUI 里又能怎么玩吧。
安装
nomadoor/ComfyUI-TypedDecision
- 在
ComfyUI Manager中搜索TypedDecision安装即可。
模型的下载
- text_encoders
- qwen3.5_4b_int8_convrot.safetensors (5.76 GB)
- 或者原版的 qwen3.5_4b_bf16.safetensors (9.32 GB)
- typed_decision
- mohit67890/imajev-4b (以下文件共 490 MB)
- 把以下文件放进
imajev-4b文件夹。下载整个仓库也可以
- 把以下文件放进
- mohit67890/imajev-4b (以下文件共 490 MB)
📂ComfyUI/
└── 📂models/
├── 📂text_encoders/
│ └── qwen3.5_4b_int8_convrot.safetensors
└── 📂typed_decision/
└── 📂imajev-4b/
├── adapter_config.json
├── adapter_model.safetensors
├── calibration-rot4-modality.json
├── decision_readout.json
└── decision_readout.safetensors
三种 mode
提问的形式有三种。选哪一种,输入栏和答案的类型都会随之改变。
三种 mode 的输出接口是共用的,但其含义会随 mode 而变。
noul (Yes or No)
对问题回答 true 或 false。

输入
instructions里写要判断的陈述,或者能用 yes / no 回答的问题criteria_true/criteria_false是可选的。可以补充说明什么情况算 yes、什么情况算 no
输出
value是 true 的概率- 无法判断的部分会平分给 true 和 false,所以拿不准时会落在 0.5 附近
label是yes/nopass以Boolean输出value >= threshold且没有弃权的结果
这里让它判断「图中有很多人」这个陈述是 true 还是 false。
不过多少人才算「很多」是模糊的。所以补上了「5 人以上为 yes」「4 人以下为 no」这样的标准。
choice
从准备好的选项中选一个。

输入
criteria里每行写一个选项- 只有选项名说不清楚时,可以像
landscape: scenery with no clear main subject这样用:补充说明
- 只有选项名说不清楚时,可以像
输出
label是被选中的选项index是第几行- 被选中的是第 3 行时,从 0 开始数,
index就是 2
- 被选中的是第 3 行时,从 0 开始数,
score
用自己定义的评价轴做 N 级评分。

输入
criteria里每行写一个等级,从低到高
输出
value是期望值- 第 1 行算作
0,所以 5 级的范围就是0.0〜4.0
- 第 1 行算作
这里让它用 5 级来评价一张照片是否适合作为训练数据。
value 是按各等级的概率加权的平均值,所以会得到 3.4 这样介于等级之间的值。也就是「在 good 和 excellent 之间,偏 good」这样的评价。
图像可以放两张
imajev 最多可以放两张图像。 第一张是参考,第二张是判断对象。
受 ComfyUI 的机制影响,第三个及之后的接口也会出现。但 imajev 只接受两张,连上去会报错。

问「第一张和第二张是同一个人吗?」,就能当作同一人判定来用。
用 state 传递上下文
如果说 instructions 是「问题」,那 state 就是 回答这个问题所需的上下文。看图像也无从得知的信息,用文本传进来。
比如想判断「照片里的商品颜色是否和商品信息一致」时,问题本身并没有说正确的颜色是什么。
把商品信息写进 state,它就能拿来对照了。
state:The listing says: red suede boat shoes.instructions:The shoes in the photo match the color in the listing.
state也可以写成 JSON。这时可以从instructions用listing.color这样的字段名来指代。
实践
从提示词决定分辨率
上面都输入了图像,不过只用文本输入也是可以的。
让它读提示词,判断生成竖版、横版还是正方形比较合适。

把三种分辨率准备成 List,用 choice 的 index 输出来切换。
- 把提示词输入到
state - 让
choice从portrait/landscape/square中选择index是INT,所以对应关系是 portrait = 0、landscape = 1、square = 2
- 把
index传给Get Item From List,从宽和高的列表里取值 - 把取到的值分别放进
Empty Latent Image生成
这条提示词选中了 square,生成的图像确实是 1024 × 1024。

数据集分拣
typed decision 最大的好处就是快。
利用这一点,把大量图像分拣开来,是个很不错的用法。

把文件夹里的图像,按是否符合条件分拣开。
- 用
Load Image (from Folder)把文件夹作为 List 读入 - 用
noul判断「有没有人」 - 把
pass传给If/Else Switch,切换保存路径- ComfyUI 的 output 文件夹中的
typed_decision下,应该会生成accepted和rejected两个文件夹
- ComfyUI 的 output 文件夹中的
试着读入一个装了 2 张人物、3 张其他内容的文件夹。



有人的图像保存到了 accepted,没有人的保存到了 rejected。
用
abstained输出,还可以把「无法判断的部分」单独分出来。可以用来缩小需要人工查看的范围。




