LZ Merge Recipe Manual
Hand-build a 19-block merge recipe with one slider per layer
- recipe
Model merging is how a big slice of the CivitAI catalog is made: average the weights of two checkpoints and you get a third. Most merge tools work on a block-level recipe - different weights for the input layers, the middle, and the output blocks - and that recipe is normally a long comma-separated string you type by hand and hope has the right number of values. LZ Merge Recipe Manual gives you a slider for every block instead, and emits the correctly-ordered, correctly-formatted string for you.
How it works
Nineteen blocks, each with its own FLOAT widget: IN00–IN08 (the nine input blocks), M00 (the single middle block), and OUT00–OUT08 (the nine output blocks). There's also a step dropdown (0.01 / 0.05 / 0.1 / 0.25 / 0.5 / 1.0) that sets the snapping granularity for all the sliders - pick coarser steps for exploring, finer ones for precise tuning.
The node emits one recipe STRING in the exact order merge tools expect: IN00,IN01,…,IN08,M00,OUT00,…,OUT08. It also rounds every value to your chosen step so the recipe stays on a clean grid, and formats the output to match the step's precision (two decimals for fine steps, one for coarse) - so the string you paste into a merge node is valid rather than a pile of floating-point junk.
How it fits
The deeper context, briefly: merges are where checkpoint lineage comes from, and most community checkpoints are weight-averaged. The block weighting is the dial that decides which parent wins where - input blocks govern early features (edges, structure), the middle block is the bridge, output blocks govern the final texture and finish. If that sounds abstract, it is, until you've merged two models and noticed one's style dominates the face and the other's dominates the background. This node is just the tool for expressing that intuition in numbers, plus its two siblings: LZMergeRecipeRandom for a lottery ticket and LZMergeRecipeRandomAdvanced for controlled randomness.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/liz-ils/ComfyUI-LZNodes
restart → MyCustomNodes/Merge. ComfyUI Manager: ComfyUI-LZNodes. No extra dependencies - pure Python.
Where people get burned
- It produces a recipe string, not a merge. The output feeds a model-merge node or a merge tool; this node doesn't load or merge anything itself. That "it's just a string" moment is the most common first-run confusion.
- All values default to 0.5, which is a flat 50/50 - a fine starting point, but easy to forget you're emitting 0.5 across the board when you meant to set specific blocks.
- Recipes are model-specific. A recipe tuned for merging two specific checkpoints won't transfer meaningfully to a different pair. The string is the whole recipe, though - keep the parents' names next to it, or the recipe is just 19 numbers.
- Step rounding can surprise: set step 0.25 and type 0.3, and the emitted value snaps to 0.25 or 0.5. The slider and the string reflect the snapped value, but the widget may briefly show your typed 0.3.
It's a niche but genuinely useful tool for the merge-curious. If you've only ever downloaded finished checkpoints, this is a gentle on-ramp to making your own.
Inputs (20)
| Name | Type | Default | Description |
|---|---|---|---|
| step | COMBO | 0.1 | 6 options: 0.01, 0.05, 0.1, 0.25, 0.5, 1 |
| IN00opt | FLOAT | 0.50–1 | — |
| IN01opt | FLOAT | 0.50–1 | — |
| IN02opt | FLOAT | 0.50–1 | — |
| IN03opt | FLOAT | 0.50–1 | — |
| IN04opt | FLOAT | 0.50–1 | — |
| IN05opt | FLOAT | 0.50–1 | — |
| IN06opt | FLOAT | 0.50–1 | — |
| IN07opt | FLOAT | 0.50–1 | — |
| IN08opt | FLOAT | 0.50–1 | — |
| M00opt | FLOAT | 0.50–1 | — |
| OUT00opt | FLOAT | 0.50–1 | — |
| OUT01opt | FLOAT | 0.50–1 | — |
| OUT02opt | FLOAT | 0.50–1 | — |
| OUT03opt | FLOAT | 0.50–1 | — |
| OUT04opt | FLOAT | 0.50–1 | — |
| OUT05opt | FLOAT | 0.50–1 | — |
| OUT06opt | FLOAT | 0.50–1 | — |
| OUT07opt | FLOAT | 0.50–1 | — |
| OUT08opt | FLOAT | 0.50–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| recipe | STRING | — |