Nodes/创界 · ChuangJie/一体节点 · 内部 LoRA
ComfyUI Node

一体节点 · 内部 LoRA

一体节点 · 内部 LoRA

By lefango·Created 24 days ago·Updated 17 days ago· 3
一体节点 · 内部 LoRA
  • model
  • clip
  • 模型
  • CLIP
◄config—►

One node, an ordered list, no chain of LoraLoaders

A three-LoRA stack in vanilla ComfyUI is three LoraLoader nodes in a row, each one passing MODEL and CLIP to the next, each one a place to fat-finger a strength or leave a stale file. The ChuangJie console replaces that with a list you manage in its UI: name, category, cover, strength for the model branch, strength for the text branch, and a trigger phrase per entry. On queue, the list becomes this node - the pack's internal LoRA stage - with the entries serialized into its config field.

Display name 一体节点 · 内部 LoRA, category 创界/临时测试/内部. You don't drag it; the console's prompt rewrite injects it. But it's a perfectly usable node standalone if you write the JSON yourself, and it's the cleanest way to see what the UI was actually doing.

What the config actually holds

config is a versioned JSON snapshot - {"version": 1, "entries": [...]} - where each entry carries file, enabled, strength_model, strength_clip, trigger and a display name. It's validated hard: bad version, duplicate file in the list, non-finite strength, absolute or traversal paths, a strength outside −100…100, all refused with a specific Chinese message before a single weight is touched. The model and clip inputs are optional; leave clip unwired and the clip-side strengths are ignored, which is the correct behaviour rather than an error.

One subtlety that surprises people: the console doesn't send the full entry list to both branches. It builds two filtered configs - one with only model-side strengths, one with only clip-side - so an entry you set to strength_clip: 0 genuinely never patches the encoder. Semantically identical to what the manual chain does when you put a zero in the clip box, minus the chance of you forgetting.

How it loads

Preflight first: every file's signature (path, size, mtime) is resolved before the model is modified, so a typo in entry five doesn't leave you with four LoRAs applied to a half-built graph. Then it walks the list in order and calls comfy.sd.load_lora_for_models per entry, forwarding LoRA metadata to the patcher when the host's ComfyUI supports it. The last loaded file's weights are cached between calls, so the same file appearing twice (model pass, then clip pass) is read from disk once.

Order matters and the node respects yours. Put a style LoRA before a character LoRA and you get a different image than the reverse - that's not folklore, it's sequential patching, and it's the reason the Console makes the list reorderable rather than treating it as a set. The same list is also the source of the 触发词 output the console merges into your positive prompt, deduplicated and comma-joined.

Where it goes wrong

GGUF models make this slow, not broken. Each LoRA application on a quantized UNet has to dequantize the layer, patch it, and hand it back, so a four-LoRA stack on a Q4 build costs noticeably more per step than the same stack on fp8. That's a format cost, not a bug in this node.

Strengths above 1.0 stack multiplicatively in effect, not additively. Two character LoRAs at 0.8 each is not 1.6 of character; it's usually a melted face. If you're at strength_model 0.6 across three and still losing the style, the answer is usually fewer LoRAs rather than more weight - same conclusion the training docs land on.

A LoRA that needs a trigger phrase isn't going to fire just because it's loaded. The strength and the phrase are different mechanisms. This pack stores the phrase per entry and emits it from a separate triggers stage, which is convenient - but if you're using this node standalone you get the weights only, and you'll need to type the phrase yourself.

"LoRA 文件名必须是注册目录内的相对路径" - the config allows only paths relative to models/loras. Absolute paths are rejected, deliberately, because they'd make the workflow non-portable and they're a mildly rude thing to accept from an HTTP endpoint.

Install

Part of the pack. Manager search ComfyUI-ChuangJie, or:

cd ComfyUI/custom_nodes
git clone https://github.com/lefango/ComfyUI-ChuangJie.git

There are no LoRA-specific dependencies; requirements.txt only covers GGUF model loading (gguf, sentencepiece, protobuf). Upgrade path warning worth repeating: this pack used to ship a separate LoRA manager node and no longer registers one. Workflows built against that old node won't auto-migrate - you point them at the console and rebuild the list once. Also, if you still have the standalone ComfyUI-Unified-Model-Loader-Test folder sitting in custom_nodes, remove it; the pack raises a duplicate-route error at startup rather than guess which copy you meant.

If the console's LoRA page comes up empty while your LoRAs are clearly on disk, that's the catalogue, not the node - check that models/loras is the folder your ComfyUI actually registers (extra_model_paths.yaml wins over the default), then reopen the console.

Category创界/临时测试/内部

Inputs (3)

NameTypeDefaultDescription
configSTRING—
modeloptMODEL—
clipoptCLIP—

Outputs (2)

NameTypeDescription
模型MODEL—
CLIPCLIP—