The fast linear merge path (_build_exact_linear_patch) produces LoRAAdapters
with rank = sum of all input ranks. SaveMergedLoRA was extracting these
weights directly without applying any SVD compression, making save_rank and
patch_compression settings ineffective for weighted_sum/weighted_average merges.
Fix: compress LoRAAdapter patches when current_rank > target_rank (where
target = save_rank when explicit, or fallback_rank in auto mode). Skip
LoCon patches (mid != None) which require special reshape handling.
Also improve auto-mode logging to explain rank growth (n_loras × avg_rank)
and direct users to set save_rank explicitly to control output file size.
Fix test discovery: __init__.py relative import fails when pytest imports it
as a standalone module. Guard with try/except to prevent all tests from
failing during collection/setup. Add pyproject.toml pytest config and
conftest.py to configure test discovery.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Allows picking which ranked config to apply (default=1, top-ranked)
directly on the AutoTuner node, without needing a separate Merge
Selector node. Changing selection skips the full sweep — only the
final merge is re-run.
Also bumps version to 1.4.7.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Lets users opt out of v1.2 SLERP-heavy auto-selection with a dropdown:
- v1.2 (default): full behavior (consensus, orthogonal detection, SLERP upgrade)
- no_slerp: v1.2 detection without SLERP upgrade
- classic: pre-1.2 logic (TIES vs weighted_average only)
Bump version to 1.2.1.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove ZImageLoRAMerger, ZImageLoRAStackApply, ZImageLoRAMergeToSingle,
and ZImageLoRATrueMerge (as a registered node). Only LoRAStack and
LoRAOptimizer remain. ZImageLoRATrueMerge becomes _LoRAMergeBase
(internal base class). Rename file, update all references, rewrite README.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>