feat(randomizer): add LoRA locking and roll modes

- Implement LoRA locking to prevent specific LoRAs from being changed during randomization
- Add visual styling for locked state with amber accents and distinct backgrounds
- Introduce `roll_mode` configuration with 'backend' (execute current selection while generating new) and 'frontend' (execute newly generated selection) behaviors
- Move LoraPoolNode to 'Lora Manager/randomizer' category and remove standalone class mappings
- Standardize RETURN_NAMES in LoraRandomizerNode for consistency
This commit is contained in:
Will Miao
2026-01-12 21:53:47 +08:00
parent 177b20263d
commit bce6b0e610
13 changed files with 706 additions and 232 deletions

View File

@@ -175,6 +175,20 @@
box-shadow: 0 0 0 1px rgba(66, 153, 225, 0.3) !important;
}
.lm-lora-entry[data-selected="true"][data-locked="true"] {
background-color: rgba(66, 153, 225, 0.2) !important;
border-left: 3px solid rgba(245, 158, 11, 0.8) !important;
border-right: 1px solid rgba(66, 153, 225, 0.6) !important;
border-top: 1px solid rgba(66, 153, 225, 0.6) !important;
border-bottom: 1px solid rgba(66, 153, 225, 0.6) !important;
box-shadow: 0 0 0 1px rgba(66, 153, 225, 0.3), inset 0 0 20px rgba(245, 158, 11, 0.04) !important;
}
.lm-lora-entry[data-selected="true"][data-locked="true"][data-active="false"] {
background-color: rgba(48, 42, 36, 0.5) !important;
border-left: 3px solid rgba(245, 158, 11, 0.6) !important;
}
.lm-lora-name {
margin-left: 4px;
flex: 1;
@@ -236,7 +250,6 @@
justify-content: center;
cursor: pointer;
user-select: none;
font-size: 12px;
color: rgba(226, 232, 240, 0.8);
transition: all 0.2s ease;
}
@@ -246,6 +259,11 @@
transform: scale(1.2);
}
.lm-lora-arrow svg {
width: 12px;
height: 12px;
}
.lm-lora-expand-button {
width: 20px;
height: 20px;
@@ -254,7 +272,6 @@
justify-content: center;
cursor: pointer;
user-select: none;
font-size: 10px;
color: rgba(226, 232, 240, 0.7);
background-color: rgba(45, 55, 72, 0.3);
border: 1px solid rgba(226, 232, 240, 0.2);
@@ -262,7 +279,6 @@
transition: all 0.2s ease;
flex-shrink: 0;
padding: 0;
line-height: 1;
box-sizing: border-box;
}
@@ -314,13 +330,17 @@
justify-content: center;
cursor: grab;
user-select: none;
font-size: 14px;
color: rgba(226, 232, 240, 0.6);
transition: all 0.2s ease;
margin-right: 8px;
flex-shrink: 0;
}
.lm-lora-drag-handle svg {
width: 14px;
height: 14px;
}
.lm-lora-drag-handle:hover {
color: rgba(226, 232, 240, 0.9);
transform: scale(1.1);
@@ -330,6 +350,83 @@
cursor: grabbing;
}
.lm-lora-lock-button {
width: 20px;
height: 20px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
user-select: none;
background-color: rgba(45, 55, 72, 0.3);
border: 1px solid rgba(226, 232, 240, 0.2);
border-radius: 3px;
transition: all 0.2s ease;
flex-shrink: 0;
padding: 0;
box-sizing: border-box;
margin-right: 8px;
color: rgba(226, 232, 240, 0.8);
}
.lm-lora-lock-button svg {
width: 14px;
height: 14px;
}
.lm-lora-lock-button:hover {
background-color: rgba(66, 153, 225, 0.2);
border-color: rgba(66, 153, 225, 0.4);
color: rgba(226, 232, 240, 0.95);
transform: scale(1.05);
}
.lm-lora-lock-button:active {
transform: scale(0.95);
}
.lm-lora-lock-button:focus {
outline: none;
}
.lm-lora-lock-button:focus-visible {
box-shadow: 0 0 0 2px rgba(66, 153, 225, 0.5);
}
.lm-lora-lock-button--locked {
background-color: rgba(245, 158, 11, 0.25);
border-color: rgba(245, 158, 11, 0.7);
color: rgba(251, 191, 36, 0.95);
box-shadow: 0 0 8px rgba(245, 158, 11, 0.15);
}
.lm-lora-lock-button--locked:hover {
background-color: rgba(245, 158, 11, 0.35);
border-color: rgba(245, 158, 11, 0.85);
box-shadow: 0 0 12px rgba(245, 158, 11, 0.25);
}
/* Visual styling for locked lora entries */
.lm-lora-entry[data-locked="true"] {
background-color: rgba(60, 50, 40, 0.75);
border-left: 3px solid rgba(245, 158, 11, 0.7);
box-shadow: inset 0 0 20px rgba(245, 158, 11, 0.04);
}
.lm-lora-entry[data-locked="true"]:hover {
background-color: rgba(65, 55, 45, 0.85);
box-shadow: inset 0 0 24px rgba(245, 158, 11, 0.06);
}
.lm-lora-entry[data-locked="true"][data-active="false"] {
background-color: rgba(48, 42, 36, 0.6);
border-left: 3px solid rgba(245, 158, 11, 0.5);
}
.lm-lora-entry[data-locked="true"][data-active="false"]:hover {
background-color: rgba(52, 46, 40, 0.7);
}
body.lm-lora-strength-dragging,
body.lm-lora-strength-dragging * {
cursor: ew-resize !important;