Flow - Lora Loader
The Flow LoRA loader that tracks hashes and triggers
- model
- clip
- gen_info
- model
- clip
- gen_info
Stock LoraLoader applies a LoRA and forgets it. FlowLoraLoader applies a LoRA and documents it: it records which LoRA went in and its hash into the pack's gen_info dict, so FlowSaveImage can write a proper CivitAI hash entry into your PNG metadata. That's the small difference that makes uploaded images resolve their LoRAs on CivitAI instead of showing an empty Hashes list.
It's the full model+clip LoRA loader from ComfyUI-Flow-Control - the one that patches both the model and the CLIP, unlike the model-only sibling. And it's a slightly nicer stock loader on its own: bypass toggle, a base filter on the LoRA list, and trigger-word/hash/URL fields the frontend auto-fills when it can identify the file.
How it works
Core behavior is the same as stock LoraLoader: load the LoRA file, patch model and clip with strength_model and strength_clip. The pack layers on:
bypass=Yesshort-circuits and returns model/clip untouched - cleaner than a bypass route when you're A/B testing.strength_model == 0 && strength_clip == 0also skips the load.- It writes the LoRA (name without extension → hash prefix) into
gen_info["loras"], so the hash travels down the pipe to the save node. - The frontend fetches LoRA info (base, triggers, url) from CivitAI by hash via the pack's API route and fills the
base,triggers,urlfields. Thefilterdropdown (All / Pony / SDXL / SD15) narrowslora_name.
Unlike FlowLoraLoaderModelOnly, this one doesn't do the base-mismatch skip-check - it assumes you picked the right LoRA and just applies it.
The inputs that matter
model,clip- from a Flow loader (checkpoint or Flux preset).lora_name- filtered byfilter.strength_model,strength_clip- the two dials. Default 1.0 each; SDXL-family LoRAs often sit at 0.5–0.8, Flux LoRAs are usually fine at 1.0.bypass- the on/off switch for testing.gen_info- required, and the whole reason to use this over stock.
Outputs: model, clip, gen_info (with the lora hash added). Feed all three forward to FlowKSampler and FlowSaveImage.
Install
Ships in ComfyUI-Flow-Control, one install:
cd ComfyUI/custom_nodes
git clone https://github.com/krich-cto/ComfyUI-Flow-Control
Restart ComfyUI, or Manager → "ComfyUI-Flow-Control". No model downloads; requests is needed for the CivitAI lookups and gguf is imported at startup.
Gotchas
If gen_info isn't a dict from the Flow pipe, the loader prints "Invalid generate information type" and returns model/clip unpatched - the LoRA silently won't apply. The hash it records comes from the hash field, which the frontend fills from CivitAI; if the lookup misses, the field is empty and your metadata shows a blank lora hash even though the LoRA loaded fine. And because it patches both model and clip, using it on a model-only chain (like some Flux setups) applies CLIP strength against a clip that isn't there - for those, FlowLoraLoaderModelOnly is the safer call.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| gen_info | GENINFO | — | |
| bypass | COMBO | No | 2 options: Yes, No |
| filter | COMBO | All | 4 options: All, Pony, SDXL, SD15 |
| lora_name | COMBO | 0 options: | |
| strength_model | FLOAT | 1.00-100–100 | — |
| strength_clip | FLOAT | 1.00-100–100 | — |
| base | COMBO | 4 options: , Pony, SDXL, SD15 | |
| hash | STRING | — | |
| triggers | STRING | — | |
| url | STRING | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| clip | CLIP | — |
| gen_info | GENINFO | — |