Krea2 ControlNet img2img ⚡
Depth, canny, or your own map
- model
- clip
- vae
- images
- control_image
- model
- positive
- negative
- latent
- denoise
Plain Krea2 img2img changes a photo's pixels but leaves you at the mercy of the prompt for where things go. This node is the version that lets you steer the structure - depth, edges, pose - the way you'd use a ControlNet on an SDXL-era model. Except Krea2 doesn't have a ControlNet architecture; it has Control LoRAs, and the wiring is different enough that a dedicated node is worth having.
Here's the mental model. Krea2's Control LoRAs come in two flavors, and the pack's Krea2 Control LoRA Loader auto-detects which you've got: the widened-projection kind (trained to accept image tokens plus control tokens through the DiT's input projection) and the ordinary in-context kind. What nothing in the LoRA file tells you is what type of control signal it wants - depth, canny, something else. That's what this node's control_mode is for.
What it does
Everything Krea2 img2img does - prompt encoding, VAE-encoding your source photo, building the init latent - plus attaching a control image to the loaded Control LoRA. The control image gets resolved three ways:
auto_depth(default) - derives a depth map from yourimagesautomatically using Depth Anything V2. Weights auto-download intomodels/depth_anything_v2/on first use. Right for the depth Control LoRA (e.g. thedepth-control-lorathat circulates from the Krea-2-depth-controlnet release).auto_canny- plaincv2.Cannyedge detection, no model, no download. Right for canny checkpoints.manual- no derivation; connectcontrol_imageyourself. Use it for pose/lineart/normal LoRAs the two auto modes don't cover - those preprocessors come from the separate ComfyUI-ControlNet-Nodes package, and you wire their output in here.none- skip control entirely for this call, even with a Control LoRA loaded. Handy for A/B-testing without rewiring the graph.
Connecting control_image explicitly always overrides auto-derivation. Two small companion settings: control_channel_mode (grayscale for depth, rgb for canny/pose) and control_normalize (per-image minmax for depth, none for edges).
The rest of the knobs
strength (default 0.6) is your img2img dial - how much of the init image to discard. width/height are output size; with images connected they resize them. Outputs are model, positive, negative, latent, denoise, which feed a stock KSampler directly. Minimal graph: Krea2 Model Loader → Krea2 Control LoRA Loader → this node → KSampler → VAE Decode.
Installing
cd ComfyUI/custom_nodes
git clone https://github.com/ChrisColeTech/ComfyUI-GGUF-Loader
pip install --upgrade gguf
Restart, drop your Krea2 model, Qwen3-VL-4B encoder, VAE and Control LoRA into the usual model folders. Node is under 🤖 CCTech/Krea2.
Gotchas
The guard rails are worth knowing. A Control LoRA loaded with no usable control image (and control_mode not none) raises immediately - it refuses to silently sample a half-configured model. The reverse is fine: control_image connected with no Control LoRA just gets ignored with a warning, so you can leave a preprocessor chain wired while you toggle the LoRA loader. Both are deliberate, and both save you from the "why is my output ignoring the depth map" class of debugging.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| clip | CLIP | — | |
| vae | VAE | — | |
| prompt | STRING | — | |
| negative_prompt | STRING | — | |
| strength | FLOAT | 0.600–1 | img2img only. How much of the init image(s) to discard. Ignored without images. |
| batch_size | INT | 11–4096 | — |
| width | INT | 102416–16384 | Output size. With init or control image(s) this resizes them. |
| height | INT | 102416–16384 | — |
| imagesopt | IMAGE | One or more init images for img2img (batch-aware - a batch of N becomes N independent img2img generations), and (in auto_depth/auto_canny modes) the source photo the control image is derived from. Leave unconnected for txt2img. | |
| control_modeopt | COMBO | auto_depth | auto_depth/auto_canny: derive the control image from `images` automatically - pick whichever matches the loaded Control LoRA. manual: no automatic derivation, connect control_image yourself - use this for any Control LoRA the two auto modes don't cover (pose/lineart/normal). none: skip control attachment entirely even if a Control LoRA is loaded - for toggling control off without rewiring or removing the loader. |
| depth_ckpt_nameopt | COMBO | depth_anything_v2_vitb.pth | auto_depth mode only. Model size for the automatic depth estimation. Downloads on first use if not already in models/depth_anything_v2. |
| control_imageopt | IMAGE | Manual control map - a depth/canny/pose/etc. map. Overrides auto_depth when connected. Required in manual mode. | |
| control_channel_modeopt | COMBO | grayscale | grayscale for depth; rgb for canny/pose/lineart/normal. |
| control_normalizeopt | COMBO | per_image_minmax | per_image_minmax for depth; none for canny/pose/lineart/normal. |
| control_invertopt | BOOLEAN | false | Flip if the preprocessor's convention is reversed from the LoRA's training convention (e.g. depth preview shows near objects dark instead of white). |
| control_batch_modeopt | COMBO | independent_images | 2 options: independent_images, video_frames |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| latent | LATENT | — |
| denoise | FLOAT | — |