bizydraft 0.2.49__py3-none-any.whl → 0.2.87__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of bizydraft might be problematic. Click here for more details.
- bizydraft/env.py +3 -0
- bizydraft/hijack_nodes.py +60 -42
- bizydraft/hijack_routes.py +36 -3
- bizydraft/oss_utils.py +231 -2
- bizydraft/patch_handlers.py +197 -8
- bizydraft/static/js/aiAppHandler.js +460 -425
- bizydraft/static/js/clipspaceToOss.js +386 -0
- bizydraft/static/js/disableComfyWebSocket.js +64 -0
- bizydraft/static/js/freezeModeHandler.js +425 -404
- bizydraft/static/js/handleStyle.js +128 -36
- bizydraft/static/js/hookLoad/configLoader.js +74 -0
- bizydraft/static/js/hookLoad/media.js +684 -0
- bizydraft/static/js/hookLoad/model.js +322 -0
- bizydraft/static/js/hookLoadMedia.js +196 -0
- bizydraft/static/js/hookLoadModel.js +207 -256
- bizydraft/static/js/main.js +2 -0
- bizydraft/static/js/nodeFocusHandler.js +118 -106
- bizydraft/static/js/nodeParamsFilter.js +91 -89
- bizydraft/static/js/postEvent.js +1207 -967
- bizydraft/static/js/socket.js +55 -50
- bizydraft/static/js/tool.js +71 -63
- bizydraft/static/js/uploadFile.js +49 -41
- bizydraft/static/js/workflow_io.js +193 -0
- {bizydraft-0.2.49.dist-info → bizydraft-0.2.87.dist-info}/METADATA +1 -1
- bizydraft-0.2.87.dist-info/RECORD +34 -0
- bizydraft/static/js/hookLoadImage.js +0 -177
- bizydraft-0.2.49.dist-info/RECORD +0 -28
- {bizydraft-0.2.49.dist-info → bizydraft-0.2.87.dist-info}/WHEEL +0 -0
- {bizydraft-0.2.49.dist-info → bizydraft-0.2.87.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
import { hideWidget } from "../tool.js";
|
|
2
|
+
import { fetchNodeConfig } from "./configLoader.js";
|
|
3
|
+
|
|
4
|
+
// 动态配置缓存
|
|
5
|
+
let nodeConfigCache = null;
|
|
6
|
+
let configLoadPromise = null;
|
|
7
|
+
let storageClearedOnce = false;
|
|
8
|
+
|
|
9
|
+
const HAZY_WHITELIST_NODES = {};
|
|
10
|
+
|
|
11
|
+
export const possibleWidgetNames = [
|
|
12
|
+
"clip_name",
|
|
13
|
+
"clip_name1",
|
|
14
|
+
"clip_name2",
|
|
15
|
+
"clip_name3",
|
|
16
|
+
"clip_name4",
|
|
17
|
+
"ckpt_name",
|
|
18
|
+
"lora_name",
|
|
19
|
+
"name",
|
|
20
|
+
"lora",
|
|
21
|
+
"lora_01",
|
|
22
|
+
"lora_02",
|
|
23
|
+
"lora_03",
|
|
24
|
+
"lora_04",
|
|
25
|
+
"lora_1_name",
|
|
26
|
+
"lora_2_name",
|
|
27
|
+
"lora_3_name",
|
|
28
|
+
"lora_4_name",
|
|
29
|
+
"lora_5_name",
|
|
30
|
+
"lora_6_name",
|
|
31
|
+
"lora_7_name",
|
|
32
|
+
"lora_8_name",
|
|
33
|
+
"lora_9_name",
|
|
34
|
+
"lora_10_name",
|
|
35
|
+
"lora_11_name",
|
|
36
|
+
"lora_12_name",
|
|
37
|
+
"model_name",
|
|
38
|
+
"control_net_name",
|
|
39
|
+
"ipadapter_file",
|
|
40
|
+
"unet_name",
|
|
41
|
+
"vae_name",
|
|
42
|
+
"model",
|
|
43
|
+
"model_name",
|
|
44
|
+
"instantid_file",
|
|
45
|
+
"pulid_file",
|
|
46
|
+
"style_model_name",
|
|
47
|
+
"yolo_model",
|
|
48
|
+
"face_model",
|
|
49
|
+
"bbox_model_name",
|
|
50
|
+
"sam_model_name",
|
|
51
|
+
"model_path",
|
|
52
|
+
"upscale_model",
|
|
53
|
+
"supir_model",
|
|
54
|
+
"sdxl_model",
|
|
55
|
+
"upscale_model_1",
|
|
56
|
+
"upscale_model_2",
|
|
57
|
+
"upscale_model_3",
|
|
58
|
+
"sam_model",
|
|
59
|
+
"sam2_model",
|
|
60
|
+
"grounding_dino_model",
|
|
61
|
+
];
|
|
62
|
+
|
|
63
|
+
// 获取节点配置的API函数(使用共享配置加载器)
|
|
64
|
+
async function fetchNodeConfigWithCache() {
|
|
65
|
+
if (nodeConfigCache) {
|
|
66
|
+
return nodeConfigCache;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (configLoadPromise) {
|
|
70
|
+
return configLoadPromise;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
configLoadPromise = (async () => {
|
|
74
|
+
const config = await fetchNodeConfig();
|
|
75
|
+
if (config) {
|
|
76
|
+
nodeConfigCache = config;
|
|
77
|
+
console.log(
|
|
78
|
+
"节点配置加载成功:",
|
|
79
|
+
Object.keys(nodeConfigCache).length,
|
|
80
|
+
"个节点"
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
return config;
|
|
84
|
+
})();
|
|
85
|
+
|
|
86
|
+
return configLoadPromise;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// 读取 mode_type(不再兼容旧的 modelType)
|
|
90
|
+
export function getModelTypeFromInput(inputConfig) {
|
|
91
|
+
console.log("inputConfig", inputConfig);
|
|
92
|
+
if (!inputConfig) return undefined;
|
|
93
|
+
console.log("inputConfig", inputConfig);
|
|
94
|
+
return inputConfig.mode_type;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// 根据节点名称获取节点配置信息(名单优先,正则补充;不阻塞返回)
|
|
98
|
+
export async function getNodeConfig(nodeName) {
|
|
99
|
+
if (/bizyair/i.test(nodeName)) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// 1) 名单(API)优先(仅用缓存,不等待网络)
|
|
104
|
+
if (nodeConfigCache && nodeConfigCache[nodeName]) {
|
|
105
|
+
return { nodeName, config: nodeConfigCache[nodeName] };
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// 若尚未发起请求,后台发起一次
|
|
109
|
+
if (!configLoadPromise) {
|
|
110
|
+
try {
|
|
111
|
+
void fetchNodeConfigWithCache();
|
|
112
|
+
} catch (e) {}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// 2) 正则补充:如 XxxLoader => Xxx(立即返回,不等待API)
|
|
116
|
+
const regex = /^(\w+).*Loader.*/i;
|
|
117
|
+
const match = nodeName.match(regex);
|
|
118
|
+
if (match) {
|
|
119
|
+
const inferredType = match[1];
|
|
120
|
+
return {
|
|
121
|
+
nodeName,
|
|
122
|
+
config: {
|
|
123
|
+
inputs: { [nodeName]: { mode_type: inferredType, required: true } },
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export function createSetWidgetCallback(nodeConfig, selectedBaseModels = []) {
|
|
131
|
+
return function setWidgetCallback() {
|
|
132
|
+
if (!nodeConfig || !nodeConfig.config || !nodeConfig.config.inputs) {
|
|
133
|
+
console.warn("节点配置无效:", nodeConfig);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const inputs = nodeConfig.config.inputs;
|
|
138
|
+
const inputKeys = Object.keys(inputs);
|
|
139
|
+
|
|
140
|
+
// 根据API配置找到对应的widget
|
|
141
|
+
const targetWidgets = [];
|
|
142
|
+
inputKeys.forEach((inputKey) => {
|
|
143
|
+
const widget = this.widgets.find((w) => w.name === inputKey);
|
|
144
|
+
if (widget) {
|
|
145
|
+
targetWidgets.push({
|
|
146
|
+
widget: widget,
|
|
147
|
+
inputKey: inputKey,
|
|
148
|
+
inputConfig: inputs[inputKey],
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
// 如果没有找到匹配的widget,使用原来的逻辑作为备选
|
|
154
|
+
if (targetWidgets.length === 0) {
|
|
155
|
+
const fallbackWidgets = this.widgets.filter((widget) =>
|
|
156
|
+
possibleWidgetNames.includes(widget.name)
|
|
157
|
+
);
|
|
158
|
+
fallbackWidgets.forEach((wdt, index) => {
|
|
159
|
+
const firstInput = Object.values(inputs)[0];
|
|
160
|
+
if (firstInput) {
|
|
161
|
+
targetWidgets.push({
|
|
162
|
+
widget: wdt,
|
|
163
|
+
inputKey: wdt.name,
|
|
164
|
+
inputConfig: firstInput,
|
|
165
|
+
index: index,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
targetWidgets.forEach(({ widget, inputKey, inputConfig, index }) => {
|
|
172
|
+
// 检查是否禁用comfyagent
|
|
173
|
+
if (inputConfig.disable_comfyagent) {
|
|
174
|
+
console.log(`跳过禁用的widget: ${inputKey}`);
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
widget.value = widget.value || "to choose";
|
|
179
|
+
widget.mouse = function (e, pos, canvas) {
|
|
180
|
+
try {
|
|
181
|
+
if (
|
|
182
|
+
e.type === "pointerdown" ||
|
|
183
|
+
e.type === "mousedown" ||
|
|
184
|
+
e.type === "click" ||
|
|
185
|
+
e.type === "pointerup"
|
|
186
|
+
) {
|
|
187
|
+
e.preventDefault();
|
|
188
|
+
e.stopPropagation();
|
|
189
|
+
e.widgetClick = true;
|
|
190
|
+
window.parent.postMessage(
|
|
191
|
+
{
|
|
192
|
+
type: "collapsePublishWorkflowDialog",
|
|
193
|
+
method: "collapsePublishWorkflowDialog",
|
|
194
|
+
result: true,
|
|
195
|
+
},
|
|
196
|
+
"*"
|
|
197
|
+
);
|
|
198
|
+
const currentNode = this.node;
|
|
199
|
+
|
|
200
|
+
if (!currentNode || !currentNode.widgets) {
|
|
201
|
+
console.warn("Node or widgets not available");
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
if (
|
|
206
|
+
typeof bizyAirLib !== "undefined" &&
|
|
207
|
+
typeof bizyAirLib.showModelSelect === "function"
|
|
208
|
+
) {
|
|
209
|
+
bizyAirLib.showModelSelect({
|
|
210
|
+
modelType: [getModelTypeFromInput(inputConfig)],
|
|
211
|
+
selectedBaseModels,
|
|
212
|
+
onApply: (version, model) => {
|
|
213
|
+
if (!currentNode || !currentNode.widgets) return;
|
|
214
|
+
|
|
215
|
+
// 更新widget值
|
|
216
|
+
widget.value = version.file_name;
|
|
217
|
+
|
|
218
|
+
// 找到对应的隐藏字段(固定命名:model_version_id, model_version_id2...)
|
|
219
|
+
let modelVersionField;
|
|
220
|
+
// 真实绑定顺序应与targetWidgets相同,因此通过当前widget在targetWidgets的索引定位
|
|
221
|
+
const twIndex = targetWidgets.findIndex(
|
|
222
|
+
(tw) => tw.widget === widget
|
|
223
|
+
);
|
|
224
|
+
const fieldName =
|
|
225
|
+
twIndex === 0
|
|
226
|
+
? "model_version_id"
|
|
227
|
+
: `model_version_id${twIndex + 1}`;
|
|
228
|
+
modelVersionField = currentNode.widgets.find(
|
|
229
|
+
(w) => w.name === fieldName
|
|
230
|
+
);
|
|
231
|
+
|
|
232
|
+
if (model && modelVersionField && version) {
|
|
233
|
+
modelVersionField.value = version.id;
|
|
234
|
+
currentNode.setDirtyCanvas(true);
|
|
235
|
+
|
|
236
|
+
// 删除节点上的感叹号徽章
|
|
237
|
+
if (
|
|
238
|
+
currentNode &&
|
|
239
|
+
currentNode.badges &&
|
|
240
|
+
Array.isArray(currentNode.badges)
|
|
241
|
+
) {
|
|
242
|
+
// 移除 text 为 '!' 的徽章
|
|
243
|
+
currentNode.badges = currentNode.badges.filter(
|
|
244
|
+
(badgeFn) => {
|
|
245
|
+
try {
|
|
246
|
+
const badge =
|
|
247
|
+
typeof badgeFn === "function"
|
|
248
|
+
? badgeFn()
|
|
249
|
+
: badgeFn;
|
|
250
|
+
return badge.text !== "!";
|
|
251
|
+
} catch (e) {
|
|
252
|
+
return true;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
);
|
|
256
|
+
// 同时移除 hasTips 标记
|
|
257
|
+
if (currentNode.hasTips) {
|
|
258
|
+
delete currentNode.hasTips;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
},
|
|
263
|
+
});
|
|
264
|
+
} else {
|
|
265
|
+
console.error("bizyAirLib not available");
|
|
266
|
+
}
|
|
267
|
+
return false;
|
|
268
|
+
}
|
|
269
|
+
} catch (error) {
|
|
270
|
+
console.error("Error handling mouse event:", error);
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
|
|
274
|
+
widget.options = widget.options || {};
|
|
275
|
+
widget.options.values = () => [];
|
|
276
|
+
widget.options.editable = false;
|
|
277
|
+
widget.clickable = true;
|
|
278
|
+
widget.processMouse = true;
|
|
279
|
+
});
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
export function setupNodeMouseBehavior(node, nodeConfig) {
|
|
284
|
+
// 固定隐藏主版本ID字段(其余编号字段为hidden类型本身不可见)
|
|
285
|
+
hideWidget(node, "model_version_id");
|
|
286
|
+
|
|
287
|
+
// 只设置必要的状态信息,不修改onMouseDown(已在上面的扩展中处理)
|
|
288
|
+
if (!node._bizyairState) {
|
|
289
|
+
node._bizyairState = {
|
|
290
|
+
lastClickTime: 0,
|
|
291
|
+
DEBOUNCE_DELAY: 300,
|
|
292
|
+
nodeConfig: nodeConfig,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
export function addBadge(node) {
|
|
298
|
+
const customBadge = new LGraphBadge({
|
|
299
|
+
text: "!",
|
|
300
|
+
fgColor: "white",
|
|
301
|
+
bgColor: "#FF6B6B",
|
|
302
|
+
fontSize: 12,
|
|
303
|
+
padding: 8,
|
|
304
|
+
height: 20,
|
|
305
|
+
cornerRadius: 10,
|
|
306
|
+
});
|
|
307
|
+
if (!Array.isArray(node.badges)) {
|
|
308
|
+
node.badges = [];
|
|
309
|
+
}
|
|
310
|
+
if (node.hasTips) {
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
node.badges.push(() => customBadge);
|
|
314
|
+
node.hasTips = true;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// 启动时后台预取(不阻塞后续逻辑)
|
|
318
|
+
try {
|
|
319
|
+
void fetchNodeConfigWithCache();
|
|
320
|
+
} catch (e) {
|
|
321
|
+
/* noop */
|
|
322
|
+
}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { app } from "../../scripts/app.js";
|
|
2
|
+
import { hideWidget } from "./tool.js";
|
|
3
|
+
import {
|
|
4
|
+
getMediaNodeConfig,
|
|
5
|
+
getMediaInputKeys,
|
|
6
|
+
computeIsMediaNode,
|
|
7
|
+
mediaNodeList,
|
|
8
|
+
fetchMediaConfigWithCache,
|
|
9
|
+
findMediaWidget,
|
|
10
|
+
findMediaWidgets,
|
|
11
|
+
updateWidgetsOptions,
|
|
12
|
+
handleNewUploadedFile,
|
|
13
|
+
extractUrlFromInput,
|
|
14
|
+
initMaps,
|
|
15
|
+
createImageNameWidgetCallbackForMediaWidget,
|
|
16
|
+
createMediaWidgetCallback,
|
|
17
|
+
setupVaWidgets,
|
|
18
|
+
applyWorkflowImageSettings,
|
|
19
|
+
fetchImageList,
|
|
20
|
+
} from "./hookLoad/media.js";
|
|
21
|
+
|
|
22
|
+
app.registerExtension({
|
|
23
|
+
name: "bizyair.image.to.oss",
|
|
24
|
+
beforeRegisterNodeDef(nodeType, nodeData) {
|
|
25
|
+
let workflowParams = null;
|
|
26
|
+
document.addEventListener("workflowLoaded", (event) => {
|
|
27
|
+
workflowParams = event.detail;
|
|
28
|
+
});
|
|
29
|
+
document.addEventListener("drop", (e) => {
|
|
30
|
+
e.preventDefault();
|
|
31
|
+
const files = e.dataTransfer.files;
|
|
32
|
+
|
|
33
|
+
Array.from(files).forEach((file) => {
|
|
34
|
+
if (file.type === "application/json" || file.name.endsWith(".json")) {
|
|
35
|
+
const reader = new FileReader();
|
|
36
|
+
reader.onload = function (event) {
|
|
37
|
+
try {
|
|
38
|
+
const jsonContent = JSON.parse(event.target.result);
|
|
39
|
+
if (jsonContent && jsonContent.nodes) {
|
|
40
|
+
window.currentWorkflowData = jsonContent;
|
|
41
|
+
}
|
|
42
|
+
} catch (error) {
|
|
43
|
+
console.error("解析JSON文件失败:", error);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
reader.readAsText(file);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
const originalOnNodeCreated = nodeType.prototype.onNodeCreated;
|
|
51
|
+
nodeType.prototype.onNodeCreated = async function () {
|
|
52
|
+
const result = originalOnNodeCreated?.apply(this, arguments);
|
|
53
|
+
if (!(await computeIsMediaNode(nodeData.name))) {
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const apiHost = "https://bizyair.cn/api";
|
|
58
|
+
// const apiHost = 'http://localhost:3000/api'
|
|
59
|
+
|
|
60
|
+
// 获取 API 配置
|
|
61
|
+
const mediaNodeConfig = await getMediaNodeConfig(nodeData.name);
|
|
62
|
+
const apiInputKeys = getMediaInputKeys(mediaNodeConfig);
|
|
63
|
+
|
|
64
|
+
// 查找媒体 widget
|
|
65
|
+
const media_widget = findMediaWidget(this.widgets, apiInputKeys);
|
|
66
|
+
const va_widgets = findMediaWidgets(this.widgets, apiInputKeys);
|
|
67
|
+
let image_name_widget = this.widgets.find((w) => w.name === "image_name");
|
|
68
|
+
|
|
69
|
+
// 获取文件列表
|
|
70
|
+
const image_list = await fetchImageList(apiHost, nodeData.name);
|
|
71
|
+
|
|
72
|
+
// 初始化 Map 映射
|
|
73
|
+
const { urlToNameMap, nameToItemMap } = initMaps(image_list);
|
|
74
|
+
|
|
75
|
+
// 如果找到va_widgets,处理它们
|
|
76
|
+
if (va_widgets.length > 0) {
|
|
77
|
+
image_name_widget = setupVaWidgets(
|
|
78
|
+
this,
|
|
79
|
+
va_widgets,
|
|
80
|
+
image_list,
|
|
81
|
+
urlToNameMap,
|
|
82
|
+
nameToItemMap,
|
|
83
|
+
image_name_widget,
|
|
84
|
+
va_widgets[0]
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// 如果va_widgets没有创建image_name_widget,使用原有逻辑创建
|
|
89
|
+
if (!image_name_widget && media_widget) {
|
|
90
|
+
image_name_widget = this.addWidget(
|
|
91
|
+
"combo",
|
|
92
|
+
"image_name",
|
|
93
|
+
"",
|
|
94
|
+
createImageNameWidgetCallbackForMediaWidget(
|
|
95
|
+
nameToItemMap,
|
|
96
|
+
media_widget
|
|
97
|
+
),
|
|
98
|
+
{
|
|
99
|
+
serialize: true,
|
|
100
|
+
values: image_list.map((item) => item.name),
|
|
101
|
+
}
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// 如果进入了va_widgets分支,使用va_widgets中第一个作为media_widget的替代
|
|
106
|
+
const actualMediaWidget =
|
|
107
|
+
va_widgets.length > 0 ? va_widgets[0] : media_widget;
|
|
108
|
+
|
|
109
|
+
if (image_name_widget && actualMediaWidget) {
|
|
110
|
+
const val =
|
|
111
|
+
urlToNameMap.get(actualMediaWidget.value) || actualMediaWidget.value;
|
|
112
|
+
image_name_widget.label = actualMediaWidget.label;
|
|
113
|
+
image_name_widget.value = val;
|
|
114
|
+
|
|
115
|
+
// 调整 widget 顺序
|
|
116
|
+
const currentIndex = this.widgets.indexOf(image_name_widget);
|
|
117
|
+
if (currentIndex > 1) {
|
|
118
|
+
this.widgets.splice(currentIndex, 1);
|
|
119
|
+
this.widgets.splice(1, 0, image_name_widget);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// 如果没有进入va_widgets分支,才隐藏media_widget
|
|
123
|
+
if (va_widgets.length === 0) {
|
|
124
|
+
hideWidget(this, media_widget.name);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// 更新 widget 选项列表
|
|
128
|
+
updateWidgetsOptions([actualMediaWidget], image_list);
|
|
129
|
+
|
|
130
|
+
// 对于va_widgets的情况,callback已经在上面重写过了,不需要再次重写
|
|
131
|
+
if (va_widgets.length === 0 && media_widget) {
|
|
132
|
+
const callback = media_widget.callback;
|
|
133
|
+
media_widget.callback = createMediaWidgetCallback(
|
|
134
|
+
media_widget,
|
|
135
|
+
urlToNameMap,
|
|
136
|
+
nameToItemMap,
|
|
137
|
+
image_list,
|
|
138
|
+
image_name_widget,
|
|
139
|
+
actualMediaWidget,
|
|
140
|
+
callback
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// 应用工作流设置
|
|
146
|
+
const workflowData = window.currentWorkflowData || workflowParams;
|
|
147
|
+
if (workflowData) {
|
|
148
|
+
await applyWorkflowImageSettings(
|
|
149
|
+
workflowData,
|
|
150
|
+
image_list,
|
|
151
|
+
media_widget,
|
|
152
|
+
image_name_widget,
|
|
153
|
+
this.id,
|
|
154
|
+
va_widgets,
|
|
155
|
+
actualMediaWidget
|
|
156
|
+
);
|
|
157
|
+
if (window.currentWorkflowData) {
|
|
158
|
+
delete window.currentWorkflowData;
|
|
159
|
+
}
|
|
160
|
+
} else {
|
|
161
|
+
await applyWorkflowImageSettings(
|
|
162
|
+
workflowParams,
|
|
163
|
+
image_list,
|
|
164
|
+
media_widget,
|
|
165
|
+
image_name_widget,
|
|
166
|
+
this.id,
|
|
167
|
+
va_widgets,
|
|
168
|
+
actualMediaWidget
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// 发送完成消息
|
|
173
|
+
window.parent.postMessage(
|
|
174
|
+
{
|
|
175
|
+
type: "functionResult",
|
|
176
|
+
method: "hookLoadImageCompleted",
|
|
177
|
+
params: {},
|
|
178
|
+
},
|
|
179
|
+
"*"
|
|
180
|
+
);
|
|
181
|
+
};
|
|
182
|
+
},
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
// app.api.addEventListener('graphChanged', (e) => {
|
|
186
|
+
// console.log('Graph 发生变化,当前 workflow JSON:', e.detail)
|
|
187
|
+
// window.parent.postMessage({
|
|
188
|
+
// type: 'functionResult',
|
|
189
|
+
// method: 'workflowChanged',
|
|
190
|
+
// result: e.detail
|
|
191
|
+
// }, '*');
|
|
192
|
+
|
|
193
|
+
// document.dispatchEvent(new CustomEvent('workflowLoaded', {
|
|
194
|
+
// detail: e.detail
|
|
195
|
+
// }));
|
|
196
|
+
// })
|