Donut Krea2 Image Conditioning
Mix three reference images into Krea 2 with per-image strength
- clip
- image1
- image2
- image3
- vae
- conditioning
Krea 2's text encoder is Qwen3-VL 4B - a vision-language model - which means images are not a separate conditioning channel; they're embedded straight into the prompt as vision tokens. DonutKrea2ImageConditioning is the node that exploits that: it lets you blend up to three reference images into a Krea 2 edit or generation, each with its own strength slider, plus a text instruction. If you've ever wanted "this person's face" and "this pose" and "this lighting" as separate, independently-weighted inputs, this is the cleanest expression of it in the pack.
How the blend works
The mechanism is documented right in the source, and it's refreshingly legible:
final = text_strength × text_cond + Σ strength_i × (img_i_cond − text_cond)
Each reference image is CLIP-encoded separately and compared against a text-only baseline; strength=0 means pure text, strength=1 means full image influence, >1 is deliberate overemphasis. text_strength=0 drops the text baseline entirely for pure image-delta conditioning. The rebalance toggle (default on) reboosts the blended result to match your requested text_strength magnitude - so if you lower image strength, text gets proportionally louder and your effective CFG stays constant instead of drifting. That's the subtle bit people get wrong with multi-image conditioning, and it's handled for you.
There's an optional vae input too, but the docstring is upfront that it's for forward-compatibility: it stores reference_latents on the conditioning for future use, since the model consumes only vision tokens today. Feed it if you like; don't expect it to change the output yet.
The inputs that matter
- clip - the Krea2 CLIP model (Qwen3-VL 4B). Required; grab it from your Krea 2 checkpoint stack.
- prompt - the text instruction describing the edit or generation.
- text_strength (default 1, 0–10) - text influence; you'll usually leave it at 1.
- image1 / image2 / image3 with strength1/2/3 - the three reference slots. Wire in images you want to influence the result and dial each independently.
- multiplier (default 1, -1000 to 1000) - a global gain on the whole conditioning tensor; 1.0 = unchanged. A blunt master volume for the entire blend.
Output is a single conditioning, which you feed straight into your sampler's positive (or wherever you'd wire a normal positive encode). The pack suggests pairing it with ConditioningKrea2Rebalance for per-layer tap weighting, and DonutWeightVectorScale if you're generating rebalance weight strings.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/DonutsDelivery/ComfyUI-DonutNodes.git donutnodes
cd donutnodes
python -m pip install -r requirements.txt
or ComfyUI Manager → "DonutNodes," then restart. No model downloads beyond the Krea 2 checkpoint stack you already need.
Where it shines
Krea 2's editing path is this node's natural home - the same Qwen3-VL stack was chosen specifically so the model could later support editing, and reference images are how you steer it. Start with strength at 1 for your primary reference, 0.3–0.6 for secondary ones, and use rebalance on. The one thing to keep in mind: unlike old CLIP-era conditioning, these images travel as vision tokens, so they carry composition and content, not just "style" - treat the sliders as blending what's in the frame, and adjust your prompt accordingly.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | Krea2 CLIP model (Qwen3-VL 4B) | |
| prompt | STRING | Text instruction describing the edit or generation | |
| text_strength | FLOAT | 1.000–10 | Text influence: 0=no text baseline, 1=full, >1=overemphasis |
| rebalance | BOOLEAN | true | Reboost blended conditioning to match the requested text_strength magnitude. When lowering image strength, text gets proportionally louder so overall CFG stays constant. |
| image1opt | IMAGE | First reference image | |
| strength1opt | FLOAT | 1.000–10 | Image1 influence: 0=text-only, 1=full, >1=overemphasis |
| image2opt | IMAGE | Second reference image | |
| strength2opt | FLOAT | 1.000–10 | — |
| image3opt | IMAGE | Third reference image | |
| strength3opt | FLOAT | 1.000–10 | — |
| vaeopt | VAE | Optional VAE. Stores reference_latents on the conditioning for forward-compatibility. | |
| multiplieropt | FLOAT | 1.00-1000–1000 | Global gain on the conditioning tensor. 1.0 = unchanged. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| conditioning | CONDITIONING | — |