Files
Gin3601-LLS-node/web/js/lls_ksampler_compat.js
T
2026-05-21 14:12:44 +08:00

98 lines
3.2 KiB
JavaScript

import { app } from "../../../scripts/app.js";
const EXTENSION_NAME = "lls.ksampler.compat";
const TARGET_NODE_CLASS = "LLSSimpleKSampler";
const TARGET_NODE_DISPLAY_NAME = "LLS Simple KSampler";
const DENOISE_MODE_INDEX = 11;
const ADAPTER_MODE_INDEX = 12;
const FLUX_GUIDANCE_INDEX = 13;
const MODEL_FAMILY_INDEX = 14;
const DENOISE_MODES = new Set(["manual", "auto_from_repair"]);
const ADAPTER_MODES = new Set(["auto", "sd_classic", "flux", "sd3", "qwen", "zimage"]);
function normalizeText(value) {
if (typeof value === "string") {
return value.trim();
}
if (value === null || value === undefined) {
return "";
}
return String(value).trim();
}
function isNumericLike(value) {
if (typeof value === "number") {
return Number.isFinite(value);
}
const text = normalizeText(value);
if (!text) {
return false;
}
return Number.isFinite(Number(text));
}
function looksLikeShiftedWidgetOrder(values) {
if (!Array.isArray(values) || values.length <= MODEL_FAMILY_INDEX) {
return false;
}
const denoiseMode = normalizeText(values[DENOISE_MODE_INDEX]);
const adapterMode = normalizeText(values[ADAPTER_MODE_INDEX]).toLowerCase();
const fluxGuidance = normalizeText(values[FLUX_GUIDANCE_INDEX]);
const modelFamily = normalizeText(values[MODEL_FAMILY_INDEX]).toLowerCase();
return (
!DENOISE_MODES.has(denoiseMode) &&
DENOISE_MODES.has(fluxGuidance) &&
ADAPTER_MODES.has(modelFamily) &&
!ADAPTER_MODES.has(adapterMode) &&
(isNumericLike(values[DENOISE_MODE_INDEX]) || denoiseMode === "")
);
}
function migrateWidgetValues(values) {
if (!Array.isArray(values) || values.length <= MODEL_FAMILY_INDEX) {
return values;
}
const migrated = values.slice();
if (looksLikeShiftedWidgetOrder(migrated)) {
const shiftedDenoiseMode = migrated[DENOISE_MODE_INDEX];
const shiftedAdapterMode = migrated[ADAPTER_MODE_INDEX];
const shiftedFluxGuidance = migrated[FLUX_GUIDANCE_INDEX];
const shiftedModelFamily = migrated[MODEL_FAMILY_INDEX];
migrated[DENOISE_MODE_INDEX] = normalizeText(shiftedFluxGuidance) || "manual";
migrated[ADAPTER_MODE_INDEX] = normalizeText(shiftedModelFamily).toLowerCase() || "auto";
migrated[FLUX_GUIDANCE_INDEX] = shiftedDenoiseMode;
migrated[MODEL_FAMILY_INDEX] =
normalizeText(shiftedAdapterMode).toLowerCase() === "auto" ? "Auto" : shiftedAdapterMode;
return migrated;
}
if (normalizeText(migrated[ADAPTER_MODE_INDEX]) === "Auto") {
migrated[ADAPTER_MODE_INDEX] = "auto";
}
if (normalizeText(migrated[MODEL_FAMILY_INDEX]) === "auto") {
migrated[MODEL_FAMILY_INDEX] = "Auto";
}
return migrated;
}
app.registerExtension({
name: EXTENSION_NAME,
async beforeRegisterNodeDef(nodeType, nodeData) {
if (nodeData.name !== TARGET_NODE_CLASS && nodeData.display_name !== TARGET_NODE_DISPLAY_NAME) {
return;
}
const previousConfigure = nodeType.prototype.configure;
nodeType.prototype.configure = function configureLLSKSamplerCompat(info) {
if (info && Array.isArray(info.widgets_values)) {
info.widgets_values = migrateWidgetValues(info.widgets_values);
}
return previousConfigure?.apply(this, arguments);
};
},
});