ComfyUI Krea2 Control
Chinese documentation: README_zh.md
Native-style ComfyUI nodes for Krea2 Control LoRA inference. The plugin keeps ComfyUI's built-in Krea2 inference path intact, uses the expanded input projection from the LoRA checkpoint during sampling, and injects a VAE-encoded control latent.
Nodes
Krea2 Control LoRA Loader: loads a Krea2 Control LoRA from models/loras, applies compatible block LoRA weights to the Krea2 model, prepares the expanded input projection, and registers the sampling wrapper.
Krea2 Control Image Encode: encodes any control IMAGE with the supplied Krea2/Qwen VAE. It can consume outputs from comfyui_controlnet_aux preprocessors such as Depth Anything, Canny, OpenPose, lineart, and normal maps, but it does not import or call comfyui_controlnet_aux.
Krea2 Control Apply: converts the encoded control latent into the Krea2 latent space and attaches it to the model after the Control LoRA has been loaded.
Basic Workflow
- Prepare a control image with normal ComfyUI nodes, or connect a
comfyui_controlnet_aux preprocessor output.
- Encode that control image with
Krea2 Control Image Encode using the Krea2/Qwen image VAE. Keep the default match_latent_size and connect the sampler latent to this node's latent input.
- Load the Krea2 Control LoRA with
Krea2 Control LoRA Loader.
- Attach the encoded latent with
Krea2 Control Apply.
- Send the resulting model to your sampler.
Krea2 Control Apply is required after the loader. If the Control LoRA is loaded without an attached control latent, sampling fails instead of silently running a partially patched model.
Block LoRA weights are applied through ComfyUI's ModelPatcher so normal model loading, offload, and low-VRAM behavior still apply. During the Krea2 diffusion forward call, image tokens still pass through the native first projection so regular LoRA patches on the base model remain active; the Control LoRA contributes only the control-token half of the expanded projection. The temporary projection state is restored immediately afterwards, so removing the node does not leave the base Krea2 path patched.
LoRA block matching reads the live module weight shapes instead of relying only on state_dict() s