bizydraft 0.2.57__py3-none-any.whl → 0.2.59__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.

@@ -1,8 +1,8 @@
1
1
  import { app } from "../../scripts/app.js";
2
- import { setNodeParams, filterNodeWidgets, isConfigurableNode } from "./nodeParamsFilter.js";
2
+ import { setNodeParams } from "./nodeParamsFilter.js";
3
3
  import { processGraphOutput } from './tool.js';
4
- import { focusNodeOnly, setGlobalReferences, setupCanvasClickHandler, removeCanvasClickHandler } from './nodeFocusHandler.js';
5
- import { freezeWorkflow, unfreezeWorkflow, updateHighlightedNodes } from './freezeModeHandler.js';
4
+ import { freezeWorkflow, unfreezeWorkflow } from './freezeModeHandler.js';
5
+ import { parseWorkflowIO } from './workflow_io.js';
6
6
  // 状态变量
7
7
  let selectedInputNodes = [];
8
8
  let activeMode = null; // 当前活动的模式: "aiapp" 或 "export"
@@ -39,14 +39,8 @@ function toggleMode(mode, enable, isworkflow = false) {
39
39
  }
40
40
  };
41
41
  try {
42
- const response = await fetch('/bizyair/workflow_io', {
43
- method: 'POST',
44
- headers: {
45
- 'Content-Type': 'application/json'
46
- },
47
- body: JSON.stringify(formattedData)
48
- });
49
- const responseData = await response.json();
42
+ // 使用前端workflow_io模块处理数据
43
+ const responseData = parseWorkflowIO(formattedData);
50
44
 
51
45
  // 保存节点参数信息
52
46
  if (responseData && responseData.data && Array.isArray(responseData.data.inputs)) {
@@ -679,6 +679,11 @@ app.registerExtension({
679
679
 
680
680
  return true;
681
681
  },
682
+ removeCookie: function (params) {
683
+ const expires = new Date(0).toUTCString();
684
+ document.cookie = params.name + "=; expires=" + expires + "; path=/";
685
+ return true;
686
+ },
682
687
  fitView: function () {
683
688
  app.canvas.fitViewToSelectionAnimated()
684
689
  window.parent.postMessage({
@@ -0,0 +1,193 @@
1
+ // 基础类型检查
2
+ const BASIC_TYPES = ['number', 'string', 'boolean'];
3
+
4
+ /**
5
+ * 检查值是否为基础类型
6
+ * @param {any} val - 要检查的值
7
+ * @returns {boolean} 是否为基础类型
8
+ */
9
+ function isBasicType(val) {
10
+ const type = typeof val;
11
+ return BASIC_TYPES.includes(type);
12
+ }
13
+
14
+ /**
15
+ * 遍历所有节点inputs,保留基础类型参数
16
+ * @param {Object} prompt - prompt对象
17
+ * @returns {Array} 输入参数数组
18
+ */
19
+ function getInputParams(prompt) {
20
+ const inputParams = [];
21
+
22
+ for (const [nodeId, node] of Object.entries(prompt)) {
23
+ const classType = node.class_type;
24
+ const inputs = node.inputs || {};
25
+
26
+ for (const [k, v] of Object.entries(inputs)) {
27
+ if (isBasicType(v)) {
28
+ inputParams.push({
29
+ node_id: nodeId,
30
+ class_type: classType,
31
+ param_name: k,
32
+ param_value: v
33
+ });
34
+ }
35
+ }
36
+ }
37
+
38
+ return inputParams;
39
+ }
40
+
41
+ /**
42
+ * 通过prompt参数推断叶子节点(即没有被其他节点inputs引用的节点)
43
+ * @param {Object} prompt - prompt对象
44
+ * @returns {Set} 叶子节点id集合
45
+ */
46
+ function getLeafNodesFromPrompt(prompt) {
47
+ const referenced = new Set();
48
+
49
+ for (const [nodeId, node] of Object.entries(prompt)) {
50
+ const inputs = node.inputs || {};
51
+
52
+ for (const v of Object.values(inputs)) {
53
+ // 如果是引用(如["4", 1]),则v为array且第一个元素为节点id
54
+ if (Array.isArray(v) && v.length > 0 && typeof v[0] === 'string') {
55
+ referenced.add(v[0]);
56
+ }
57
+ }
58
+ }
59
+
60
+ const allNodes = new Set(Object.keys(prompt));
61
+ const leafNodes = new Set([...allNodes].filter(x => !referenced.has(x)));
62
+
63
+ return leafNodes;
64
+ }
65
+
66
+ /**
67
+ * 从工作流节点中查找指定节点id的节点
68
+ * @param {Array} wfNodes - 工作流节点数组
69
+ * @param {string} nodeId - 节点id
70
+ * @returns {Object|null} 找到的节点或null
71
+ */
72
+ function getNodeIdFromWfNodes(wfNodes, nodeId) {
73
+ for (const wfNode of wfNodes) {
74
+ if (String(wfNode.id || 0) === nodeId) {
75
+ return wfNode;
76
+ }
77
+ }
78
+ return null;
79
+ }
80
+
81
+ /**
82
+ * 按节点类型和参数名整理参数信息
83
+ * @param {Array} inputParams - 输入参数数组
84
+ * @param {Set} excludeNodeIds - 需要排除的节点id集合
85
+ * @param {Array} wfNodes - 工作流节点数组
86
+ * @returns {Array} 整理后的参数信息
87
+ */
88
+ function summarizeParams(inputParams, excludeNodeIds, wfNodes) {
89
+ const summary = {};
90
+
91
+ for (const param of inputParams) {
92
+ const nodeId = param.node_id;
93
+
94
+ if (excludeNodeIds.has(nodeId)) {
95
+ continue;
96
+ }
97
+
98
+ const wfNode = getNodeIdFromWfNodes(wfNodes, nodeId);
99
+ let title = param.class_type;
100
+
101
+ if (wfNode && wfNode.title) {
102
+ title = wfNode.title;
103
+ }
104
+
105
+ const key = `${param.class_type}_${nodeId}`;
106
+
107
+ if (!summary[key]) {
108
+ summary[key] = {
109
+ name: param.class_type,
110
+ displayName: param.class_type,
111
+ nodeId: nodeId,
112
+ params: [],
113
+ title: title
114
+ };
115
+ }
116
+
117
+ // 获取参数值的类型
118
+ let paramType = typeof param.param_value;
119
+ if (paramType === 'number') {
120
+ paramType = Number.isInteger(param.param_value) ? 'INT' : 'FLOAT';
121
+ } else {
122
+ paramType = paramType.toUpperCase();
123
+ }
124
+
125
+ summary[key].params.push({
126
+ name: param.param_name,
127
+ displayName: param.param_name,
128
+ type: paramType,
129
+ defaultValue: param.param_value
130
+ });
131
+ }
132
+
133
+ return Object.values(summary);
134
+ }
135
+
136
+ /**
137
+ * 解析工作流IO数据
138
+ * @param {Object} requestData - 请求数据
139
+ * @returns {Object} 解析结果
140
+ */
141
+ function parseWorkflowIO(requestData) {
142
+ const prompt = requestData.prompt || {};
143
+ const extraData = requestData.extra_data || {};
144
+
145
+ const extraPnginfo = extraData.extra_pnginfo || {};
146
+ const workflow = extraPnginfo.workflow || {};
147
+ const wfNodes = workflow.nodes || [];
148
+
149
+ // 1. 输出参数(推断叶子节点)
150
+ const leafNodes = getLeafNodesFromPrompt(prompt);
151
+ const outputNodes = [];
152
+
153
+ for (const nodeId of leafNodes) {
154
+ const node = prompt[nodeId];
155
+ const classType = node.class_type;
156
+ const wfNode = getNodeIdFromWfNodes(wfNodes, nodeId);
157
+
158
+ let title = classType;
159
+ if (wfNode && wfNode.title) {
160
+ title = wfNode.title;
161
+ }
162
+
163
+ outputNodes.push({
164
+ nodeId: nodeId,
165
+ name: classType,
166
+ displayName: classType,
167
+ title: title,
168
+ params: []
169
+ });
170
+ }
171
+
172
+ // 2. 输入参数(排除已作为输出的节点)
173
+ const inputParams = getInputParams(prompt);
174
+ const inputSummary = summarizeParams(inputParams, leafNodes, wfNodes);
175
+
176
+ // 3. 构造response格式
177
+ return {
178
+ data: {
179
+ inputs: inputSummary,
180
+ outputs: outputNodes
181
+ }
182
+ };
183
+ }
184
+
185
+ // 导出函数
186
+ export {
187
+ parseWorkflowIO,
188
+ isBasicType,
189
+ getInputParams,
190
+ getLeafNodesFromPrompt,
191
+ summarizeParams,
192
+ getNodeIdFromWfNodes
193
+ };
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bizydraft
3
- Version: 0.2.57
3
+ Version: 0.2.59
4
4
  Summary: bizydraft
5
5
  Requires-Dist: loguru
6
6
  Requires-Dist: aiohttp
@@ -10,7 +10,7 @@ bizydraft/prestartup_patch.py,sha256=4FGjmRcDHELjtlQOrfTfk2Un5OS89QIqfq-gEcB9WDs
10
10
  bizydraft/resp.py,sha256=8INvKOe5Dgai3peKfqKjrhUoYeuXWXn358w30-_cY-A,369
11
11
  bizydraft/server.py,sha256=L2zoJgOisr65IRphOyko74AdsLel59gh55peyMaUrO8,2102
12
12
  bizydraft/workflow_io.py,sha256=MYhJbpgkv8hrA5k_aolijOTrWpTtu62nzRznA4hv8JE,4298
13
- bizydraft/static/js/aiAppHandler.js,sha256=SBGms27-DYyc5uBluN9ScliW-zUAdw5cS6VQ4BV-_CQ,17816
13
+ bizydraft/static/js/aiAppHandler.js,sha256=4PcrcD9gv-yqBelkIfuhoN0ZwuFv66f7-bmwqla_aPI,17428
14
14
  bizydraft/static/js/freezeModeHandler.js,sha256=SjpHD2nYymR-E13B0YcqkA6e4WycZOVI3c48Ts9qvWE,18027
15
15
  bizydraft/static/js/handleStyle.js,sha256=rUlgc-_vH76828Fv9zxTHq9UFj2AHANIUELArhl5lvU,2956
16
16
  bizydraft/static/js/hookLoadImage.js,sha256=aFRWkgJW-Cp-YHjZh-3j-vsVcNaDZpBVoQqcFZ2Po0g,8186
@@ -18,11 +18,12 @@ bizydraft/static/js/hookLoadModel.js,sha256=OHHTC1Hk8WXHlmDaNzMNGvT6BvQ6dGvxqALq
18
18
  bizydraft/static/js/main.js,sha256=oEsVEUZSo8ipx93oqs2WFQSRgp46XQ_D-Xao-wen2S8,121
19
19
  bizydraft/static/js/nodeFocusHandler.js,sha256=24xXbS4Q-GjJdRqf11i-1pBo8MkOJ24F7MHFV44EG6Q,4683
20
20
  bizydraft/static/js/nodeParamsFilter.js,sha256=H7lBB0G8HNqoGhOCH1hNXqPU-rPlrFyTxg_f_JgLEMk,4168
21
- bizydraft/static/js/postEvent.js,sha256=jzZcR238XyPdb5h6lICkarXCIf2gP8IV646dmWoMGpo,39604
21
+ bizydraft/static/js/postEvent.js,sha256=En0SNrekq3uTWF36yNP9V6LnBoyXjqKC-OnufggpWLE,39839
22
22
  bizydraft/static/js/socket.js,sha256=VE3fTAgEfM0FZhL526Skt7OCRokOa3mzTCAjAomI_tE,2432
23
23
  bizydraft/static/js/tool.js,sha256=VupamUuh7tYiDnBTrL5Z_yLmhJinskhzRXwE3zfsKZM,2901
24
24
  bizydraft/static/js/uploadFile.js,sha256=WvglKzHMeOzDhOH3P-fLcPHxCLbKOJpo4DntoRxeJtI,4908
25
- bizydraft-0.2.57.dist-info/METADATA,sha256=rBDMa_w4XMqK44ISXZasXyq6gO03IrGDgdDioMbQw84,162
26
- bizydraft-0.2.57.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
27
- bizydraft-0.2.57.dist-info/top_level.txt,sha256=XtoBq6hjZhXIM7aas4GtPDtAiKo8FdLzMABXW8qqQ8M,10
28
- bizydraft-0.2.57.dist-info/RECORD,,
25
+ bizydraft/static/js/workflow_io.js,sha256=FWAjncvWhvy-3nN_legD2fpRwgnIncpRLHU5X016a-U,5236
26
+ bizydraft-0.2.59.dist-info/METADATA,sha256=8eFWL2x04hGLv87ALfJCdtN0tZJEct_ZxRNj-X0auno,162
27
+ bizydraft-0.2.59.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
28
+ bizydraft-0.2.59.dist-info/top_level.txt,sha256=XtoBq6hjZhXIM7aas4GtPDtAiKo8FdLzMABXW8qqQ8M,10
29
+ bizydraft-0.2.59.dist-info/RECORD,,