Nodes/ComfyUI-Flow-Control/Flow - Lora Loader
ComfyUI Node

Flow - Lora Loader

The Flow LoRA loader that tracks hashes and triggers

By krich-cto·Created 2 years ago·Updated 2 years ago· 1
Flow - Lora Loader
  • model
  • clip
  • gen_info
  • model
  • clip
  • gen_info
bypassNo
filterAll
lora_name
strength_model1.00
strength_clip1.00
base
hash
triggers
url

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 = Yes short-circuits and returns model/clip untouched - cleaner than a bypass route when you're A/B testing.
  • strength_model == 0 && strength_clip == 0 also 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, url fields. The filter dropdown (All / Pony / SDXL / SD15) narrows lora_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 by filter.
  • 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.

CategoryFlow/inputs

Inputs (12)

NameTypeDefaultDescription
modelMODEL
clipCLIP
gen_infoGENINFO
bypassCOMBONo2 options: Yes, No
filterCOMBOAll4 options: All, Pony, SDXL, SD15
lora_nameCOMBO0 options:
strength_modelFLOAT1.00-100–100
strength_clipFLOAT1.00-100–100
baseCOMBO4 options: , Pony, SDXL, SD15
hashSTRING
triggersSTRING
urlSTRING

Outputs (3)

NameTypeDescription
modelMODEL
clipCLIP
gen_infoGENINFO