Nodes/Eric_Krea2/Eric Krea2 Control (Depth/Pose ControlNet-LoRA)
ComfyUI Node

Eric Krea2 Control (Depth/Pose ControlNet-LoRA)

Depth and pose control for Krea 2, and it's a LoRA, not a second model

By EricRollei·Created 4 months ago·Updated a day ago· 21
Eric Krea2 Control (Depth/Pose ControlNet-LoRA)
  • control_image
  • control
  • control_preview
◄control_lora▾►
◄channel_modegrayscale►
◄normalizeper_image_minmax►
◄invertfalse►
◄s1_strength1.00►
◄s2_strength0.50►
◄s3_strength0.00►

Krea 2's ControlNet is not a ControlNet. There's no separate 1.4B side network bolted onto a frozen backbone, no ControlNetLoader, no SD-style apply node. The public depth control for Krea 2 is a Control-LoRA - one .safetensors file that expands the DiT's input projection from 64 to 128 channels and adds a rank-64 LoRA on every block. Eric Krea2 Control is the node that builds that bundle and hands it to the Multi-Stage Ultra node's control socket.

Why you'd want it: Krea 2 is famously good at what things are and famously loose about where they are. Depth conditioning is the fix that survived the transition from UNets to DiTs, and the community release that made it practical (Patil/Krea-2-depth-controlnet) landed in July 2026 and works on Turbo as well as Raw. If you've been fighting the model to keep a pose or a composition, this is the lever.

How it works

Control-LoRA splits the work in two. The expanded input layer is trained weights inside the checkpoint - the DiT's patch embed now takes [noisy patches ; control patches] instead of just noisy patches, and that half is always full strength. The block LoRA is the part the strength dials touch; it behaves like a --lora-scale on an ordinary LoRA. Your control image is VAE-encoded and enters the model clean at every step, so it's conditioning the denoise, not being denoised.

Everything here is forward hooks installed for one generation and removed afterwards. Nothing is merged into weights, so the control never leaks into a later run and it composes with your LoRA stack - including a style LoRA on top.

Worth knowing up front: this node loads nothing and runs nothing. It builds a bundle, and the Ultra node installs the runtime for one generation and tears it down after (cancel-safe).

The inputs that matter

Two are required. control_image wants a preprocessed map - Depth Anything or DepthPro output for the depth LoRA, not a photo of a person. It's cover-cropped to each controlled stage's own resolution, so keep it at the aspect ratio you're generating in; a wildly different aspect gets cropped hard. control_lora is the checkpoint, listed from your Krea2 LoRA folder with files that have control in their path sorted to the top. The checkpoint decides the control type - a depth LoRA fed a canny map does nothing useful.

Then channel_mode and normalize, which are where people silently go wrong. Depth: grayscale (luminance repeated to RGB) and per_image_minmax, and near objects must be white - flip invert only if your depth preview shows near things dark. Pose, canny, lineart, normals: rgb and none.

The three strength dials are the interesting part and they're per stage. Defaults are s1_strength 1.0, s2_strength 0.5, s3_strength 0 - structure is decided in S1, so S1 carries the weight; S2 gets a moderate value to stop the refine drifting; S3 runs far above the ~1 MP buckets the checkpoint was trained at, so 0 is usually right. Drop S1 to around 0.6 when you want the composition to breathe.

Outputs are control (into Ultra's control socket) and control_preview - the map after cover-crop and normalisation, i.e. what the model actually saw. Wire it to a Preview Image node for your first few runs; it takes ten seconds and saves an hour of confusion.

Installing it

The pack installs like any other:

cd ComfyUI/custom_nodes
git clone https://github.com/EricRollei/Krea2_ComfyUI_Advanced

Or search Eric_Krea2 in ComfyUI Manager. Restart, then the hard part - this pack drives the genuine Hugging Face Krea2Pipeline rather than reimplementing sampling, so it needs a diffusers build that contains it, merged after the 0.39.0.dev0 tag without a version bump:

python_embeded\python.exe -m pip install --upgrade --force-reinstall --no-deps git+https://github.com/huggingface/diffusers.git

The --force-reinstall isn't optional; without it pip sees the same version string and does nothing. You also need transformers>=4.57.0 for Qwen3VLModel, Krea 2 weights in diffusers layout (Raw and/or Turbo), and your control checkpoint in the Krea2 LoRA folder.

Where it goes wrong

  • "control LoRA not found" - the file isn't resolvable from the LoRA path. It has to live where the dropdown can see it, not in a folder you pointed at once in another workflow.
  • Depth attached backwards. Near = white. If your structure comes out inverted and the image looks carved-out, that's invert.
  • Combining with other sockets. Control is the social one: it combines with style, paint, edit, guidance and reference latents. If you're also feeding reference latents - and one README-verified run at 1.5 MP with the edit LoRA spilled VRAM on a 48 GB card - start at 1 MP.

One caveat that no longer applies but appears in old threads: before October 2026, control was silently dropped whenever reference tokens were present. That's fixed; reference tokens now bypass the Control-LoRA while the hint still lands on the target image tokens.

CategoryEric/Krea2

Inputs (8)

NameTypeDefaultDescription
control_imageIMAGEPreprocessed control map (e.g. Depth Anything / DepthPro output for the depth LoRA). Any size - it is cover-cropped to each stage's resolution, so keep it at the generation's aspect ratio.
control_loraCOMBOKrea2 Control-LoRA checkpoint (expanded input layer + block LoRA). Files with 'control' in their path are listed first.
channel_modeoptCOMBOgrayscalegrayscale: luminance repeated to RGB (depth maps). rgb: keep colors (pose / canny / normal / lineart LoRAs).
normalizeoptCOMBOper_image_minmaxper_image_minmax stretches the map to 0..1 - matches the depth LoRA's training (inverse depth, min-max). Use none for pose/canny.
invertoptBOOLEANfalseFlip the map. The depth LoRA expects NEAR = WHITE; turn this on only if your depth preview shows near objects dark.
s1_strengthoptFLOAT1.000–2Stage 1 control strength (= the reference's --lora-scale on the block LoRA; the expanded input layer is always full). 0 = stage runs the stock model. ~0.6 = weaker structure adherence, more freedom.
s2_strengthoptFLOAT0.500–2Stage 2 strength. Structure is set in S1; a moderate value keeps the refine from drifting. 0 = stock model for this stage.
s3_strengthoptFLOAT0.000–2Stage 3 strength (detail pass). Usually 0: the trained buckets are ~1 MP and S3 runs far above that.

Outputs (2)

NameTypeDescription
controlKREA2_CONTROL—
control_previewIMAGE—