Invert bypass/mute toggle semantics: ON = node runs normally, OFF = bypass/mute (state keys v3)

This commit is contained in:
solidlime
2026-08-02 19:49:24 +09:00
parent f3b67a46f4
commit b820d9c7bc
+13 -11
View File
@@ -48,12 +48,12 @@ function currentRealValue(target, mode) {
if (typeof g.recomputeInsideNodes === "function") g.recomputeInsideNodes();
const members = g._nodes || [];
if (members.length === 0) return false;
const m = mode === "bypass" ? 4 : 2;
return members.every((n) => n.mode === m);
// ON = node runs normally (mode 0); OFF = bypassed/muted
return members.every((n) => n.mode === 0);
}
const targetNode = target.ref;
if (mode === "bypass") return targetNode.mode === 4;
if (mode === "mute") return targetNode.mode === 2;
if (mode === "bypass") return targetNode.mode === 0;
if (mode === "mute") return targetNode.mode === 0;
// widgets: first boolean widget value
const bw = (targetNode.widgets || []).find(
(w) => w.type === "BOOLEAN" || w.type === "toggle" || (w.options && w.options.type === "boolean")
@@ -74,16 +74,16 @@ function applyValue(target, mode, value) {
if (mode === "widgets") return; // groups are never included in widgets mode
const g = target.ref;
if (typeof g.recomputeInsideNodes === "function") g.recomputeInsideNodes();
const m = value ? (mode === "bypass" ? 4 : 2) : 0;
const m = value ? 0 : (mode === "bypass" ? 4 : 2);
(g._nodes || []).forEach((n) => { n.mode = m; });
app.graph.setDirtyCanvas(true, true);
return;
}
const targetNode = target.ref;
if (mode === "bypass") {
targetNode.mode = value ? 4 : 0;
targetNode.mode = value ? 0 : 4;
} else if (mode === "mute") {
targetNode.mode = value ? 2 : 0;
targetNode.mode = value ? 0 : 2;
} else {
// widgets
const bw = (targetNode.widgets || []).find(
@@ -166,12 +166,14 @@ function buildPanel(panelNode) {
if (!panelNode.properties.switches) {
panelNode.properties.switches = {};
}
// State was previously keyed by name only (shared across modes). Drop
// legacy single-name keys; current keys are "<mode>:<name>".
// Drop stale state keys: v1 was keyed by name only (shared across modes),
// v2 used "<mode>:<name>" with ON = bypass/mute applied semantics. Current
// keys are "<mode>:v3:<name>" with ON = node runs normally (switch-panel
// semantics: OFF applies bypass/mute).
{
const legacy = panelNode.properties.switches;
for (const k of Object.keys(legacy)) {
if (!k.includes(":")) delete legacy[k];
if (!k.includes(":v3:")) delete legacy[k];
}
}
@@ -275,7 +277,7 @@ function buildPanel(panelNode) {
// Toggle — state is persisted per (mode, name) so bypass/mute/widgets
// never share each other's on/off state.
const toggle = createToggle(disabled);
const stateKey = mode + ":" + name;
const stateKey = mode + ":v3:" + name;
const saved = switches[stateKey];
let isOn;
if (saved !== undefined) {