Nodes/ComfyUI XS DARE TIES/🧬 XS · DARE TIES Model Stack
ComfyUI Node

🧬 XS · DARE TIES Model Stack

Building the stack that feeds a DARE TIES merge

By x-stride·Created 4 months ago·Updated 4 months ago· 0
🧬 XS · DARE TIES Model Stack
  • model_stack
  • profile_1
  • profile_2
  • profile_3
  • model_stack
ckpt_name_1
model_weight_11.00
clip_weight_11.00
enabled_1true
ckpt_name_2
model_weight_21.00
clip_weight_21.00
enabled_2true
ckpt_name_3
model_weight_31.00
clip_weight_31.00
enabled_3true

The DARE TIES Model Stack is the boring middle of the pack, and it's supposed to be. It doesn't load a single checkpoint and it doesn't merge anything - it just builds the shopping list of child checkpoints, their weights, and their per-block curves that DARE TIES Merge Models then consumes. Think of it as writing down who's in the blend before anyone starts cooking. If you're new to merging, this is also the least intimidating place to start, because nothing here can blow up your GPU.

How it works

The node gives you three slots. Each slot has four widgets:

  • ckpt_name_N - the child checkpoint, picked from everything in models/checkpoints. Set to "None" to skip the slot.
  • model_weight_N - how much this child's delta counts in the model merge. These are pre-normalization weights: with normalize_model_weights on in the Apply node (the default), all weights are rescaled to sum to 1.0. So 1.0 and 1.0 means two equal children; 2.0 and 1.0 means the first pulls twice as hard. It's a ratio, not an absolute.
  • clip_weight_N - the same idea for the text-encoder delta. Only used if you turn merge_clip on in Apply, which you probably shouldn't (SDXL CLIPs hate being merged).
  • enabled_N - a switch to mute a slot without deleting your settings.

The output is a DARE_TIES_MODEL_STACK list. The genuinely useful bit is that it's chainable: feed one stack node's output into the next node's model_stack input and the entries get prepended, so three-slot nodes chain into 3/6/9/12+ children. You don't need a special "9 child" variant - just stack the stacks.

Slots that are disabled, set to "None", or have both weights at zero are dropped from the list entirely. Everything else passes through with its name, weights, and any profile attached.

Wiring it up

The model_stack output has exactly two legal destinations in this pack: the model_stack input of DARE TIES Merge Models, and the model_stack input of the Stack Visualizer (which is free to hang off the same wire - perfect for previewing before a long merge).

Per-slot, there are optional profile_1/2/3 inputs. Plug a DARE TIES Profile node's output into profile_1 and that child's delta gets multiplied block-by-block across the 21 UNet blocks - e.g. a "transfer style only" curve so a child only affects style and color, not composition. No profile = flat 1.0 everywhere, which is exactly what the Apply node assumes.

Install

Via ComfyUI Manager, search "ComfyUI XS DARE TIES", or:

cd ComfyUI/custom_nodes
git clone https://github.com/x-stride/ComfyUI_XS_DARE_TIES

Restart ComfyUI. There's no requirements.txt and no model to download - the pack needs nothing beyond ComfyUI's own torch/numpy/Pillow. Your only job is having the child checkpoints on disk in models/checkpoints. Find the node under Advanced → model_merging → dare_ties.

The gotchas worth knowing

  • Order matters - but only downstream. The stack node itself is dumb list-building; it faithfully preserves order. The Apply node then binds DARE masks to slot index and runs TIES sign elections over the list, so reordering children genuinely changes a dare_delta/ties_delta merge. If you reshuffle and the output shifts, that's the math working as documented, not a bug.
  • Weights are ratios, not absolutes. Two children both at 1.0 with normalization on is a 50/50 blend, not "full strength each." To push a child harder than an equal share, raise its weight or drop normalize_model_weights in Apply.
  • Nothing loads here. If you wire this straight into a KSampler expecting a model, you'll get a type error and a confused afternoon. It's the children list, not the merge - the Apply node is the only place checkpoints actually load.

A beginner's start

Put your base in a Checkpoint Loader → reference inputs of Apply. In the stack, add two children you already like at weight 1.0 each. Run the Stack Visualizer first to see the blend, then hit Apply with merge_mode=dare_ties_delta, drop_rate=0.10, ties_density=0.50. Two children, equal shares, and the recommended recipe is the whole tutorial - the stack node was the easy part.

Categoryadvanced/model_merging/dare_ties

Inputs (16)

NameTypeDefaultDescription
ckpt_name_1COMBOChild checkpoint to mix into the reference. Set to 'None' to skip this slot.
model_weight_1FLOAT1.000–10Pre-normalization weight for this child. With normalize_*_weights=True in the Apply node, weights are rescaled so they sum to 1 across all stack entries.
clip_weight_1FLOAT1.000–10Pre-normalization weight for this child's CLIP/text-encoder delta. Only used when merge_clip is not 'off' in the Apply node.
enabled_1BOOLEANtrueDisable to skip this slot without changing its values. Disabled slots contribute nothing to the merge.
ckpt_name_2COMBOChild checkpoint to mix into the reference. Set to 'None' to skip this slot.
model_weight_2FLOAT1.000–10Pre-normalization weight for this child. With normalize_*_weights=True in the Apply node, weights are rescaled so they sum to 1 across all stack entries.
clip_weight_2FLOAT1.000–10Pre-normalization weight for this child's CLIP/text-encoder delta. Only used when merge_clip is not 'off' in the Apply node.
enabled_2BOOLEANtrueDisable to skip this slot without changing its values. Disabled slots contribute nothing to the merge.
ckpt_name_3COMBOChild checkpoint to mix into the reference. Set to 'None' to skip this slot.
model_weight_3FLOAT1.000–10Pre-normalization weight for this child. With normalize_*_weights=True in the Apply node, weights are rescaled so they sum to 1 across all stack entries.
clip_weight_3FLOAT1.000–10Pre-normalization weight for this child's CLIP/text-encoder delta. Only used when merge_clip is not 'off' in the Apply node.
enabled_3BOOLEANtrueDisable to skip this slot without changing its values. Disabled slots contribute nothing to the merge.
model_stackoptDARE_TIES_MODEL_STACKOptional upstream stack to extend. Entries from this input come first in the output list.
profile_1optDARE_TIES_PROFILEOptional UNet block curve for slot 1 (21 samples). Multiplies that child's delta per block.
profile_2optDARE_TIES_PROFILEOptional UNet block curve for slot 2.
profile_3optDARE_TIES_PROFILEOptional UNet block curve for slot 3.

Outputs (1)

NameTypeDescription
model_stackDARE_TIES_MODEL_STACKList of child checkpoints with model_weight, clip_weight, and optional profile for UNet shaping.