ZImage SDNQ Control LoRA Apply
Works, with a quality tax
- pipeline
- pipeline
ZImageSDNQControlLoRAApply is the control-pipeline twin of ZImageSDNQLoRAApply, and it exists for one reason: the control loader (ZImageSDNQControlPipelineLoader) produces a ZIMAGE_CONTROL_PIPELINE, which the plain LoRA node doesn't accept. This node does - same live-attachment mechanism, same inputs, different input type.
So if you're running a Canny, depth, inpaint, or tile-upscale workflow and want a character or style LoRA on top, this is the node. Wire it between the control loader and the sampler:
ZImageSDNQControlPipelineLoader → ZImageSDNQControlLoRAApply → ZImageSDNQSamplerControl
Inputs (no surprises)
- lora_name - dropdown of LoRAs in
models/loras/, defaulting to<manual>.lora_source_customoverrides with a path. - strength - default 1.0, −5 to 5. Negative values subtract. Base-trained LoRAs on Turbo again want the higher end, ~2.0.
- enabled (default
true) - pass-through with the LoRA zeroed when off. - replace_existing (default
true) - whether this LoRA replaces the previously attached one for this node slot or stacks. Attachment state persists per node across the session, so leaving this on is the safe default - it's how you stop a LoRA from a previous run ghosting into your output.
Output is a ZIMAGE_CONTROL_PIPELINE, ready for the control samplers.
The quality tax you should know about
Here's the honest part, and it's grounded in how Z-Image's control ecosystem actually behaves. The Fun ControlNet was trained by a different Alibaba sub-team (PAI) than the model itself (Tongyi-MAI), on the distilled Turbo - which means applying it at full strength across all steps already costs you some quality. Stack a LoRA on top and you're asking the distilled model to do two things at once: hold the control condition and express the LoRA's style. Community reports of combining ControlNet with LoRAs on Z-Image Turbo consistently describe quality degradation - weaker adherence on one side or the other, sometimes both.
None of that means "don't use this node." It means: control + LoRA is a fight for attention, and you should expect to tune. The levers are the same as ever - keep control_context_scale in the sampler moderate (0.7–0.8), keep the LoRA strength where the LoRA's own page suggests, and if things look overcooked, drop one of them. You can't do the step-cutoff trick (early control, released late) inside this pack, so control_context_scale is doing all that work by itself.
Install
Same pack install as everything here: ComfyUI Manager (search "Z-Image SDNQ") or:
cd ComfyUI/custom_nodes
git clone https://github.com/GeneralShan/comfyui-zimage-sdnq
restart, pip install sdnq diffusers timm opencv-python-headless for the control path, LoRAs in models/loras/. If the dropdown is empty after you add files, restart so the catalog rescans - it's read once at load time.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| pipeline | ZIMAGE_CONTROL_PIPELINE | — | |
| lora_name | COMBO | <manual> | LoRA file from models/loras. Use <manual> to provide a custom path. |
| strength | FLOAT | 1.00-5–5 | — |
| enabled | BOOLEAN | true | — |
| replace_existing | BOOLEAN | true | — |
| lora_source_customopt | STRING | Overrides lora_name when set. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| pipeline | ZIMAGE_CONTROL_PIPELINE | — |