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.

@@ -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.49
3
+ Version: 0.2.87
4
4
  Summary: bizydraft
5
5
  Requires-Dist: loguru
6
6
  Requires-Dist: aiohttp
@@ -0,0 +1,34 @@
1
+ bizydraft/__init__.py,sha256=OM-sKCQrPh25nHVJIX-DgF1raMYyoWLSuyduIAHt0Gs,78
2
+ bizydraft/block_nodes.py,sha256=Lqn3oSCaGDHR2OICc8a2iRoRCVVK9v1-9MM3r-qIZgA,1092
3
+ bizydraft/env.py,sha256=VFmGopVL2TGWA6hwxyFhIglCEcQxy6iVvL_raMNd6u4,407
4
+ bizydraft/hijack_nodes.py,sha256=riHsp4DhU60E60bfXUl8kVqjs1QvQWmx_FsgQAdWTa4,4197
5
+ bizydraft/hijack_routes.py,sha256=j7i9xAfaWvcu-mSoDISQyEwdERd0y-GFhvY2To7MRTU,5015
6
+ bizydraft/oss_utils.py,sha256=_UzbS4e_MW5UynkQd2JI6edfdWxStm-Kbt6k7CvJJGA,16663
7
+ bizydraft/patch_handlers.py,sha256=cP6gIYBYghWXI72hBbz3BbQHP1O5IvslS8iNK29MEbI,14159
8
+ bizydraft/postload.py,sha256=XFElKcmCajT_oO7SVJJBaN04XcWro54N5HB5cSCxfvI,1308
9
+ bizydraft/prestartup_patch.py,sha256=4FGjmRcDHELjtlQOrfTfk2Un5OS89QIqfq-gEcB9WDs,998
10
+ bizydraft/resp.py,sha256=8INvKOe5Dgai3peKfqKjrhUoYeuXWXn358w30-_cY-A,369
11
+ bizydraft/server.py,sha256=L2zoJgOisr65IRphOyko74AdsLel59gh55peyMaUrO8,2102
12
+ bizydraft/workflow_io.py,sha256=MYhJbpgkv8hrA5k_aolijOTrWpTtu62nzRznA4hv8JE,4298
13
+ bizydraft/static/js/aiAppHandler.js,sha256=aiNOJeoc-jIV9RSuIERS86nEGyj9RbFDVD1eD0aPIH8,15710
14
+ bizydraft/static/js/clipspaceToOss.js,sha256=iiHjYoiQ2GAgj-d3VQhvf5DX7uJMk60dJ_VnmOsb_Mk,14728
15
+ bizydraft/static/js/disableComfyWebSocket.js,sha256=Kx4d7azNg0qGOZxUkG1mb4dFmEjxZ30yfhtKBZ2SEE8,1978
16
+ bizydraft/static/js/freezeModeHandler.js,sha256=P6sBWgaMsLMXz0ADuuGIKPyPbcB69iHJufY93peTCWk,16490
17
+ bizydraft/static/js/handleStyle.js,sha256=sYcyDoSGlLhb6fCCp6RTWZ2gq79TLc_Am1EP0NO26uk,6336
18
+ bizydraft/static/js/hookLoadMedia.js,sha256=dlXlVYIXgEkoWk-VEx22VeewUOw86gJHiI9Vu9SFVOA,6005
19
+ bizydraft/static/js/hookLoadModel.js,sha256=ho9ZTDtKtPQhigSwKjuKClC2X8jfU41-SFbHEonoSt0,7233
20
+ bizydraft/static/js/main.js,sha256=PRe4LdsquEQWrZDnVd4ubpVQuD1eDIedAXFFazKdoKQ,188
21
+ bizydraft/static/js/nodeFocusHandler.js,sha256=wJYfjbpkY4uTLfKLLLOGkIjmB4yU15DI3He4Sn28_c4,4414
22
+ bizydraft/static/js/nodeParamsFilter.js,sha256=muhsNLvXvChivtQfCujgr9r0RxP4kq3FgiQaMP_jfx8,3732
23
+ bizydraft/static/js/postEvent.js,sha256=2YPOcAkwnn3acOcvYGDkxto53x_ihr4WhVdEBnGILwg,37317
24
+ bizydraft/static/js/socket.js,sha256=S21_74fLF6syMcWONeRpQVXIOkniQRP5Evv-t508kVM,2525
25
+ bizydraft/static/js/tool.js,sha256=1Go2IXDTN_r7hDT2ZvOnpRpj1AkU88pBfQItva_IivE,2810
26
+ bizydraft/static/js/uploadFile.js,sha256=maDTrauNj24iOvUGwZxlc32fOKKF1_iifUVquGtKbGM,4995
27
+ bizydraft/static/js/workflow_io.js,sha256=m-WbjkJSYbTC5PvQ1jV9glVDa8pgkyTTQS2HnsLfNec,4771
28
+ bizydraft/static/js/hookLoad/configLoader.js,sha256=vJbraYque8QK8faNM7O8F0ONygGb9abKlm2P-juWrps,2331
29
+ bizydraft/static/js/hookLoad/media.js,sha256=yAag-VmrhEX0k-TRIX6CkOQC31Mk-5ify2_59Gm3GxA,17470
30
+ bizydraft/static/js/hookLoad/model.js,sha256=MF860un_kuODxbEFs8v9DueVWfvddvrsRpyLloVrFgo,9031
31
+ bizydraft-0.2.87.dist-info/METADATA,sha256=Pmt1qtVYBtooCH4CJIYqH_zMCDXjkH2J0yBJMV7C8gk,162
32
+ bizydraft-0.2.87.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
33
+ bizydraft-0.2.87.dist-info/top_level.txt,sha256=XtoBq6hjZhXIM7aas4GtPDtAiKo8FdLzMABXW8qqQ8M,10
34
+ bizydraft-0.2.87.dist-info/RECORD,,
@@ -1,177 +0,0 @@
1
- import { app } from "../../scripts/app.js";
2
- import { getCookie, computeIsLoadNode, computeExt, hideWidget } from './tool.js';
3
-
4
-
5
- app.registerExtension({
6
- name: "bizyair.image.to.oss",
7
- async beforeRegisterNodeDef(nodeType, nodeData) {
8
- let workflowParams = null
9
- document.addEventListener('workflowLoaded', (event) => {
10
- workflowParams = event.detail;
11
- })
12
- document.addEventListener('drop', (e) => {
13
- e.preventDefault();
14
- const files = e.dataTransfer.files;
15
-
16
- Array.from(files).forEach((file) => {
17
- if (file.type === 'application/json' || file.name.endsWith('.json')) {
18
- const reader = new FileReader();
19
- reader.onload = function(event) {
20
- try {
21
- const jsonContent = JSON.parse(event.target.result);
22
- if (jsonContent && jsonContent.nodes) {
23
- window.currentWorkflowData = jsonContent;
24
- }
25
- } catch (error) {
26
- console.error('解析JSON文件失败:', error);
27
- }
28
- };
29
- reader.readAsText(file);
30
- }
31
- });
32
- })
33
- if (computeIsLoadNode(nodeData.name)) {
34
- nodeType.prototype.onNodeCreated = async function() {
35
- const apiHost = 'https://bizyair.cn/api'
36
- const image_widget = this.widgets.find(w => {
37
- return w.name === 'image'
38
- || w.name === 'file'
39
- || w.name === 'audio'
40
- || w.name === 'model_file'
41
- });
42
- let image_name_widget = this.widgets.find(w => w.name === 'image_name');
43
- let image_list = []
44
- const getData = async () => {
45
- const res = await fetch(`${apiHost}/special/community/commit_input_resource?${
46
- new URLSearchParams({
47
- ext: computeExt(nodeData.name),
48
- current: 1,
49
- page_size: 100
50
-
51
- }).toString()
52
- }`, {
53
- method: 'GET',
54
- headers: {
55
- 'Content-Type': 'application/json',
56
- 'Authorization': `Bearer ${getCookie('bizy_token')}`
57
- }
58
- })
59
- const {data} = await res.json()
60
- const list = (data && data.data && data.data.data && data.data.data.list) || []
61
- image_list = list.filter(item => item.name).map(item => {
62
- return {
63
- url: item.url,
64
- id: item.id,
65
- name: item.name
66
- }
67
- })
68
- if (!image_name_widget) {
69
- image_name_widget = this.addWidget("combo", "image_name", "", function(e){
70
- const item = image_list.find(item => item.name === e)
71
- const image_url = decodeURIComponent(item.url);
72
- image_widget.value = image_url;
73
- if (image_widget.callback) {
74
- image_widget.callback(e);
75
- }
76
- }, {
77
- serialize: true,
78
- values: image_list.map(item => item.name)
79
- });
80
- }
81
- const val = image_list.find(item => item.url === image_widget.value)?.name || image_widget.value
82
- image_name_widget.label = image_widget.label
83
- image_name_widget.value = val
84
-
85
- const currentIndex = this.widgets.indexOf(image_name_widget);
86
- if (currentIndex > 1) {
87
- this.widgets.splice(currentIndex, 1);
88
- this.widgets.splice(1, 0, image_name_widget);
89
- }
90
- hideWidget(this, image_widget.name)
91
- image_widget.options.values = image_list.map(item => item.name);
92
-
93
- const callback = image_widget.callback
94
- image_widget.callback = async function(e) {
95
- console.log(e)
96
- if (typeof e == 'string') {
97
- const item = e.includes('http') ?
98
- image_list.find(item => item.url === e) :
99
- image_list.find(item => item.name === e)
100
-
101
- const image_url = item ? decodeURIComponent(item.url) : e;
102
-
103
- image_name_widget.value = item ? item.name : e;
104
- image_widget.value = image_url;
105
- console.log('=================image_url=================')
106
- console.log(image_url)
107
- console.log(item)
108
- console.log(await app.graphToPrompt())
109
- callback([image_url])
110
- console.log(await app.graphToPrompt())
111
- } else {
112
- const item = e[0].split('/')
113
- image_name_widget.options.values.pop()
114
- image_name_widget.options.values.push(item[item.length - 1])
115
- image_name_widget.value = item[item.length - 1]
116
- image_list.push({
117
- name: item[item.length - 1],
118
- url: e[0]
119
- })
120
- callback(e)
121
- }
122
- }
123
- return true
124
- }
125
- await getData()
126
-
127
-
128
- function applyWorkflowImageSettings(workflowParams, image_list, image_widget, image_name_widget) {
129
- if (workflowParams && workflowParams.nodes) {
130
- const imageNode = workflowParams.nodes.find(item => computeIsLoadNode(item.type))
131
- if (imageNode && imageNode.widgets_values) {
132
- const item = imageNode.widgets_values[0].split('/')
133
- image_list.push({
134
- name: item[item.length - 1],
135
- url: imageNode.widgets_values[0]
136
- })
137
- image_widget.value = imageNode.widgets_values[0]
138
-
139
- image_widget.options.values = image_list.map(item => item.url)
140
- image_name_widget.options.values = image_list.map(item => item.name)
141
- image_widget.callback(imageNode.widgets_values[0])
142
- }
143
- }
144
- }
145
-
146
- // 如果有存储的工作流数据,应用图像设置
147
- if (window.currentWorkflowData) {
148
- applyWorkflowImageSettings(window.currentWorkflowData, image_list, image_widget, image_name_widget);
149
- // 清除存储的数据,避免重复处理
150
- delete window.currentWorkflowData;
151
- } else {
152
- // 原有的调用
153
- applyWorkflowImageSettings(workflowParams, image_list, image_widget, image_name_widget);
154
- }
155
- //在这里发个postmessage
156
- window.parent.postMessage({
157
- type: 'functionResult',
158
- method: 'hookLoadImageCompleted',
159
- params: {}
160
- }, '*');
161
- }
162
- }
163
- }
164
- })
165
-
166
- // app.api.addEventListener('graphChanged', (e) => {
167
- // console.log('Graph 发生变化,当前 workflow JSON:', e.detail)
168
- // window.parent.postMessage({
169
- // type: 'functionResult',
170
- // method: 'workflowChanged',
171
- // result: e.detail
172
- // }, '*');
173
-
174
- // document.dispatchEvent(new CustomEvent('workflowLoaded', {
175
- // detail: e.detail
176
- // }));
177
- // })
@@ -1,28 +0,0 @@
1
- bizydraft/__init__.py,sha256=OM-sKCQrPh25nHVJIX-DgF1raMYyoWLSuyduIAHt0Gs,78
2
- bizydraft/block_nodes.py,sha256=Lqn3oSCaGDHR2OICc8a2iRoRCVVK9v1-9MM3r-qIZgA,1092
3
- bizydraft/env.py,sha256=nVh4xBKXWnRUPbHL3PqZr6VFN8txKsrsmshu8PFGaqo,299
4
- bizydraft/hijack_nodes.py,sha256=ktonkuI3NEctELUL9C0Hmv2-DaDr1MClGZWeHrP2VCA,3485
5
- bizydraft/hijack_routes.py,sha256=lf6x3xDzbo9yQIRwfG_1oxcUNfrX_1ogbiff3WOV9gM,3268
6
- bizydraft/oss_utils.py,sha256=W3-Td6K4vrB83oMowN82c3nmQ3IrEoR1UX6S8AvO6ig,7896
7
- bizydraft/patch_handlers.py,sha256=WPf4xeV5sBpoJ2MkHHhx0wem7B0KQNuhONElN7c9v3g,5989
8
- bizydraft/postload.py,sha256=XFElKcmCajT_oO7SVJJBaN04XcWro54N5HB5cSCxfvI,1308
9
- bizydraft/prestartup_patch.py,sha256=4FGjmRcDHELjtlQOrfTfk2Un5OS89QIqfq-gEcB9WDs,998
10
- bizydraft/resp.py,sha256=8INvKOe5Dgai3peKfqKjrhUoYeuXWXn358w30-_cY-A,369
11
- bizydraft/server.py,sha256=L2zoJgOisr65IRphOyko74AdsLel59gh55peyMaUrO8,2102
12
- bizydraft/workflow_io.py,sha256=MYhJbpgkv8hrA5k_aolijOTrWpTtu62nzRznA4hv8JE,4298
13
- bizydraft/static/js/aiAppHandler.js,sha256=SBGms27-DYyc5uBluN9ScliW-zUAdw5cS6VQ4BV-_CQ,17816
14
- bizydraft/static/js/freezeModeHandler.js,sha256=SjpHD2nYymR-E13B0YcqkA6e4WycZOVI3c48Ts9qvWE,18027
15
- bizydraft/static/js/handleStyle.js,sha256=rUlgc-_vH76828Fv9zxTHq9UFj2AHANIUELArhl5lvU,2956
16
- bizydraft/static/js/hookLoadImage.js,sha256=DVUe-Ovc1G5DOOZ7bWjSiWJWEz7FBlmhEb_JKCtscu8,8320
17
- bizydraft/static/js/hookLoadModel.js,sha256=1a4lDiE0l_nl8ajaEz8I9CFPdW3b7vjhwpyfr0yMUak,9641
18
- bizydraft/static/js/main.js,sha256=oEsVEUZSo8ipx93oqs2WFQSRgp46XQ_D-Xao-wen2S8,121
19
- bizydraft/static/js/nodeFocusHandler.js,sha256=24xXbS4Q-GjJdRqf11i-1pBo8MkOJ24F7MHFV44EG6Q,4683
20
- bizydraft/static/js/nodeParamsFilter.js,sha256=H7lBB0G8HNqoGhOCH1hNXqPU-rPlrFyTxg_f_JgLEMk,4168
21
- bizydraft/static/js/postEvent.js,sha256=AEeph8HpmIn5qeyebkh5FzcKW6GRh7PGDHci66yKaHA,40200
22
- bizydraft/static/js/socket.js,sha256=VE3fTAgEfM0FZhL526Skt7OCRokOa3mzTCAjAomI_tE,2432
23
- bizydraft/static/js/tool.js,sha256=VupamUuh7tYiDnBTrL5Z_yLmhJinskhzRXwE3zfsKZM,2901
24
- bizydraft/static/js/uploadFile.js,sha256=WvglKzHMeOzDhOH3P-fLcPHxCLbKOJpo4DntoRxeJtI,4908
25
- bizydraft-0.2.49.dist-info/METADATA,sha256=z1Aq6g8siuV0MlRH4rHNYJ_cHudcPQ6yHvJKIYbY1I0,162
26
- bizydraft-0.2.49.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
27
- bizydraft-0.2.49.dist-info/top_level.txt,sha256=XtoBq6hjZhXIM7aas4GtPDtAiKo8FdLzMABXW8qqQ8M,10
28
- bizydraft-0.2.49.dist-info/RECORD,,