FunPack Apply LoRA Weights
This node doesn't load LoRAs — it decides what they should weigh
- lora_stack
- status
FunPack's smartest idea about LoRAs is that the weights shouldn't be static. FunPack Apply LoRA Weights sits in front of the actual LoRA loader and decides how much each LoRA should matter for this specific prompt - reading the weight suggestions the Refiner saved from your ratings and turning them into a ready-to-load stack. On the first run it uses your base weights. After you've rated a few generations, it can use what the Refiner learned instead.
How it works
You give it the positive_prompt you're about to generate with and a refinement_key (same key as your Refiner). Then you list the LoRAs you want in the running with three facts each:
- lora_N - the LoRA file (from a searchable picker).
- lora_N_type -
general,action,style,quality, orcharacter. This is a hint to the Refiner about what the LoRA is for, not a hard category - the docs say a wrong type won't break loading, it just makes future suggestions less useful. - lora_N_base_weight - the trainer-recommended model weight (default 1).
The mode input (ltx2 / wan) is the stack namespace, and per_block (default off) is the LTX-only extra: with it on, the loader analyzes LoRA block deltas and balances competing block strengths automatically instead of applying a flat weight to each.
First run: base weights, no magic. Later runs: for the same key and the same prompt, the node checks the Refiner's saved suggestions and uses those. It's deterministic - the loading stays predictable because Apply chooses the weights, the Loader just loads them. Outputs are lora_stack (the FUNPACK_LORA_STACK the Loader consumes) and status (human-readable).
The rules that matter
Several behaviors are worth knowing before they surprise you:
- Change the prompt and you can start a fresh prompt record - suggestions are keyed to a specific prompt.
- A saved suggestion is ignored if the LoRA name, type, or saved base weight no longer matches the slot. It won't load a stale weight onto a different LoRA.
0.0weight skips that LoRA for the run.- Negative weights are possible after repeated bad ratings. Yes, really - that's "this LoRA made it worse, dampen it."
- If the key or prompt doesn't match the Refiner's, it falls back to base weights rather than guessing.
Install
It's part of ComfyUI-FunPack:
cd ComfyUI/custom_nodes
git clone https://github.com/olivv-cs/ComfyUI-FunPack
pip install -r requirements.txt
or ComfyUI Manager → search "ComfyUI-FunPack". No extra dependencies.
Where it fits
The documented pattern is exactly three nodes in a row: FunPack Apply LoRA Weights → FunPack LoRA Loader → FunPack Video Refiner V2. Apply picks the weights, Loader applies them, Refiner updates the suggestions after you rate the result. The loop is the whole point: each rating nudges the stack toward what your prompts actually need, and Apply is the part that remembers what the Refiner decided. Without it you have static LoRAs; with it, your LoRA weights become part of the learning loop.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| positive_prompt | STRING | — | |
| refinement_key | STRING | my_style_v1 | — |
| mode | COMBO | ltx2 | 2 options: ltx2, wan |
| per_block | BOOLEAN | false | For LTX-mode stacks, analyze LoRA block deltas and balance competing block strengths automatically. |
| lora_listopt | STRING | [] | LoRAs whose weights this node looks up for the current prompt. |
| refinement_key_inputopt | STRING | Optional linked refinement key, for example from FunPack Refinement Key Loader. Overrides the refinement_key widget when connected. | |
| lora_0opt | COMBO | None | 1 options: None |
| lora_0_typeopt | COMBO | general | 5 options: general, action, style, quality, character |
| lora_0_base_weightopt | FLOAT | 1.00-10–10 | Trainer-recommended model anchor weight. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| lora_stack | FUNPACK_LORA_STACK | — |
| status | STRING | — |