Nodes/ComfyUI-DonutNodes/Donut Krea2 Fusion Control
ComfyUI Node

Donut Krea2 Fusion Control

Fine-tune how Krea 2 fuses text, without a single LoRA

By DonutsDelivery·Created about a year ago·Updated about 19 hours ago· 25
Donut Krea2 Fusion Control
  • model
  • conditioning_in_1
  • conditioning_in_2
  • conditioning_in_3
  • conditioning_in_4
  • model
  • conditioning_out_1
  • conditioning_out_2
  • conditioning_out_3
  • conditioning_out_4
  • diagnostics
compatibility_presetCustom
tap_methodDonut 12-tap gains
tap_profileclassic
per_layer_weights1.0,1.0,1.0,1.0,1.0,1.0,1.0,2.5,5.0,1.1,4.0,1.0
tap_strength1.00
tap_formulascale_around_1
tap_normalizationtensor_rms
projector_methodDonut projector-input gains
projector_profileoff
projector_layer_weights1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,2.0,2.0,1.0,1.0
projector_strength1.00
projector_formulascale_around_1
projector_normalizationnone
fusion_methodStandard Krea2 fusion
fusion_strength1.00
ui_modeAdvanced
uncensorfix_controlsFusion only
execution_modeComfy patches
uncensorfix_strength1.00

Krea 2 runs its text conditioning through a Qwen3-VL encoder, and the interesting part is how: the text isn't injected once, it's fused through 12 concatenated hidden-state taps that a bias-free "projector" then squeezes down to the conditioning the model actually reads. DonutKrea2FusionControl sits on that fusion path and gives you the knobs to weight it per tap. No LoRAs, no extra safetensors, no downloads - it's pure activation-space math inside the sampler graph, and the node description makes that promise up front: "No external LoRA or safetensors file is loaded."

Why would you want this? Because Krea 2 shipped with a trained-in alignment pass that community nodes like ConditioningKrea2Rebalance and Krea2FilterBypass already fight - people rebalance the conditioning to restore expression the filter flattened. This node lets you do that same class of surgery with explicit per-tap control, and it ships compatibility presets that copy the exact settings from those known community nodes so you can reproduce their behavior without installing them.

What you're actually controlling

Two independent intervention points:

  • Pre-fusion tap scaling (tap_* inputs) - scales the 12 Qwen hidden-state taps before they're fused. The tap_profile presets (classic, deep_2, deep_3) are canned weight vectors; classic is the familiar 1,1,...,2.5,5.0,1.1,4.0,1.0 pattern. tap_strength (-10 to 10) sets how hard the profile applies, and tap_formula / tap_normalization change the strength law and how gains are normalized (tensor_rms, rms_gain, …) - the right combo to compare fixed-seed experiments with.
  • Post-layerwise projector-input scaling (projector_* inputs) - scales the 12 inputs to Krea 2's 12→1 projector, which is mathematically equivalent to scaling its weight columns. That's a much more surgical lever: you're steering which layers get to speak at the final fusion.

The compatibility_preset dropdown is a UI helper, not a runtime override - the tooltip is explicit about this. It copies values into the visible settings below it, and it's how you get "COPY settings: Krea2FilterBypass 2vector" or the hybrid/donut-balanced profiles into the graph without hand-typing 12-number vectors. Then you tweak from there.

fusion_method picks between standard Krea 2 fusion and the "capitan01R Krea2T-Enhancer operation," with fusion_strength (0–2) scaling whichever you chose.

Wiring it

Inputs: model, plus up to four conditionings (conditioning_in_1 required, 2–4 optional). Outputs mirror that: patched model, four conditioning_out slots, and a diagnostics STRING you can read for what got applied. Note it doesn't take an image - that's DonutKrea2ImageConditioning's job. This node is the second half of the Krea2 finishing kit.

Install

Standard pack install, nothing extra:

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," restart.

The honest caveat

This is a deep-control node for people who are already running Krea 2 and chasing a specific failure - usually the refusal-flattening that the KB documents. If you just want a normal Krea 2 workflow, you don't need it. If you want the classic rebalance behavior, the presets are the fastest on-ramp. And because it loads no weights, everything is deterministic and free to experiment with on a fixed seed - which is exactly how the author intends it.

CategoryDonut/conditioning

Inputs (24)

NameTypeDefaultDescription
modelMODEL
conditioning_in_1CONDITIONING
compatibility_presetCOMBOCustomSelect a preset. UncensorFix uses embedded weights and stays selected when its controls are edited. Off passes the input model and conditioning through unchanged, preserving upstream LoRAs and stored control values.
tap_methodCOMBODonut 12-tap gains2 options: Donut 12-tap gains, nova452 Rebalance operation
tap_profileCOMBOclassic5 options: off, classic, deep_2, deep_3, custom
per_layer_weightsSTRING1.0,1.0,1.0,1.0,1.0,1.0,1.0,2.5,5.0,1.1,4.0,1.0
tap_strengthFLOAT1.00-10–10Tap strength. For UncensorFix this scales its embedded weights in both modes. In Simple mode it also drives the selected preset's projector/fusion strength.
tap_formulaCOMBOscale_around_13 options: scale_around_1, geometric_power, raw_multiply
tap_normalizationCOMBOtensor_rms4 options: none, mean_gain, rms_gain, tensor_rms
projector_methodCOMBODonut projector-input gains3 options: Donut projector-input gains, Krea2FilterBypass 2vector diff, Krea2FilterBypass 3vector diff
projector_profileCOMBOoff5 options: off, classic, deep_2, deep_3, custom
projector_layer_weightsSTRING1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,2.0,2.0,1.0,1.0
projector_strengthFLOAT1.00-10–10Strength of the live post-layerwise projector-input profile.
projector_formulaCOMBOscale_around_13 options: scale_around_1, geometric_power, raw_multiply
projector_normalizationCOMBOnone4 options: none, mean_gain, rms_gain, tensor_rms
fusion_methodCOMBOStandard Krea2 fusion2 options: Standard Krea2 fusion, capitan01R Krea2T-Enhancer operation
fusion_strengthFLOAT1.000–2Strength used by the selected fusion operation.
ui_modeCOMBOAdvancedSimple hides individual fusion controls. UncensorFix composition and execution remain explicit.
conditioning_in_2optCONDITIONING
conditioning_in_3optCONDITIONING
conditioning_in_4optCONDITIONING
uncensorfix_controlsoptCOMBOFusion onlyFusion only applies the visible fusion settings. Fusion + UncensorFix weights also applies embedded UncensorFix weights with any preset. Old LoRA modes remain for saved workflows.
execution_modeoptCOMBOComfy patchesInherited from the upstream global LoRA execution mode; this legacy widget is ignored when the model already carries a selection. Experimental bypass reuses its forward-adapter path and compatibility fallbacks. The two execution modes are not numerically interchangeable, especially with quantization.
uncensorfix_strengthoptFLOAT1.00-20–20UncensorFix weight strength, independent of tap/fusion strength.

Outputs (6)

NameTypeDescription
modelMODEL
conditioning_out_1CONDITIONING
conditioning_out_2CONDITIONING
conditioning_out_3CONDITIONING
conditioning_out_4CONDITIONING
diagnosticsSTRING