Nodes/SAX Bridge/SAX CLIP Lora Loader
ComfyUI Node

SAX CLIP Lora Loader

One LoRA slider isn't enough — SAX CLIP Lora Loader splits the text encoder loose

By so16tm·Created 8 months ago·Updated 3 days ago· 2
SAX CLIP Lora Loader
  • pipe
  • clip
  • PIPE
  • CLIP
◄lora_name▾►
◄strength_clip1.00►

The problem it solves is one slider pretending to be two

Every LoRA has two halves. One set of weights patches the diffusion model's attention layers; another patches the text encoder - the CLIP side - so the trigger word actually lands. Most loaders, including SAX_Bridge's own SAX Loader, wire both halves to one strength value. Read that loader's source and it calls load_lora_for_models(model, clip, lora, strength, strength) - same number for the model and the CLIP.

That's fine until it isn't. A character LoRA that's gorgeous at 0.7 on the model can be squatting all over your prompt comprehension at 0.7 on the CLIP side, so you pick a compromise number and nobody's happy.

SAX CLIP Lora Loader (class SAX_Bridge_Loader_Lora_Clip, category SAX/Bridge/Loader) applies a LoRA to the text encoder only. The model is untouched - model-side strength stays with the Loader or SAX Lora Loader, and the CLIP side gets its own slider here.

What's actually happening under the hood

No magic. It loads the file with comfy.utils.load_torch_file, then calls comfy.sd.load_lora_for_models(None, clip, lora, 0.0, strength). That None where the model goes and the 0.0 where the model strength goes are the whole trick: ComfyUI applies the LoRA's lora_te* text-encoder keys to your CLIP at strength_clip and has nothing to pour the model-side keys into.

Two consequences before you plug it in:

  • Your input CLIP isn't mutated - ComfyUI clones before patching, so you can fan one CLIP into two branches with different strengths.
  • ComfyUI logs lora key not loaded: ... for every model-side key it skipped. Expected and harmless; the stock loaders do the same on a key mismatch. Don't chase those warnings.

The inputs that matter

Only two are required, and they're both widgets:

  • lora_name - the LoRA file picker, drawn from your models/loras folder. None is a real option and means pass-through.
  • strength_clip - CLIP-side strength, -10 to 10, default 1.0. This is the slider you came for. Setting it to 0.0 also passes the CLIP through untouched; the code short-circuits before the file is even read.

The two optional inputs are how you pick your CLIP source:

  • clip - a raw CLIP. Per the tooltip, it takes priority over the CLIP in the pipe.
  • pipe - a PIPE_LINE; the CLIP inside it gets patched.

That's the useful bit on a SAX graph: drop it inline on a pipe and it patches the CLIP in place, threading the bundle onward. It also covers loaders that hand you a CLIP on its own wire, like SAX MiniMax H3 Loader - feed clip, then use the CLIP output.

Two outputs: PIPE and CLIP. PIPE is your input pipe with clip swapped for the patched one - and it's empty if you never connected a pipe, so don't plan on piping onward from a CLIP-only setup. CLIP is the patched encoder by itself; wire it into your prompt node or SAX Pipe's clip slot.

Two CLIP LoRAs? Chain two nodes. There's no multi-LoRA UI here, one node per LoRA by design.

Installing it

The pack installs in one go. From ComfyUI Manager, Install via Git URL:

https://github.com/so16tm/SAX_Bridge

Or manually:

cd ComfyUI/custom_nodes
git clone https://github.com/so16tm/SAX_Bridge

Then restart ComfyUI. The pack's pyproject.toml declares no dependencies at all, so there's nothing to pip install for this node - no Impact Pack, no triton, no sam3 unless you actually run the SAM3 segmenter nodes. Autocomplete++ is optional, and only affects prompt expansion.

Where people get burned

Neither input connected throws a clear error instead of silently doing nothing: "CLIP Lora Loader: connect a clip, or a pipe that contains a CLIP." Note the second half - a pipe built without a CLIP in it won't save you.

A missing LoRA file is a hard error here, unlike SAX Lora Loader, which logs a warning and skips the entry. If you're moving workflows between machines, this is the node that will stop the queue.

The duplicate-application trap. Because the model is never patched, this node doesn't record its LoRA in the pipe's applied-LoRA list. So a <lora:name> tag sitting in SAX Prompt still applies that same LoRA through the tag path - and on the CLIP it stacks instead of being deduplicated. Handy sometimes (a cheap way to push CLIP strength past a slider you already maxed), annoying when a prompt suddenly looks overcooked. Check whether both are firing.

Don't expect model effects. This won't change composition, pose, or style weight in the diffusion model. That's a different slider, upstream.

And the standing pipe caveat: a bundle hides contents, not connections, so a CLIP patched here and one patched elsewhere look identical on the graph. When output doesn't match your sliders, inspect the pipe instead of staring at the wires.

A quiet, single-purpose node in a pack of flashier ones - but if you've ever wanted a LoRA to go quiet in the text encoder without vanishing from the model, this is the shortest path.

CategorySAX/Bridge/Loader

Inputs (4)

NameTypeDefaultDescription
lora_nameCOMBOLoRA to apply to the CLIP. None passes the CLIP through.
strength_clipFLOAT1.00-10–10Strength applied to the CLIP. 0 passes the CLIP through.
pipeoptPIPE_LINEPipe whose CLIP is patched. Not needed when clip is connected.
clipoptCLIPCLIP to patch. Takes priority over the CLIP in the pipe.

Outputs (2)

NameTypeDescription
PIPEPIPE_LINE—
CLIPCLIP—