Model Scale SDXL
The SDXL block scaler that started this pack's merge family
- model
- MODEL
Block-wise model scaling isn't new - the community has been zeroing and amplifying SDXL UNet blocks since 2023 - but it's a technique that usually ships in giant all-purpose packs where it's one node among two hundred. Model Scale SDXL is the focused version, and it's the natural entry point to this pack's whole merge family: if you understand this node, every other Model Scale in the pack is the same idea with a different architecture's layer names.
The pitch: SDXL's UNet isn't one blob, it's a sequence of input_blocks, a middle_block, and output_blocks, and different parts do different jobs. Early input blocks handle coarse structure and composition; later blocks and the output side carry fine detail, textures, and style. Scaling a band of blocks lets you selectively reshape what the model produces without retraining a thing - it's the cheap, deterministic cousin of merging, and it's why the README names this node as the anchor of the pack's model-merging section.
How it works
Clone the model, match every weight to the longest widget prefix, multiply by your slider value via add_patches. 1.0 leaves a block untouched, 0.0 zeroes it out entirely, and values up to 2.0 amplify. Everything defaults to 1.0, so the node is a faithful pass-through until you move something. model in, one scaled MODEL out - wire it straight into your sampler.
The inputs that matter
Twenty-four sliders, but they group into five regions:
- time_embed. and label_emb. - the conditioning inputs. Scaling these is drastic; treat as the "how hard does this prompt hit" master knobs.
- input_blocks.0–input_blocks.8 - the downsampling encoder. Early blocks hold composition and semantics. Want the model to follow your prompt more literally? Slightly amplify the early input blocks.
- middle_block.0–middle_block.2 - the bottleneck. Small scale changes here echo through the whole image; usually leave near 1.0.
- output_blocks.0–output_blocks.8 - the decoder. Late output blocks carry texture and style. Dialing these down is how people get a softer, more stylized render without touching the composition.
- out. - the final projection. Zeroing it produces noise; don't.
What's worth trying
The classic first experiment: set output_blocks.5–output_blocks.8 to ~0.8 and sample the same seed - you'll usually see composition hold while texture softens. Or amplify input_blocks.0–input_blocks.2 to 1.2 for stricter prompt adherence and compare against a baseline at the same seed. One region per test, a few seeds each, and let the pack's Image Difference Checker put numbers on what changed.
Install
Search Easygoing in the ComfyUI Manager, or:
cd ComfyUI/custom_nodes
git clone https://github.com/easygoing0114/ComfyUI-easygoing-nodes.git
Restart ComfyUI. No pip extras; requires a current ComfyUI with the V3 node API.
What to watch
Widget names here use the internal key layout (input_blocks.0, not the original file's names), which matches how ComfyUI's SDXL model is actually structured - so the sliders land. Two honest caveats: the effect is live-in-graph only (save the workflow, or route through the pack's save-with-original nodes for a persistent file), and aggressive zeroing makes models fall apart fast. This is a precision tool, not a "max everything" one - and it's the best way to learn the pattern before you touch the bigger architectures in the rest of the pack.
Inputs (25)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| time_embed. | FLOAT | 1.000–2 | — |
| label_emb. | FLOAT | 1.000–2 | — |
| input_blocks.0 | FLOAT | 1.000–2 | — |
| input_blocks.1 | FLOAT | 1.000–2 | — |
| input_blocks.2 | FLOAT | 1.000–2 | — |
| input_blocks.3 | FLOAT | 1.000–2 | — |
| input_blocks.4 | FLOAT | 1.000–2 | — |
| input_blocks.5 | FLOAT | 1.000–2 | — |
| input_blocks.6 | FLOAT | 1.000–2 | — |
| input_blocks.7 | FLOAT | 1.000–2 | — |
| input_blocks.8 | FLOAT | 1.000–2 | — |
| middle_block.0 | FLOAT | 1.000–2 | — |
| middle_block.1 | FLOAT | 1.000–2 | — |
| middle_block.2 | FLOAT | 1.000–2 | — |
| output_blocks.0 | FLOAT | 1.000–2 | — |
| output_blocks.1 | FLOAT | 1.000–2 | — |
| output_blocks.2 | FLOAT | 1.000–2 | — |
| output_blocks.3 | FLOAT | 1.000–2 | — |
| output_blocks.4 | FLOAT | 1.000–2 | — |
| output_blocks.5 | FLOAT | 1.000–2 | — |
| output_blocks.6 | FLOAT | 1.000–2 | — |
| output_blocks.7 | FLOAT | 1.000–2 | — |
| output_blocks.8 | FLOAT | 1.000–2 | — |
| out. | FLOAT | 1.000–2 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |