Load Typed Decision Model
It loads a language model that only ever answers questions
- typed_decision_model
A text encoder is normally the boring box in a workflow: you pick the file once and never think about it again. In this pack it is the model. Load Typed Decision Model points ComfyUI's own text-encoder engine at a small Qwen3.5 build, hangs a trained adapter on it, and hands you a TYPED_DECISION_MODEL socket that the Typed Decision node turns into an answer with a probability attached.
That's the entire job: two dropdowns, one output, no inference. It runs when the graph executes, and then the other node does the actual thinking.
What it loads, and from where
Two pieces, from two folders:
models/text_encoders- the backbone, e.g.qwen3.5_4b_int8_convrot.safetensors(5.76 GB) or the original Comfy-Orgqwen3.5_4b_bf16.safetensors(9.32 GB).models/typed_decision/imajev-4b/- the decision adapter:adapter_config.json,adapter_model.safetensors,calibration-rot4-modality.json,decision_readout.json,decision_readout.safetensors.
How it works under the hood
The pack ships no inference code of its own, and that's the design decision worth understanding. Reading the source, execute() calls ComfyUI's normal CLIP loader on the backbone, refuses to continue unless what came back is a Qwen3.5 text-encoder model with the hidden size the readout matrix expects, merges the adapter's PEFT LoRA using Core's own LoRA loader, and asks for the hidden state after the last block. pyproject.toml has an empty dependency list for a reason: there is nothing to pip install.
The upside isn't elegance, it's memory. Your existing VRAM management, offload and quantization behaviour apply here as they do to any other encoder - which matters, because this is one more model on the card next to your diffusion model. It's the same lesson the KB draws about LLM text encoders: the encoder is a separately sized, separately quantizable component, and Qwen3-4B-class files like this are standard-issue on Z-Image and Flux 2 Klein 4B. Budget for it.
The adapter itself adds little: a trained matrix that scores each possible answer code from one hidden vector. The asking happens in the other node.
The two inputs and the one output
backbone is a combo over everything in models/text_encoders. adapter is a combo over folders in models/typed_decision. The output is typed_decision_model, which wires into Typed Decision's model input.
The mistake people will actually make here: the backbone dropdown lists every text encoder you own - T5s, CLIP-Ls, whatever your Qwen-Image install left behind. Pick the wrong one and you don't get silence, you get This adapter needs the Qwen3.5 backbone it was trained on (hidden size X). The readout matrix has exactly one shape; the error is the pack telling you so. For imajev-4b that backbone is the Qwen3.5-4B file, and nothing else. Note also that both dropdowns are baked when the node schema is built, so a file dropped in mid-session needs a refresh or a restart before it appears. This is an imajev-shaped loader - the pack's own words are "currently imajev" - not a generic one for any future decision model.
Install
ComfyUI Manager, search ComfyUI-TypedDecision, install, restart. Manual is the same two lines and no pip step:
cd ComfyUI/custom_nodes
git clone https://github.com/nomadoor/ComfyUI-TypedDecision
One hard requirement: ComfyUI 0.37.0 or newer. The pack is V3 schema (comfy_api.latest), so on an older build the nodes don't register and you go hunting for a broken install that isn't broken.
Then the model files. The layout the pack documents:
📂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
cd ComfyUI/models
hf download nomadoor/Qwen3.5 text_encoders/qwen3.5_4b_int8_convrot.safetensors --local-dir .
hf download mohit67890/imajev-4b --local-dir typed_decision/imajev-4b
int8 or bf16? Take the int8 build unless you have VRAM to burn. The repo's notes put the quantized backbone within 0.07 of the original torch path in the worst case - one borderline abstention - and under 0.01 elsewhere. Tighter than the usual community argument about encoder quantization, because what's at risk here is a probability moving a few points, not a picture.
Where people get burned
The nested folder. You download the imajev repo into models/typed_decision/imajev-4b, the repo already contains an imajev-4b directory, and you land at models/typed_decision/imajev-4b/imajev-4b/. The combo finds the outer folder, the marker file decision_readout.json isn't in it, and the node looks empty. Move the files up one level - or accept unsupported typed decision model format from a folder that is listed, which means a file is missing rather than wrong.
Fresh-pack caution. This is version 0.1.1 with a single release commit, and the reddit corpus has no threads about it at all - searching "imajev" and "typed decision" returns nothing. The author isn't a stranger (nomadoor posts Wan 2.1 VACE workflows and ships ComfyUI-Panorama-Stickers, around 190 corpus mentions) and the source is there to read, which is more than most LLM-node packs manage in the one category that has already shipped credential-stealing malware once. Readable repo, no network calls to trust - but you're early, and the README's blog links are the only documentation there is.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| backbone | COMBO | The LLM in models/text_encoders: Qwen3.5 for imajev-4b, a d3_*.safetensors file from nomadoor/d3 for d3, a clef_*.safetensors file from nomadoor/clef for clef. | |
| adapter | COMBO | imajev: the model folder in models/typed_decision, e.g. imajev-4b (the Hugging Face repository as downloaded). d3 / clef: pick d3 or clef; the backbone file carries the rest. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| typed_decision_model | TYPED_DECISION_MODEL | — |