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 2 years ago·Updated 4 days ago· 26
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►
◄nag_match_tapstrue►
◄nag_text_energy_compensationfalse►
◄nag_batch_txtfusionfalse►
◄txtfusion_rms_guardfalse►

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 (28)

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. Experimental presets are diagnostic A/B recipes; NAG-friendly means the tap transform uses prompt-independent fixed gains, not that every NAG parameter is guaranteed artifact-free.
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.
nag_match_tapsoptBOOLEANtrueApply Fusion taps to NAG's negative so both streams match. Off keeps a raw NAG negative (Balanced + raw NAG).
nag_text_energy_compensationoptBOOLEANfalseEXPERIMENT: blend NAG's two text streams toward shared RMS, weighted by NAG alpha, before txtfusion. Off leaves both streams untouched.
nag_batch_txtfusionoptBOOLEANfalseEXPERIMENT: run NAG's two text streams through one txtfusion call when their token lengths match. Off keeps the upstream two-call path.
txtfusion_rms_guardoptBOOLEANfalseEXPERIMENT: normalize internal txtfusion attention/MLP contributions and the projector (bounded 0.25x-4x gains) against an independent pre-adapter reference of the effective model/merge. Applies to ALL callers of this model: base, upscale and detailer, with or without NAG (including alpha 0). Rebalance conditioning is not changed. Adds reference weights and computation. Default Off. Does not guarantee removal of image artifacts.

Outputs (6)

NameTypeDescription
modelMODEL—
conditioning_out_1CONDITIONING—
conditioning_out_2CONDITIONING—
conditioning_out_3CONDITIONING—
conditioning_out_4CONDITIONING—
diagnosticsSTRING—