mirror of
https://github.com/vladmandic/automatic
synced 2026-09-19 17:24:32 +02:00
feat(lora): per-layer select stack modes klora and estlora
Two-network subject+style sets select a winner per layer instead of summing: scores are top-K magnitude sums (klora) or Frobenius energies (estlora), and a timestep ramp shifts layers from the subject network toward the style network across sampling, reduced to at most one precomputed flip per layer per pass. On sub-8-bit SDNQ the pair rides the side-channel as separate segments flipped in place; other layers recompute the winner from the pristine backup, so select modes force backup mode. Selection resets per pass from the callback setup and is gated off under model compile. estlora's measured style-discrepancy term is exposed as an option. Adds XYZ axes for the stack settings.
This commit is contained in:
@@ -104,6 +104,10 @@ class SharedSettingsStackHelper():
|
||||
todo_ratio = None
|
||||
teacache_thresh = None
|
||||
extra_networks_default_multiplier = None
|
||||
lora_stack_mode = None
|
||||
lora_stack_density = None
|
||||
lora_stack_alpha = None
|
||||
lora_stack_discrepancy = None
|
||||
disable_apply_metadata = None
|
||||
disable_apply_params = None
|
||||
sdnq_quant_mode = None
|
||||
@@ -136,6 +140,10 @@ class SharedSettingsStackHelper():
|
||||
self.sd_unet = shared.opts.sd_unet
|
||||
self.sd_text_encoder = shared.opts.sd_text_encoder
|
||||
self.extra_networks_default_multiplier = shared.opts.extra_networks_default_multiplier
|
||||
self.lora_stack_mode = shared.opts.lora_stack_mode
|
||||
self.lora_stack_density = shared.opts.lora_stack_density
|
||||
self.lora_stack_alpha = shared.opts.lora_stack_alpha
|
||||
self.lora_stack_discrepancy = shared.opts.lora_stack_discrepancy
|
||||
self.teacache_thresh = shared.opts.teacache_thresh
|
||||
self.disable_apply_metadata = shared.opts.disable_apply_metadata
|
||||
self.disable_apply_params = shared.opts.disable_apply_params
|
||||
@@ -148,6 +156,10 @@ class SharedSettingsStackHelper():
|
||||
shared.opts.data["disable_apply_metadata"] = self.disable_apply_metadata
|
||||
shared.opts.data["disable_apply_params"] = self.disable_apply_params
|
||||
shared.opts.data["extra_networks_default_multiplier"] = self.extra_networks_default_multiplier
|
||||
shared.opts.data["lora_stack_mode"] = self.lora_stack_mode
|
||||
shared.opts.data["lora_stack_density"] = self.lora_stack_density
|
||||
shared.opts.data["lora_stack_alpha"] = self.lora_stack_alpha
|
||||
shared.opts.data["lora_stack_discrepancy"] = self.lora_stack_discrepancy
|
||||
shared.opts.data["prompt_attention"] = self.prompt_attention
|
||||
shared.opts.data["schedulers_solver_order"] = self.schedulers_solver_order
|
||||
shared.opts.data["schedulers_sigma_adjust"] = self.schedulers_sigma_adjust
|
||||
@@ -205,6 +217,10 @@ axis_options = [
|
||||
AxisOption("[Prompt] Prompt parser", str, apply_setting("prompt_attention"), choices=lambda: ["native", "compel", "xhinker", "a1111", "fixed"]),
|
||||
AxisOption("[Network] LoRA", str, apply_lora, cost=0.5, choices=list_lora),
|
||||
AxisOption("[Network] LoRA strength", float, apply_lora_strength, cost=0.6),
|
||||
AxisOption("[Network] LoRA stack mode", str, apply_setting("lora_stack_mode"), cost=0.6, choices=lambda: ["sum", "ties", "dare_ties", "dare_linear", "magnitude_prune", "klora", "estlora"]),
|
||||
AxisOption("[Network] LoRA stack density", float, apply_setting("lora_stack_density"), cost=0.6),
|
||||
AxisOption("[Network] LoRA stack ramp", float, apply_setting("lora_stack_alpha"), cost=0.6),
|
||||
AxisOption("[Network] LoRA stack discrepancy", float, apply_setting("lora_stack_discrepancy"), cost=0.6),
|
||||
AxisOption("[Network] Styles", str, apply_styles, choices=lambda: [s.name for s in shared.prompt_styles.styles.values()]),
|
||||
AxisOption("[Param] Width", int, apply_field("width")),
|
||||
AxisOption("[Param] Height", int, apply_field("height")),
|
||||
|
||||
Reference in New Issue
Block a user