ComfyUI-TypedDecision
Typed decisions (noul / choice / score) with calibrated probabilities, on ComfyUI's text-encoder engine. Currently imajev.
ComfyUI-TypedDecision
Custom nodes for Jev-style typed decisions: a multimodal LLM does not write text, it only makes a decision. You ask one typed question about images and text, and get the answer with calibrated probabilities:
- noul: true or false
- choice: one of your options
- score: a position on your ordered levels
Several local alternatives to Jev exist. ComfyUI already has its own multimodal LLM inference engine, so this pack reuses it and starts with imajev.
More details on the blog: 日本語 · English · 中文
Installation
Search for ComfyUI-TypedDecision in ComfyUI Manager and install it.
Models
- text_encoders
- qwen3.5_4b_int8_convrot.safetensors (5.76 GB)
- or the original qwen3.5_4b_bf16.safetensors (9.32 GB)
- typed_decision
- mohit67890/imajev-4b (490 MB for the files below)
- Put these files in an
imajev-4bfolder. Downloading the whole repository also works.
- Put these files in an
- mohit67890/imajev-4b (490 MB for the files below)
📂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
Nodes
Load Typed Decision Model: pick Qwen3.5 as backbone and imajev-4b as adapter.
Typed Decision: answers one question. Write questions and options in English.
mode:noul,choiceorscoreinstructions/criteria: the question, and the options or levels, one per line. noul takes optionalcriteria_true/criteria_falsefor when to answer yes or no.images: up to 2 images. With two, the first is the reference and the second is the one to judge.state: optional facts to judge against, as text or JSONdebias: average over several option orders (slower)
| Output | Meaning |
| --- | --- |
| value | noul: probability of true<br>choice: probability of the chosen option<br>score: expected level (0 = first line) |
| label | The answer. Not affected by threshold. |
| index | noul: yes = 1<br>choice, score: line number of the answer, from 0 |
| pass | value >= threshold and the model did not abstain |
| abstained | The images and state were not enough to answer |
| result | Full answer as JSON |
Sample workflows
- noul: are many people in the image?
- choice: what is the main subject?
- score: how usable is the photo for training?
- two images: do two images show the same person?
- dataset sort: save photos with and without people under different names
- resolution from prompt: pick the aspect ratio from the prompt, then generate with Krea 2