Load Klein9 RefMods (FLUX.2)
Eight Slots, Three Dials, and a Dropdown That's Empty Until It Isn't
- klein9_refmods
- prompt_hint
This is the selector: eight slots, each one pointing at a .safetensors RefMod in models/refmods-klein9/, each with its own strength and repeat count. Load here, apply downstream.
Why bother with a bundle
Klein handles multiple references natively - that's the capability the community concedes nothing else matches locally, and it's the reason people reach for Klein over a tag-based pipeline in the first place. The stock way to feed it five references is five VAE encodes chained into the conditioning, re-done every run. RefMods move that cost to a one-time encode. This node is what assembles the set: character A in slot 1, the jacket in slot 2, the room in slot 3, each with an independent pull. The README's claim of "full multi-character scaling" is the eight slots.
The inputs
Each of mod_1 through mod_8 is a dropdown over the files in models/refmods-klein9/, plus none. strength_1–strength_8 run 0.0 to 3.0 in 0.05 steps and default to 1.0. copies_1–copies_8 are integers from 1 to 8, default 1.
How you actually set them. Slot 1 and slot 2 at strength 1.0 is the two-character case, and it's the shape most people run. Strength is your pull dial, and the useful advice is the same as it's always been for reference conditioning: parked at 1.0 is correct until you have a reason, and if a subject is being ignored, the answer is usually to lower the competing reference rather than raise the one you want. Above roughly 1.5 with multiple refs you're staging a fight, and the output starts showing you the loser's background.
copies is the one the README describes only as "repeat counts" - the practical read is that it duplicates that entry in the bundle rather than scaling it, so it changes how much room a mod occupies in the sequence rather than how hard it pulls. Treat it as the dial you touch after strength, not before: one extra copy on a character sheet is a cheap experiment, and eight copies of everything is how you blow through your context and get the smear.
prompt_hint is a string output the README doesn't explain, and the wiring diagram doesn't use it. You can wire it into a text node if you want the prompt to name what you loaded, but the documented path is just klein9_refmods → Apply. Ignore it until you want it; the Qwen3 encoder reads full sentences anyway, so naming your subjects in the prompt in plain language is the part that matters.
Outputs: klein9_refmods and prompt_hint.
Install
Shared with the rest of the pack, once:
cd ComfyUI/custom_nodes
git clone https://github.com/malcolmamal/ComfyUI-Flux2Klein9Mod.git
mkdir -p ComfyUI/models/refmods-klein9
Restart ComfyUI. There are no model downloads here - the RefMods are either ones you extracted yourself with the Extract node or ones from the author's published library and browser space, both linked at the top of the README. ComfyUI Manager users can just search Flux2Klein9Mod instead.
The dropdown is empty. Yes, really.
Every mod_N will offer exactly one option - none - until models/refmods-klein9/ actually contains files. The list is built by scanning that folder when the node definition loads, so the fix is: put the .safetensors files in the folder, then refresh the node definitions (and restart if that doesn't take). If you dropped files in and still see only none, check the folder name character by character - refmods-klein9, with the hyphen - and confirm you're looking at the models/ folder belonging to the ComfyUI instance you actually launched, which is a real hazard for anyone with two installs.
Two things that will read as this node's fault but aren't
Wrong strength, right diagnosis. If the generated person looks like a stranger, check the retention setting in the Apply node before you start re-rolling the loader's strengths. The loader says how loud each mod is; retention says how much the whole bundle is allowed to matter. Fighting one with the other is the most common way to waste an afternoon.
Klein's own habits. Anatomy failures are baked into the first one or two sampling steps and a fix-LoRA claws back maybe 20-30% of them; the mitigation is 8 steps at CFG 1.2–1.5, batch, and pick. And Klein edits come back slightly yellow-warm regardless of quantisation. Neither is the loader, though both get asked about here because this is the node you'll be staring at when the image comes out wrong.
Inputs (24)
| Name | Type | Default | Description |
|---|---|---|---|
| mod_1 | COMBO | none | 1 options: none |
| strength_1 | FLOAT | 1.000–3 | — |
| copies_1 | INT | 11–8 | — |
| mod_2opt | COMBO | none | 1 options: none |
| strength_2opt | FLOAT | 1.000–3 | — |
| copies_2opt | INT | 11–8 | — |
| mod_3opt | COMBO | none | 1 options: none |
| strength_3opt | FLOAT | 1.000–3 | — |
| copies_3opt | INT | 11–8 | — |
| mod_4opt | COMBO | none | 1 options: none |
| strength_4opt | FLOAT | 1.000–3 | — |
| copies_4opt | INT | 11–8 | — |
| mod_5opt | COMBO | none | 1 options: none |
| strength_5opt | FLOAT | 1.000–3 | — |
| copies_5opt | INT | 11–8 | — |
| mod_6opt | COMBO | none | 1 options: none |
| strength_6opt | FLOAT | 1.000–3 | — |
| copies_6opt | INT | 11–8 | — |
| mod_7opt | COMBO | none | 1 options: none |
| strength_7opt | FLOAT | 1.000–3 | — |
| copies_7opt | INT | 11–8 | — |
| mod_8opt | COMBO | none | 1 options: none |
| strength_8opt | FLOAT | 1.000–3 | — |
| copies_8opt | INT | 11–8 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| klein9_refmods | KLEIN9_REFMODS | — |
| prompt_hint | STRING | — |