Nodes/Model Utility Toolkit/CWB Merge Embeddings (2 Models)
ComfyUI Node

CWB Merge Embeddings (2 Models)

Merge two embeddings into one vector file

By silveroxides·Created about a year ago·Updated about 24 hours ago· 14
CWB Merge Embeddings (2 Models)
  • cwb_config
  • output_filename
  • documentation
  • cwb_report
execution_mode
model_a
model_b
cwb_presetbalanced_idx_mean
mismatch_modeskip
output_filenamecwb_merged_2_embedding
save_dtype
process_device
exclude_patterns
discard_patterns
glob_patternsfalse
lazy_loadtrue
force_clear_cachetrue
override_dtypefalse

Embeddings - the small textual-inversion vector files - don't get merged much, and when they do, most people just average the files blindly. This is the CWB version, which means the blend adapts per token instead of being a flat mean. It's niche, but if you've ever wanted the concept understanding of two embeddings in one file, this is the node.

How it works

Model A is the anchor (metadata and preservation reference); Model B is the second equal-prior contributor. For each token vector, CWB computes a consensus, measures each embedding's similarity to it, and weights contributions by that similarity. Embeddings are a special case in the CWB family for a real reason: their token rows don't have a guaranteed semantic order, so the merge uses the longest compatible first dimension as its alignment reference, and the preset defaults to index alignment (balanced_idx_mean) with a similarity-alignment alternative (balanced_sim_mean) available if you believe the two files' tokens don't line up by position.

The output is an embedding file written to models/embeddings. You load it the way you load any embedding - reference embedding:your_filename in a prompt (or wire it through an embedding-aware text encoder). Missing or shape-incompatible tokens are handled by mismatch_mode: skip preserves the anchor, zeros inserts a zero contribution, error aborts.

Inputs that matter

  • execution_mode - MERGE writes the file; DOCUMENTATION ONLY returns the CWB reference without loading.
  • model_a / model_b - the two embeddings.
  • cwb_preset (default balanced_idx_mean) - the embedding preset registry. balanced_sim_mean and robust_sim_medn switch to cosine-similarity alignment for files whose tokens may be in different orders; the _medn variants use median consensus.
  • output_filename (default cwb_merged_2_embedding) - written to models/embeddings.
  • save_dtype / override_dtype - dtype for generated tensors.
  • exclude_patterns / discard_patterns / glob_patterns - regex (or glob) lists.
  • lazy_load (default on), force_clear_cache (default on), process_device - the usual.

Outputs

output_filename (the written file), documentation (the CWB reference), and cwb_report (per-token merge detail).

Why you'd reach for it

Two embeddings trained on the same concept by different people, and you want the combined understanding. Or you've been using two related embeddings (say, a broad style and a narrow refinement) and want one file to reference. It's a batch node - merge, then test by prompting with embedding: and eyeballing.

Install

Part of Model Utility Toolkit (silveroxides/ComfyUI-ModelUtils). ComfyUI Manager → search "Model Utility Toolkit", or:

cd ComfyUI/custom_nodes
git clone https://github.com/silveroxides/ComfyUI-ModelUtils

Restart ComfyUI. Real dependency: unifiedefficientloader (UEL). Keep ComfyUI current - newer extension API, experimental CWB nodes.

CategoryModelUtils/Merging

Inputs (15)

NameTypeDefaultDescription
execution_modeCOMBOMERGE writes a new safetensors file. DOCUMENTATION ONLY returns the CWB reference without loading or merging inputs.
model_aCOMBOPrimary contributor and preservation anchor. Supplies output metadata and anchors shared tensor names and shapes.
model_bCOMBOSecond equal-prior contributor. CWB derives its effective per-vector influence from consensus similarity.
cwb_presetCOMBObalanced_idx_meanUse-case preset. Name suffixes expose alignment, consensus, norm rescaling, DSC, soft comfort bandpass, and prefix preservation. A connected CWB Config overrides it completely.
mismatch_modeCOMBOskipFor missing or incompatible anchored inputs: skip preserves the anchor, zeros inserts a zero contribution where possible, and error aborts. A lone secondary-only tensor is copied unchanged.
output_filenameSTRINGcwb_merged_2_embeddingFilename without extension. The result is atomically written to this model category under ComfyUI's models directory.
save_dtypeCOMBORequested dtype for generated floating tensors. Participating FP32 inputs keep a result FP32 unless Override Dtype is enabled.
process_deviceCOMBODevice used for per-layer FP32 CWB arithmetic. A CUDA out-of-memory error retries only the affected layer on CPU.
exclude_patternsSTRINGOne pattern per line. Matching layers are preserved from the anchor instead of merged. Uses regex unless Glob Patterns is enabled.
discard_patternsSTRINGOne pattern per line. Matching tensors or logical LoRA groups are omitted from the output. Uses regex unless Glob Patterns is enabled.
glob_patternsBOOLEANfalseInterpret exclude and discard entries as shell-style glob patterns instead of regular expressions.
lazy_loadBOOLEANtrueUse UEL low-memory loading so tensors are read and released per work unit instead of retaining the complete inputs in RAM.
force_clear_cacheBOOLEANtrueRun Python garbage collection and clear the CUDA allocator cache before each layer. Reduces retained memory but can substantially slow merging.
override_dtypeBOOLEANfalseForce generated tensors to save_dtype; guarded tensors and enabled 1D direct diffs are exempt.
cwb_configoptCWB_CONFIGOptional settings from CWB Custom Configuration. When connected, it completely overrides the selected preset.

Outputs (3)

NameTypeDescription
output_filename*
documentationSTRING
cwb_reportSTRING