Files

83 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ComfyUI-ModelUtils
A collection of ComfyUI custom nodes for inspecting, modifying, merging, and creating model files. Supports Models, TextEncoders, LoRAs, Checkpoints, and Embeddings.
## Features
- **MetaKeys** – Inspect and display metadata and tensor keys from model files
- **RenameKeys** – Batch rename tensor keys using pattern matching
- **PruneKeys** – Remove unwanted layers/keys from models
- **Mergers** – Combine 2 or 3 models with configurable blend modes and ratios
- **LoRA Extraction** – Extract LoRA adapters from model pairs using various SVD rank selection methods (Fixed, Ratio, Quantile, Knee-detection, Frobenius-norm)
- **Diffusion Model Dtype Conversion** – Stream models to fp32, fp16, or bf16 while preserving excluded tensor dtypes
## Layer filters
Nodes with `exclude_patterns` or `skip_patterns` have an appended `include_mode` toggle
(off by default). Turn it on to process only layers matching that same field,
using the node's existing regex or glob syntax. An empty include filter selects
nothing. Nonmatches follow the node's usual exclusion behavior: preserve the
source/anchor layer for pattern-exclusion mergers, resize, or conversion; omit
it from analysis or extraction. LoRA Merge to Model retains its existing skip
semantics: nonmatching base tensors are omitted from the saved model, while
guarded low-bit base tensors are always preserved. Its filter uses regex only.
`discard_patterns`, where available, still takes precedence.
## Example Workflows
### Per-layer parameters
Connect **Layer Parameter Configuration** to `layer_parameters` on standard
two/three-input mergers, extraction nodes, or LoRA resize nodes. For example,
fixed extraction accepts `(blocks\.4[589]\.attn\.qkv_proj) a:64 b:32 c:0.99 d:0`.
Short aliases and full names, with whitespace or comma separators, are supported.
The configurator's documentation output lists every method's bindings and bounds.
Only explicitly assigned values override the receiving node; other settings and
existing filters still apply. Overlapping rules and rules matching no target
layer fail before streaming or writing. LoRA patterns target the existing
normalized logical layer names, not individual factor/alpha suffixes.
<p align="center">
<img src="assets/GetMetaAndkeys.png" width="400" alt="Get Meta and Keys">
<br>
<a href="example_workflows/GetMetaAndkeys.json">📥 GetMetaAndkeys.json</a>
</p>
---
<p align="center">
<img src="assets/LoRA_Extract_nodes.png" width="400" alt="LoRA Extraction Nodes">
<br>
<a href="example_workflows/LoRA_Extract_nodes.json">📥 LoRA_Extract_nodes.json</a>
</p>
---
<p align="center">
<img src="assets/Merging_Examples.png" width="400" alt="Merging Examples">
<br>
<a href="example_workflows/Merging_Examples.json">📥 Merging_Examples.json</a>
</p>
---
<p align="center">
<img src="assets/RenameKeysInModel.png" width="400" alt="Rename Keys in Model">
<br>
<a href="example_workflows/RenameKeysInModel.json">📥 RenameKeysInModel.json</a>
</p>
## Acknowledgements
The LoRA extraction functionality was inspired by and references the excellent work from:
- [kohya-ss/sd-scripts](https://github.com/kohya-ss/sd-scripts) – Training scripts for Stable Diffusion
- [KohakuBlueleaf/LyCORIS](https://github.com/KohakuBlueleaf/LyCORIS) – Advanced LoRA techniques
- [bmaltais/kohya_ss](https://github.com/bmaltais/kohya_ss) – Windows-friendly GUI for sd-scripts
## License
See [LICENSE](LICENSE) for details.