From edb973d572ca1ec0cf2da3d871f558357c2fd551 Mon Sep 17 00:00:00 2001 From: Terpentine Date: Mon, 25 May 2026 17:14:56 +0300 Subject: [PATCH] small update --- README.md | 4 + __init__.py | 24 +- assets/saving.jpg | Bin 0 -> 157554 bytes config.py | 13 +- easy_lora_merger.py | 116 ++++++++-- easy_text_display.py | 114 ++++++++++ engine/checkpoint_normalizer.py | 14 +- engine/gguf_writer.py | 2 +- engine/key_mapper.py | 6 +- engine/lora_studio_converter.py | 346 ++++++++++++++++++----------- engine/musubi_checkpoint_studio.py | 22 +- js/easy_lora_merger.js | 124 +++++++++++ utils.py | 4 +- 13 files changed, 621 insertions(+), 168 deletions(-) create mode 100644 assets/saving.jpg create mode 100644 easy_text_display.py diff --git a/README.md b/README.md index 85c2bf2..711a378 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,7 @@ Console output keeps you informed at every step without overwhelming. - **Install:** Drop into `ComfyUI/custom_nodes/` and restart ComfyUI. - **Explore:** Drag [`assets/nodes.png`](assets/nodes.png) into the workflow area to see the suite in action. - **Experiment:** Connect a *Easy LoRA Merger* → *Easy LoRA Baker* pipeline, or use *Easy Checkpoint Studio* to shrink a 12GB checkpoint to FP8. +- **Optional — GGUF export:** Install `pip install gguf` to enable GGUF output format in Easy Checkpoint Studio. GGUF files are loaded with the [ComfyUI-GGUF](https://github.com/city96/ComfyUI-GGUF) custom node. All other Easy LoRA Merger nodes work without either dependency. - **Feedback:** Open an issue on GitHub — contributions and ideas welcome. --- @@ -128,8 +129,11 @@ Used by: **Easy Checkpoint Studio** | `int8` | Explicit INT8 quantization, 1 byte/param | | `int8_convrot` | INT8 with convolution rotation handling | | `svd_only` | SVD compression only, no dtype conversion | +| `gguf_q8_0` / `gguf_q5_0` / `gguf_q4_0` | Block‑wise GGUF quantization — requires `gguf` Python package (`pip install gguf`). Output loads with [ComfyUI-GGUF](https://github.com/city96/ComfyUI-GGUF) nodes. | > 💡 **Tip:** For everyday use, just leave it on `auto`. The nodes will pick the best format for your hardware automatically. +> +> ⚠️ **Note:** The `gguf` package is **optional**. All nodes work without it — GGUF output is only available in Easy Checkpoint Studio when `gguf` is installed. If missing, GGUF options are hidden from the dropdown and the Checkpoint Studio loads gracefully without them. --- diff --git a/__init__.py b/__init__.py index 9ff73a9..7a2137b 100644 --- a/__init__.py +++ b/__init__.py @@ -1,19 +1,33 @@ +""" +Easy LoRA Merger — ComfyUI custom node pack. +Re-exports all node class/display-name mappings and registers the SmartModelBaker. +""" + from .easy_lora_merger import NODE_CLASS_MAPPINGS as ELM_CLASS_MAPPINGS from .easy_lora_merger import NODE_DISPLAY_NAME_MAPPINGS as ELM_DISPLAY_MAPPINGS -from .baker_node import SmartModelBaker # This line is the bridge that tells ComfyUI to load your JS files WEB_DIRECTORY = "./js" -# Merge mappings: start with existing, add SmartModelBaker +# ── SmartModelBaker (guarded) ────────────────────────────────────────────── +try: + from .baker_node import SmartModelBaker + _BAKER_AVAILABLE = True +except ImportError as _e: + SmartModelBaker = None # type: ignore[assignment] + _BAKER_AVAILABLE = False + print(f"⚠️ Easy LoRA Merger: SmartModelBaker not available ({_e})") + +# Merge mappings: start with existing, add SmartModelBaker if available NODE_CLASS_MAPPINGS = { **ELM_CLASS_MAPPINGS, - "SmartModelBaker": SmartModelBaker, } - NODE_DISPLAY_NAME_MAPPINGS = { **ELM_DISPLAY_MAPPINGS, - "SmartModelBaker": "🔥 Easy LoRA Baker", } +if _BAKER_AVAILABLE: + NODE_CLASS_MAPPINGS["SmartModelBaker"] = SmartModelBaker + NODE_DISPLAY_NAME_MAPPINGS["SmartModelBaker"] = "🔥 Easy LoRA Baker" + __all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS', 'WEB_DIRECTORY'] diff --git a/assets/saving.jpg b/assets/saving.jpg new file mode 100644 index 0000000000000000000000000000000000000000..39eef72bcb2bb5aa175cfc7208ed3de9efb8f410 GIT binary patch literal 157554 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 j_m tuple: + """ + Forward the text to the UI and pass it through the output socket. + + The ``{"ui": {"text": …}}`` payload is picked up by the JavaScript + extension which renders the content as a read‑only multiline widget + on the node. + """ + # ── Persist the text into the workflow JSON so it survives saves ── + if unique_id is not None and extra_pnginfo is not None: + try: + # ComfyUI may pass extra_pnginfo as a list [{"workflow": …}] + # or as a bare dict {"workflow": …} depending on the version. + workflow_container = ( + extra_pnginfo[0] + if isinstance(extra_pnginfo, list) + else extra_pnginfo + ) + workflow = ( + workflow_container.get("workflow") + if isinstance(workflow_container, dict) + else None + ) + if workflow is None: + print( + "⚠️ EasyTextDisplay: extra_pnginfo has no 'workflow' key " + "— cannot persist text" + ) + else: + node = next( + ( + x + for x in workflow["nodes"] + if str(x["id"]) == str(unique_id) + ), + None, + ) + if node: + node["widgets_values"] = [text] + except Exception as exc: + print(f"⚠️ EasyTextDisplay: failed to persist text ({exc})") + + return {"ui": {"text": [text]}, "result": (text,)} + + +# ===================================================================== +# Registry helpers (used by easy_lora_merger.py) +# ===================================================================== +NODE_CLASS_MAPPINGS = { + "EasyTextDisplay": EasyTextDisplay, +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "EasyTextDisplay": "📋 Easy Text Display", +} diff --git a/engine/checkpoint_normalizer.py b/engine/checkpoint_normalizer.py index 5f639aa..7a3876e 100644 --- a/engine/checkpoint_normalizer.py +++ b/engine/checkpoint_normalizer.py @@ -28,10 +28,18 @@ CHECKPOINT_ARCHITECTURES = { ["net.blocks"], # Also detect by net.final_layer as secondary marker ["net.final_layer"], + # Detect bare blocks.* keys without net. prefix (common in fine-tuned + # checkpoints). Uses AND logic: both "blocks." and "adaln_modulation" + # must exist in the keyset. "blocks." alone would also match SDXL's + # input_blocks.* / output_blocks.* and Flux's double_blocks.*, so + # "adaln_modulation" narrows it to Anima-specific key patterns. + ["blocks.", "adaln_modulation"], ], - "strip_prefixes": [], - "canonical_form": "with net. prefix — keys like net.blocks.0.adaln_modulation_cross_attn.1.weight", - "description": "Anima / Anime Diffusion (FLOW-based model with net.blocks architecture)", + # Strip "net." prefix so that net.blocks.* and bare blocks.* keys + # normalize to the same canonical form for matching. + "strip_prefixes": ["net."], + "canonical_form": "bare blocks. prefix — keys like blocks.0.adaln_modulation_cross_attn.1.weight", + "description": "Anima / Anime Diffusion (FLOW-based model with blocks architecture)", }, "flux": { "detect": ["double_blocks", "single_blocks"], diff --git a/engine/gguf_writer.py b/engine/gguf_writer.py index 056993b..8f97e65 100644 --- a/engine/gguf_writer.py +++ b/engine/gguf_writer.py @@ -94,7 +94,7 @@ GGUF_QTYPE_LABELS = { } # File type for LlamaFileType metadata -_GGUF_QTYPE_TO_FILE_TYPE = { +_GGUF_QTYPE_TO_FILE_TYPE = {} if gguf is None else { gguf.GGMLQuantizationType.Q8_0: gguf.LlamaFileType.MOSTLY_Q8_0, gguf.GGMLQuantizationType.Q5_0: gguf.LlamaFileType.MOSTLY_Q5_0, gguf.GGMLQuantizationType.Q4_0: gguf.LlamaFileType.MOSTLY_Q4_0, diff --git a/engine/key_mapper.py b/engine/key_mapper.py index 631094e..ab024fc 100644 --- a/engine/key_mapper.py +++ b/engine/key_mapper.py @@ -308,11 +308,15 @@ _ARCH_KEY_RULES: Dict[str, Dict] = { }, # ── Anima ──────────────────────────────────────────────────────────── # Anima: net.blocks.xxx → diffusion_model.blocks.xxx + # After checkpoint_normalizer strips "net." prefix, keys are bare + # blocks.xxx. The bare_paths rule catches these normalized keys. "anima": { "checkpoint_prefixes": [ ("net.blocks.", "diffusion_model.blocks."), ], - "bare_paths": [], + "bare_paths": [ + "blocks.", # normalized bare blocks.* → diffusion_model.blocks.* + ], "lora_prefix": "diffusion_model.", }, # ── Additional TE/CLIP prefix patterns ─────────────────────────────── diff --git a/engine/lora_studio_converter.py b/engine/lora_studio_converter.py index 2f7cbaa..6bb4c2b 100644 --- a/engine/lora_studio_converter.py +++ b/engine/lora_studio_converter.py @@ -24,6 +24,8 @@ from ..utils import ( categorize_key, DeviceManager, ProgressTracker, + comfyui_yield, + cleanup_memory, ) from .klein_normalizer import ( detect_lora_format, @@ -193,9 +195,16 @@ class MusubiLoraConverter: key_str = str(cache_key).encode('utf-8') return hashlib.md5(key_str).hexdigest() - def _apply_svd_compression(self, normalized_sd, compression_mode, target_rank): + def _apply_svd_compression(self, normalized_sd, compression_mode, target_rank, device=None): """ - Apply SVD compression to normalized state dict. + Apply SVD compression to normalized state dict using batched SVD. + + LoRA layers within a model architecture typically share dimensions + (e.g., all DiT blocks have QKV projections of the same size). + We group pairs by (out_features, in_features) and call + torch.linalg.svd once per group with a batched 3D tensor, + dramatically reducing GPU kernel launch overhead. + Returns (compressed_sd, compression_info) where compression_info dict contains: - compression_mode - original_total_params @@ -235,137 +244,223 @@ class MusubiLoraConverter: layer_count = 0 skipped_conv = 0 - # Progress indicator — replace 10% console with ComfyUI ProgressBar - total_pairs = len(pairs) - with ProgressTracker(total=total_pairs, desc="[SVD] Processing layers") as svd_progress: + # ================================================================ + # PHASE 1: Analyze all pairs, detect orientation, group by shape + # ================================================================ + # Groups are keyed by (out_features, in_features) — pairs sharing + # identical matrix dimensions are processed together in one batched + # SVD call, which is dramatically faster than one-by-one on GPU. + shape_groups = {} # {(out, in): [(dk, uk, base, transposed, rank), ...]} + conv_pairs = [] # handled separately (no SVD) + skipped_mismatch = [] # rank mismatch warnings - for i, (dk, uk, base) in enumerate(pairs): - down = compressed_sd[dk] - up = compressed_sd[uk] + for dk, uk, base in pairs: + down = compressed_sd[dk] + up = compressed_sd[uk] - # Skip convolutional layers (spatial dimensions >2) to avoid shape errors - if down.ndim > 2 or up.ndim > 2: - skipped_conv += 1 - print(f"ℹ️ Skipping convolutional layer {base} (shape {down.shape}, {up.shape})") - # Ensure tensors are contiguous for safetensors - if not down.is_contiguous(): - compressed_sd[dk] = down.contiguous() - if not up.is_contiguous(): - compressed_sd[uk] = up.contiguous() - continue + # Skip convolutional layers (spatial dimensions >2) to avoid shape errors + if down.ndim > 2 or up.ndim > 2: + conv_pairs.append((dk, uk, base)) + # Ensure tensors are contiguous for safetensors + if not down.is_contiguous(): + compressed_sd[dk] = down.contiguous() + if not up.is_contiguous(): + compressed_sd[uk] = up.contiguous() + continue - # Detect orientation: down shape (out_features, rank) or (rank, out_features) - transposed = False - # Check both possible orientations (ambiguous if both conditions hold) - if down.shape[1] == up.shape[0] and down.shape[0] == up.shape[1]: - # Both orientations possible (square matrices). Decide based on typical LoRA rank being smaller dimension. - # Standard orientation: rank = down.shape[1], out_features = down.shape[0], in_features = up.shape[1] - # Transposed orientation: rank = down.shape[0], out_features = down.shape[1], in_features = up.shape[0] - rank_standard = down.shape[1] - rank_transposed = down.shape[0] - # Choose orientation where rank is smaller than out_features and in_features (typical LoRA) - # If both satisfy, prefer standard orientation. - if rank_standard < down.shape[0] and rank_standard < up.shape[1]: - # standard orientation is correct - out_features, rank = down.shape - rank2, in_features = up.shape - else: - # transposed orientation is correct - down = down.T - up = up.T - out_features, rank = down.shape - rank2, in_features = up.shape - transposed = True - elif down.shape[1] == up.shape[0]: - # standard orientation: down (out_features, rank), up (rank, in_features) - out_features, rank = down.shape - rank2, in_features = up.shape - elif down.shape[0] == up.shape[1]: - # transposed orientation: down (rank, out_features), up (in_features, rank) - # transpose to standard orientation for processing - down = down.T - up = up.T + # Detect orientation: down shape (out_features, rank) or (rank, out_features) + transposed = False + if down.shape[1] == up.shape[0] and down.shape[0] == up.shape[1]: + # Both orientations possible (square matrices). Decide based on typical LoRA rank being smaller dimension. + rank_standard = down.shape[1] + if rank_standard < down.shape[0] and rank_standard < up.shape[1]: out_features, rank = down.shape rank2, in_features = up.shape + else: + out_features, rank = down.T.shape + rank2, in_features = up.T.shape transposed = True - else: - # mismatch, skip this pair with warning - print(f"⚠️ Rank mismatch {down.shape} vs {up.shape} for pair {dk}, {uk}; skipping") - continue - assert rank == rank2, f"Rank mismatch {rank} != {rank2} for pair {dk}, {uk}" - - # Compute product W = down @ up (out_features, in_features) - W = down.float() @ up.float() - - # SVD - max_singular_values = min(out_features, in_features) - if compression_mode in ('auto-fast', 'manual'): + elif down.shape[1] == up.shape[0]: + out_features, rank = down.shape + rank2, in_features = up.shape + elif down.shape[0] == up.shape[1]: + out_features, rank = down.T.shape + rank2, in_features = up.T.shape + transposed = True + else: + skipped_mismatch.append((dk, uk, base)) + continue + + assert rank == rank2, f"Rank mismatch {rank} != {rank2} for pair {dk}, {uk}" + + # Group by (out_features, in_features) for batched SVD + shape_key = (out_features, in_features) + if shape_key not in shape_groups: + shape_groups[shape_key] = [] + shape_groups[shape_key].append((dk, uk, base, transposed, rank)) + + if skipped_mismatch: + for dk, uk, base in skipped_mismatch: + print(f"⚠️ Rank mismatch for pair {dk}, {uk}; skipping") + + # ================================================================ + # PHASE 2: Micro-batched SVD per shape group + # ================================================================ + # Large shape groups (e.g., 105 identical QKV projections in DiT models) + # produce W = down @ up matrices of size (out_features, in_features). + # For 4096×4096 W, stacking ALL 105 into one W_batch would consume + # ~7 GB + SVD intermediates — exceeding most consumer GPUs. + # + # Instead, process in micro-batches of SVD_MICRO_BATCH pairs each. + # This caps peak VRAM while still amortizing kernel launch overhead. + SVD_MICRO_BATCH = 8 # pairs per batched SVD call + total_pairs = len(pairs) + + with ProgressTracker(total=total_pairs, desc="[SVD] Processing layers") as svd_progress: + + for (out_features, in_features), group in shape_groups.items(): + group_size = len(group) + + # Process this shape group in micro-batches to cap peak VRAM + for start_idx in range(0, group_size, SVD_MICRO_BATCH): + micro_batch = group[start_idx:start_idx + SVD_MICRO_BATCH] + mb_size = len(micro_batch) + + # ── Step 1: Compute W matrices for this micro-batch ── + W_list = [] + for dk, uk, base, transposed, rank in micro_batch: + down = compressed_sd[dk] + up = compressed_sd[uk] + + # On-demand GPU transfer (lazy, per-pair) + down_on_gpu = False + up_on_gpu = False + if device is not None and down.device != device: + down = down.to(device=device) + down_on_gpu = True + if device is not None and up.device != device: + up = up.to(device=device) + up_on_gpu = True + + if transposed: + W = down.T.float() @ up.T.float() + else: + W = down.float() @ up.float() + + # Free GPU copies of down/up immediately — no longer needed + if down_on_gpu: + del down + if up_on_gpu: + del up + + W_list.append(W) + + # ── Step 2: Batched SVD for this micro-batch ── if compression_mode == 'auto-fast': - # randomized low-rank SVD (fast): compute up to original rank - q = min(rank, max_singular_values) + # Randomized SVD (fast): compute only top-q singular values. + # For LoRA, W = down @ up has rank <= training rank. + # q = rank + 10 oversampling ensures >99.9% energy capture. + pair_rank = micro_batch[0][4] # original training rank + q = min(pair_rank + 10, out_features, in_features) + q = max(q, 1) + if mb_size == 1: + W = W_list[0] + U, S, V = torch.svd_lowrank(W, q=q) + Vh = V.mT # svd_lowrank returns V; convert to Vh convention + U_batch, S_batch, Vh_batch = U.unsqueeze(0), S.unsqueeze(0), Vh.unsqueeze(0) + del W + else: + W_batch = torch.stack(W_list, dim=0) + del W_list + U_batch, S_batch, V_batch = torch.svd_lowrank(W_batch, q=q) + Vh_batch = V_batch.mT # convert to Vh convention + del W_batch else: - # manual target rank: ensure we capture at least target_rank singular values - q = min(max(rank, target_rank), max_singular_values) - q = max(q, 1) - U, S, V = torch.svd_lowrank(W, q=q, niter=4) - Vh = V.T # convert to (q, n) format consistent with linalg.svd - else: - # auto-full, original, or other (full SVD) - U, S, Vh = torch.linalg.svd(W, full_matrices=False) - - # Determine target rank - if compression_mode == 'original': - k = rank - elif compression_mode == 'manual': - k = min(target_rank, rank) - k = max(k, 1) - else: # auto-fast or auto-full - # compute cumulative energy - total_energy = torch.sum(S ** 2) - cumulative = torch.cumsum(S ** 2, dim=0) - # find smallest k where cumulative >= 0.95 * total_energy - k = torch.searchsorted(cumulative, 0.95 * total_energy).item() + 1 - k = min(k, rank) - k = max(k, 1) - - # Truncate and re‑factorize - sqrt_Sk = torch.sqrt(S[:k]) - down_new = (U[:, :k] * sqrt_Sk).contiguous() # (out_features, k) - up_new = (sqrt_Sk[:, None] * Vh[:k, :]).contiguous() # (k, in_features) - # Cast back to original dtype - down_new = down_new.to(dtype=down.dtype) - up_new = up_new.to(dtype=up.dtype) - - # Update state dict - if transposed: - down_new = down_new.T.contiguous() - up_new = up_new.T.contiguous() - compressed_sd[dk] = down_new - compressed_sd[uk] = up_new - - # Update alpha if present - alpha_key = f"{base}.alpha" - if alpha_key in compressed_sd: - alpha = compressed_sd[alpha_key] - # Alpha scaling formula: new_alpha = old_alpha * (k / rank) - # Alpha may be scalar tensor or float; ensure tensor - alpha = alpha * (k / rank) - compressed_sd[alpha_key] = alpha - - # Statistics - total_original_params += out_features * rank + rank * in_features - total_compressed_params += out_features * k + k * in_features - rank_sum += k - layer_count += 1 + # Exact SVD (auto-full, original, manual) + if mb_size == 1: + W = W_list[0] + U, S, Vh = torch.linalg.svd(W, full_matrices=False) + U_batch, S_batch, Vh_batch = U.unsqueeze(0), S.unsqueeze(0), Vh.unsqueeze(0) + del W # free single W immediately + else: + W_batch = torch.stack(W_list, dim=0) # (B, M, N) + del W_list # free list before SVD to save memory + U_batch, S_batch, Vh_batch = torch.linalg.svd(W_batch, full_matrices=False) + del W_batch # free stacked W immediately after SVD + + # ── Step 3: Process results (truncate and refactorize) ── + for i, (dk, uk, base, transposed, rank) in enumerate(micro_batch): + S = S_batch[i] + U = U_batch[i] + Vh = Vh_batch[i] + + # Determine target rank + if compression_mode == 'original': + k = rank + elif compression_mode == 'manual': + k = min(target_rank, rank) + k = max(k, 1) + else: # auto-fast or auto-full (same 95% energy threshold) + total_energy = torch.sum(S ** 2) + cumulative = torch.cumsum(S ** 2, dim=0) + k = torch.searchsorted(cumulative, 0.95 * total_energy).item() + 1 + k = min(k, rank) + k = max(k, 1) + + # Truncate and re-factorize + sqrt_Sk = torch.sqrt(S[:k]) + down_new = (U[:, :k] * sqrt_Sk).contiguous() # (out_features, k) + up_new = (sqrt_Sk[:, None] * Vh[:k, :]).contiguous() # (k, in_features) + + # Cast back to original dtype + down_dtype = compressed_sd[dk].dtype + up_dtype = compressed_sd[uk].dtype + down_new = down_new.to(dtype=down_dtype) + up_new = up_new.to(dtype=up_dtype) + + if transposed: + down_new = down_new.T.contiguous() + up_new = up_new.T.contiguous() + + compressed_sd[dk] = down_new + compressed_sd[uk] = up_new + + # Update alpha if present + alpha_key = f"{base}.alpha" + if alpha_key in compressed_sd: + alpha = compressed_sd[alpha_key] + alpha = alpha * (k / rank) + compressed_sd[alpha_key] = alpha + + # Statistics + total_original_params += out_features * rank + rank * in_features + total_compressed_params += out_features * k + k * in_features + rank_sum += k + layer_count += 1 + svd_progress += 1 + + # Free SVD result tensors for this micro-batch + del U_batch, S_batch, Vh_batch + + # Yield to ComfyUI scheduler between micro-batches + comfyui_yield() + + # Clear GPU cache between shape groups + cleanup_memory() + + # Handle convolutional pairs (no SVD, just ensure contiguous) + for dk, uk, base in conv_pairs: + skipped_conv += 1 + print(f"ℹ️ Skipping convolutional layer {base} (shape {compressed_sd[dk].shape}, {compressed_sd[uk].shape})") svd_progress += 1 if skipped_conv > 0: print(f"ℹ️ Skipped {skipped_conv} convolutional layers (normal for SDXL/UNet).") - + # Compute size saved (assuming float32 = 4 bytes) size_saved_mb = (total_original_params - total_compressed_params) * 4 / (1024 * 1024) avg_final_rank = rank_sum / layer_count if layer_count > 0 else 0 - + compression_info = { 'compression_mode': compression_mode, 'original_total_params': total_original_params, @@ -373,7 +468,7 @@ class MusubiLoraConverter: 'size_saved_mb': size_saved_mb, 'final_rank': avg_final_rank, } - + return compressed_sd, compression_info RETURN_TYPES = ("LORA", "MODEL", "CLIP", "STRING", "STRING") @@ -429,21 +524,16 @@ class MusubiLoraConverter: """Apply SVD compression if requested. Modifies info in-place. Returns (normalized_sd, compression_info). + Tensors are moved to the target device on-demand inside + _apply_svd_compression (lazy, per-pair) instead of eagerly + moving all tensors upfront — reduces PCIe traffic. """ target_device = DeviceManager.get_device(device) - if compression_mode != "original" and target_device.type != "cpu": - moved_count = 0 - for k in list(normalized_sd.keys()): - if normalized_sd[k].device != target_device: - normalized_sd[k] = normalized_sd[k].to(device=target_device) - moved_count += 1 - if moved_count > 0: - print(f"\U0001f527 Moved {moved_count} tensors to {target_device} for SVD compression") if compression_mode != "original": print(f"\U0001f527 Applying SVD compression ({compression_mode})...") normalized_sd, compression_info = self._apply_svd_compression( - normalized_sd, compression_mode, target_rank + normalized_sd, compression_mode, target_rank, device=target_device ) info.update(compression_info) print(f"\U0001f527 Compression applied. Final rank: {compression_info.get('final_rank', 'N/A'):.1f}, " diff --git a/engine/musubi_checkpoint_studio.py b/engine/musubi_checkpoint_studio.py index 4dc2a9e..9a4c7e3 100644 --- a/engine/musubi_checkpoint_studio.py +++ b/engine/musubi_checkpoint_studio.py @@ -90,12 +90,22 @@ from .svd_quantizer import ( ) # GGUF writer — block-wise quantization output for ComfyUI-GGUF -from .gguf_writer import ( - GGUFSaveWriter, - gguf_arch_from_arch, - is_gguf_precision, - GGUF_SUPPORTED_ARCHS, -) +# Guarded: if the 'gguf' package is not installed, GGUF features are disabled +# but the rest of the node (precision conversion, stripping, SVD) still works. +try: + from .gguf_writer import ( + GGUFSaveWriter, + gguf_arch_from_arch, + is_gguf_precision, + GGUF_SUPPORTED_ARCHS, + ) +except ImportError: + GGUFSaveWriter = None + gguf_arch_from_arch = None # type: ignore[assignment] + is_gguf_precision = lambda fmt: False # Always returns False — clean fallback + GGUF_SUPPORTED_ARCHS: set = set() + print("⚠️ Checkpoint Studio: GGUF output disabled — 'gguf' package not installed. " + "Install it with: pip install gguf") try: from .metadata_factory import finalize_metadata diff --git a/js/easy_lora_merger.js b/js/easy_lora_merger.js index 94c5053..c0dcd55 100644 --- a/js/easy_lora_merger.js +++ b/js/easy_lora_merger.js @@ -1,4 +1,7 @@ import { app } from "../../scripts/app.js"; +import { ComfyWidgets } from "../../scripts/widgets.js"; + +console.log("[EasyLoRAMerger] JS module loaded — registering extensions", Date.now()); // Enhanced method descriptions const METHOD_DESCRIPTIONS = { @@ -210,3 +213,124 @@ app.registerExtension({ } } }); + +// ═══════════════════════════════════════════════════════════════════════ +// EasyTextDisplay — renders STRING input as a visible multiline widget +// +// Pattern follows proven ShowText (comfyui-custom-scripts) implementation: +// 1. Determine if there's a hidden converted-widget; clear from there +// 2. Create read-only widgets named "text_N" via ComfyWidgets +// 3. On execution: onExecuted → populate(message.text) +// 4. On workflow load: configure → store values, onConfigure → restore +// ═══════════════════════════════════════════════════════════════════════ +app.registerExtension({ + name: "EasyLoRA.TextDisplay", + async beforeRegisterNodeDef(nodeType, nodeData, app) { + if (nodeData.name === "EasyTextDisplay") { + console.log("[EasyLoRA.TextDisplay] Registering for EasyTextDisplay node"); + + /** + * Populate the node with read-only display widgets + * from the given text array. + * + * @param {string[]} text — e.g. ["hello world"] + */ + function populate(text) { + try { + if (this.widgets) { + // On older frontend versions there is a hidden converted-widget + const isConvertedWidget = +!!this.inputs?.[0]?.widget; + for (let i = isConvertedWidget; i < this.widgets.length; i++) { + this.widgets[i].onRemove?.(); + } + this.widgets.length = isConvertedWidget; + } + + // Guard: if text is undefined/null, there's nothing to display + if (text == null) { + console.warn("[EasyLoRA.TextDisplay] populate called with null/undefined text"); + return; + } + + const v = [...text]; + if (!v[0]) { + v.shift(); + } + for (let list of v) { + // Force list to be an array, not sure why sometimes it is/isn't + if (!(list instanceof Array)) list = [list]; + for (const l of list) { + const w = ComfyWidgets["STRING"]( + this, + "text_" + (this.widgets?.length ?? 0), + ["STRING", { multiline: true }], + app + ).widget; + w.inputEl.readOnly = true; + w.inputEl.style.opacity = 0.6; + w.value = l; + } + } + + // Auto-resize to fit content + requestAnimationFrame(() => { + const sz = this.computeSize(); + if (sz[0] < this.size[0]) sz[0] = this.size[0]; + if (sz[1] < this.size[1]) sz[1] = this.size[1]; + this.onResize?.(sz); + app.graph.setDirtyCanvas(true, false); + }); + } catch (err) { + console.error("[EasyLoRA.TextDisplay] populate() crashed:", err); + } + } + + // ── onExecuted: triggered when the node finishes running ── + const onExecuted = nodeType.prototype.onExecuted; + nodeType.prototype.onExecuted = function (message) { + try { + onExecuted?.apply(this, arguments); + console.log("[EasyLoRA.TextDisplay] onExecuted received:", JSON.stringify(message)); + populate.call(this, message?.text); + } catch (err) { + console.error("[EasyLoRA.TextDisplay] onExecuted crashed:", err); + } + }; + + // ── Persist text across workflow saves/loads ── + const VALUES = Symbol("textDisplayValues"); + const configure = nodeType.prototype.configure; + nodeType.prototype.configure = function () { + // Store unmodified widget values as they get removed on configure by new frontend + this[VALUES] = arguments[0]?.widgets_values; + return configure?.apply(this, arguments); + }; + + const onConfigure = nodeType.prototype.onConfigure; + nodeType.prototype.onConfigure = function () { + try { + onConfigure?.apply(this, arguments); + const widgets_values = this[VALUES]; + if (widgets_values?.length) { + console.log("[EasyLoRA.TextDisplay] onConfigure restoring:", JSON.stringify(widgets_values)); + // In newer frontend there seems to be a delay in creating the initial widget + requestAnimationFrame(() => { + try { + populate.call( + this, + widgets_values.slice( + +(widgets_values.length > 1 && this.inputs?.[0]?.widget) + ) + ); + } catch (err) { + console.error("[EasyLoRA.TextDisplay] onConfigure populate crashed:", err); + } + }); + } + } catch (err) { + console.error("[EasyLoRA.TextDisplay] onConfigure crashed:", err); + } + }; + } + }, +}); diff --git a/utils.py b/utils.py index e1c94df..9256788 100644 --- a/utils.py +++ b/utils.py @@ -1563,7 +1563,7 @@ def compute_component_energy_ratios( rank = max(1, rank) if original_sds[i] is not None: - from ..engine.scale_utils import find_alpha_value + from .engine.scale_utils import find_alpha_value alpha_value = find_alpha_value(original_sds[i], key, mapping=mappings[i]) if not converted_flags[i] and alpha_value is not None: scale_factor = alpha_value / rank @@ -1668,7 +1668,7 @@ def compute_primary_driver_intensity_metric( # Alpha/rank scaling for unconverted LoRAs (same logic as existing functions) if original_sds[i] is not None: - from ..engine.scale_utils import find_alpha_value + from .engine.scale_utils import find_alpha_value alpha_value = find_alpha_value(original_sds[i], key, mapping=mappings[i]) if not converted_flags[i] and alpha_value is not None: scale_factor = alpha_value / rank