ποΈ GRAG Unified Controller v3.0
The full control panel, for when you actually need it
- conditioning
- conditioning
If the Simple Controller is the "just make it work" version of GRAG, this is the "give me every knob" version. The GRAG Unified Controller exposes all 54 presets plus per-layer Ξ»/Ξ΄, adaptive timestep scheduling, and the paper's two-tier multi-resolution system - 25+ parameters for precision Qwen-Image editing that you can't get from the three-knob version. But honestly? Most people should start with the Simple Controller and only graduate to this one when they hit its ceiling.
Like its little sibling, it doesn't apply GRAG itself. It embeds a configuration into the conditioning - in this case a much richer one, carrying per-layer value lists, adaptive schedules, and tier configs - and the GRAG Advanced Sampler consumes it. Same data flow: encoder β controller β Advanced Sampler β VAE Decode.
The three modes
control_mode decides how much of the panel you actually touch:
simple- like the Simple Controller but with all 54 presets and manuallambda_global/delta_globalinstead of a strength slider. The two floats are your bias and deviation controls: 1.0 is neutral, above 1.0 enhances, below 1.0 reduces.advanced- per-layer control. Flipper_layer_enabledand pick alayer_strategy(structure_preserving,semantic_focused,detail_enhancer,balanced_progressive, orcustom), then setlambda_start/lambda_endanddelta_start/delta_endto sweep values across transformer blocks.total_layersdefaults to 60, which is exactly Qwen-Image's layer count - change it only for other models.expert- addsadaptive_enabled(vary strength through the denoising process viaadaptive_scheduleandmultiplier_start/multiplier_end) andmulti_resolution_enabled(two tiers: coarse structure at ~512px, fine detail at ~4096px, each with its own Ξ»/Ξ΄).
Two traps the defaults set for you
First, and this is the sneaky one: enable_grag defaults to False here. The Simple Controller defaults to True; this one silently defaults to off. Forgot to flip it? You just ran a full pipeline that did nothing, and the console won't scream about it. Flip it first.
Second, strength_multiplier - the tooltip itself admits it's "stored, not currently applied." It's a placeholder knob. Don't waste time dialing it in and wondering why nothing changes; it's cosmetic in v3.0.
What to actually set
For a first pass in simple mode, set enable_grag to True and pick a paper preset ("Paper: Balanced" is the sane default), then nudge lambda_global/delta_global if you want more or less punch. If you're experimenting with per-layer control, structure_preserving is the gentlest strategy - it keeps early layers near neutral and lets later layers do the work, which plays nicely with the paper's stability range (Ξ»/Ξ΄ between about 0.95 and 1.15). Output is a single conditioning that feeds the Advanced Sampler's positive.
Installing and troubleshooting
It's the same pack, same install:
cd ComfyUI/custom_nodes
git clone https://github.com/amir84ferdos/ComfyUI-GRAG-ArchAi3D
pip install PyYAML # unlocks all 54 presets
Restart ComfyUI and you're set. If a preset dropdown looks short, PyYAML is missing - you're seeing the 5 hardcoded presets instead of 54. If per-layer or adaptive effects aren't showing, run the Advanced Sampler with debug_mode on; the console will tell you whether the config actually made it into the attention patches. And if a ComfyUI update starts throwing tensor-shape errors, that's the known v3.0.1 compatibility issue (Qwen attention internals changed) - update the pack, and if it persists, file an issue; it's a real bug, not you.
The honest verdict: this is the node for people who want to understand GRAG, not just use it. Per-layer and adaptive control are genuinely powerful for precise edits, but there's a reason the pack ships a Simple Controller. If you don't know why you need per-layer Ξ»/Ξ΄ yet, you don't need it yet.
Inputs (26)
| Name | Type | Default | Description |
|---|---|---|---|
| conditioning | CONDITIONING | Conditioning from any encoder (Qwen, Flux, SD3, etc.) | |
| enable_grag | BOOLEAN | false | Enable GRAG attention guidance (passthrough if disabled) |
| control_mode | COMBO | simple | Simple: Presets only | Advanced: Per-layer | Expert: Adaptive + Multi-res |
| preset | COMBO | Custom | Choose preset or 'Custom' for manual control (54 presets available) |
| lambda_global | FLOAT | 1.000.1β2 | Lambda (bias strength) - 1.0=neutral, >1=enhance, <1=reduce |
| delta_global | FLOAT | 1.050.1β2 | Delta (deviation intensity) - 1.0=neutral, >1=amplify, <1=suppress |
| per_layer_enabled | BOOLEAN | false | Enable per-layer control (different Ξ»/Ξ΄ per transformer block) |
| layer_strategy | COMBO | structure_preserving | Per-layer distribution strategy |
| lambda_start | FLOAT | 0.900.1β2 | Starting Ξ» for early layers |
| lambda_end | FLOAT | 1.300.1β2 | Ending Ξ» for late layers |
| delta_start | FLOAT | 0.900.1β2 | Starting Ξ΄ for early layers |
| delta_end | FLOAT | 1.300.1β2 | Ending Ξ΄ for late layers |
| total_layers | INT | 601β100 | Total transformer layers in model (Qwen: 60) |
| adaptive_enabled | BOOLEAN | false | Enable adaptive timestep scheduling (vary strength during denoising) |
| adaptive_schedule | COMBO | smooth_transition | Timestep-dependent schedule type |
| multiplier_start | FLOAT | 0.800.1β2 | Starting multiplier (early denoising steps) |
| multiplier_end | FLOAT | 1.500.1β2 | Ending multiplier (late denoising steps) |
| multi_resolution_enabled | BOOLEAN | false | Enable multi-resolution tiers (paper's 2-tier system) |
| tier_preset | COMBO | v221_visible | Multi-resolution tier preset |
| tier1_resolution | INT | 512256β2048 | Tier 1 resolution (coarse structure) |
| tier1_lambda | FLOAT | 1.000.1β2 | Tier 1 Ξ» (typically 1.0 for stability) |
| tier1_delta | FLOAT | 1.000.1β2 | Tier 1 Ξ΄ (typically 1.0 for stability) |
| tier2_resolution | INT | 40961024β8192 | Tier 2 resolution (fine details) |
| tier2_lambda | FLOAT | 1.300.1β2 | Tier 2 Ξ» (custom editing strength) |
| tier2_delta | FLOAT | 1.300.1β2 | Tier 2 Ξ΄ (custom editing strength) |
| strength_multiplier | FLOAT | 1.000β2 | Overall GRAG intensity multiplier (stored, not currently applied) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| conditioning | CONDITIONING | β |