125 lines
5.0 KiB
JavaScript
125 lines
5.0 KiB
JavaScript
import { app } from "../../scripts/app.js";
|
|
|
|
// ============================================================
|
|
// 每个节点独立尺寸参数,格式: "节点名": [默认初始宽度, 绝对最小宽度]
|
|
// ============================================================
|
|
|
|
const SIZES = {
|
|
"XB_VRAM_Calculator": [360, 200],
|
|
"XB_ChunkVisualization": [360, 200],
|
|
"XB_VideoParamsMaster": [360, 200],
|
|
"XB_ImageParamsMaster": [360, 200],
|
|
"XB_ImageParamsMasterMini": [360, 200],
|
|
"XB_ShenBi": [460, 320],
|
|
"XB_ImagePromptPreset": [420, 560],
|
|
"XB_MasterParameter": [360, 200],
|
|
"XB_UNetBlockSwap": [360, 200],
|
|
"XB_CheckpointBlockSwap": [360, 200],
|
|
"XB_UNetNameBroadcaster": [360, 200],
|
|
"XB_CLIPNameBroadcaster": [360, 200],
|
|
"XB_WanImageToVideo": [360, 200],
|
|
"XB_WanFirstLastFrameToVideo": [360, 200],
|
|
"XB_WanFunControlToVideo": [360, 200],
|
|
"XB_WanVaceToVideo": [360, 200],
|
|
"XB_Wan22FunControlToVideo": [360, 200],
|
|
"XB_WanSoundImageToVideo": [360, 200],
|
|
"XB_WanInfiniteTalkToVideo": [360, 200],
|
|
"XB_WanInfiniteTalkToVideo_Single": [360, 200],
|
|
"XB_WanInfiniteTalkToVideo_Dual": [360, 200],
|
|
"XB_WanFunInpaintToVideo": [360, 200],
|
|
"XB_WanCameraImageToVideo": [360, 200],
|
|
"XB_WanPhantomSubjectToVideo": [360, 200],
|
|
"XB_WanHuMoImageToVideo": [360, 200],
|
|
"XB_Wan22ImageToVideoLatent": [360, 200],
|
|
"XB_WanSoundImageToVideoExtend": [360, 200],
|
|
"XB_WanSCAILToVideo": [360, 200],
|
|
"XB_WanSCAILToVideoPro": [360, 200],
|
|
"XB_BatchFolderLoader": [360, 200],
|
|
"XB_BatchFolderBatchLoader": [360, 200],
|
|
"XB_Wan_ParamBus": [360, 200],
|
|
"XB_Wan_RelayNode": [360, 200],
|
|
"XB_Wan_InfiniteRelayNode": [360, 200],
|
|
"XB_Video_Merger": [360, 200],
|
|
"XB_StoryboardSlicer": [360, 200],
|
|
"XB_SageAttentionAccelerator": [360, 200],
|
|
"XB_ROCmKSampler": [360, 200],
|
|
"XB_ROCmKSamplerAdvanced": [360, 200],
|
|
"XB_ROCmSamplerCustom": [360, 200],
|
|
"XB_ROCmSamplerCustomAdvanced": [360, 200],
|
|
"XB_ROCmVAEDecode": [360, 200],
|
|
"XB_ROCmVAEEncode": [360, 200],
|
|
"XB_ROCmVAEDecodeTemporal": [360, 200],
|
|
"XB_WanCompileSettings": [360, 200],
|
|
"XB_WanAnimateToVideo": [360, 200],
|
|
"XB_WanAnimate_ParamBus": [360, 200],
|
|
"XB_WanAnimate_RelayNode": [360, 200],
|
|
"XB_WanInfiniteTalk_ParamBus": [360, 200],
|
|
"XB_WanInfiniteTalk_RelayNode": [360, 200],
|
|
"XB_WanSCAIL_ParamBus": [360, 200],
|
|
"XB_WanSCAIL_RelayNode": [360, 200],
|
|
"XB_HumanSegmentation": [360, 200],
|
|
"XB_HumanSegModelLoader": [360, 200],
|
|
"XB_CanvasLabel": [360, 200],
|
|
"XB_AudioSlicer": [360, 200],
|
|
"XB_AudioSlicerV1": [360, 200],
|
|
"XB_AudioSlicerV2": [360, 200],
|
|
"XB_AudioSlicerV3": [360, 200],
|
|
"XB_DigitalHumanParams_Single": [360, 200],
|
|
"XB_DigitalHumanParams_Dual": [360, 200],
|
|
"XB_ModelLoaderV1_GGUF": [360, 200],
|
|
"XB_ModelLoaderV2_GGUF": [360, 200],
|
|
"XB_ModelLoaderV3_GGUF": [360, 200],
|
|
"XB_NodeStatusSwitch": [360, 200],
|
|
"XB_FluxMultiImageEncode": [360, 200],
|
|
"XB_ReferenceAny": [360, 200],
|
|
"XB_StringMerge": [360, 200],
|
|
"XB_PromptLine": [420, 260],
|
|
"XB_MSR": [360, 200],
|
|
};
|
|
|
|
app.registerExtension({
|
|
name: "XB_ToolBox.NodeSizer",
|
|
async beforeRegisterNodeDef(nodeType, nodeData) {
|
|
const sizeConfig = SIZES[nodeData.name];
|
|
if (sizeConfig === undefined) return;
|
|
|
|
const [defW, minW] = sizeConfig;
|
|
|
|
// 🛡️ 核心修复:解除“棘轮效应”,恢复自由缩放
|
|
const origComputeSize = nodeType.prototype.computeSize;
|
|
nodeType.prototype.computeSize = function (out) {
|
|
let size = origComputeSize
|
|
? origComputeSize.apply(this, arguments)
|
|
: LiteGraph.LGraphNode.prototype.computeSize.apply(this, arguments);
|
|
|
|
// 告诉底层引擎:无论里面的文字多长、无论当前节点有多宽,
|
|
// 它的物理底线永远是 minW (200)!
|
|
// 这样系统就会允许用户用鼠标自由地把它缩小,直到 200 为止。
|
|
size[0] = minW;
|
|
return size;
|
|
};
|
|
|
|
const onNodeCreated = nodeType.prototype.onNodeCreated;
|
|
nodeType.prototype.onNodeCreated = function () {
|
|
if (onNodeCreated) onNodeCreated.apply(this, arguments);
|
|
// 节点新建落地瞬间,赋予默认的 360 大气尺寸
|
|
if (this.size) this.size[0] = defW;
|
|
};
|
|
|
|
const onConfigure = nodeType.prototype.onConfigure;
|
|
nodeType.prototype.onConfigure = function (info) {
|
|
if (onConfigure) onConfigure.apply(this, arguments);
|
|
// 读取旧工作流时:可以继承保存的宽度,但若窄于 200,则强制拉到 200 底线
|
|
if (this.size && this.size[0] < minW) {
|
|
this.size[0] = minW;
|
|
}
|
|
};
|
|
|
|
const onResize = nodeType.prototype.onResize;
|
|
nodeType.prototype.onResize = function (size) {
|
|
// 用户鼠标拖拽的最后一道防线:低于 200 坚决推不动
|
|
if (size[0] < minW) size[0] = minW;
|
|
if (onResize) onResize.apply(this, arguments);
|
|
};
|
|
}
|
|
}); |