bizydraft 0.2.31__py3-none-any.whl → 0.2.78.dev20251117024007__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.
@@ -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.31
3
+ Version: 0.2.78.dev20251117024007
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=TVK7zdSIe4wN5dusjnAr1we43K6B_Zup5-dWcBj5rxo,3545
6
+ bizydraft/oss_utils.py,sha256=IjWKFZ98KNvLw7bmFuqux5mEG36B8c9eQbQmL_gZo0M,16254
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=OQRhhoqvc8iZeCvHTtdaD2VTYBGzkeAGdCk1UMO2RZs,17525
14
+ bizydraft/static/js/clipspaceToOss.js,sha256=brfEPs71Tky5Dnc47UXNEFeFlESDE3kQvUH8ducpIew,14265
15
+ bizydraft/static/js/disableComfyWebSocket.js,sha256=ZDOVlU3v3EvWpMRkD8s_AnO43vuWojVLLjkF2pNEVrA,1957
16
+ bizydraft/static/js/freezeModeHandler.js,sha256=SjpHD2nYymR-E13B0YcqkA6e4WycZOVI3c48Ts9qvWE,18027
17
+ bizydraft/static/js/handleStyle.js,sha256=2zAD9zGktGwdi0VLw4cDvqkPGTh0yYBAniytIbfI9kU,3867
18
+ bizydraft/static/js/hookLoadMedia.js,sha256=EYDuitzOFvlNzM_e4IdE0-wXHQfnyCx7KrwzoxVTdr0,6363
19
+ bizydraft/static/js/hookLoadModel.js,sha256=r8ym8ih_w39bo_B0dZwnq-b00XOL-7dhM77R7_5J_Rc,8120
20
+ bizydraft/static/js/main.js,sha256=-pMeAG8vkKO6yq9zXCeHI78KezGn0r9AhYm65DuZrVI,188
21
+ bizydraft/static/js/nodeFocusHandler.js,sha256=24xXbS4Q-GjJdRqf11i-1pBo8MkOJ24F7MHFV44EG6Q,4683
22
+ bizydraft/static/js/nodeParamsFilter.js,sha256=H7lBB0G8HNqoGhOCH1hNXqPU-rPlrFyTxg_f_JgLEMk,4168
23
+ bizydraft/static/js/postEvent.js,sha256=_EyA71m5DwGbhHsuf1amKhpLUBxfBWZaMMxViNhuYzU,43481
24
+ bizydraft/static/js/socket.js,sha256=VE3fTAgEfM0FZhL526Skt7OCRokOa3mzTCAjAomI_tE,2432
25
+ bizydraft/static/js/tool.js,sha256=2Hhv2J18OaFZRWmHIlseahjd5Ot7ZVxUPb5z46YeXIo,2928
26
+ bizydraft/static/js/uploadFile.js,sha256=WvglKzHMeOzDhOH3P-fLcPHxCLbKOJpo4DntoRxeJtI,4908
27
+ bizydraft/static/js/workflow_io.js,sha256=FWAjncvWhvy-3nN_legD2fpRwgnIncpRLHU5X016a-U,5236
28
+ bizydraft/static/js/hookLoad/configLoader.js,sha256=R1k0GKdEmv4IIxdT2F-oOI9X9I19ECe77P_1tO3XxgY,2525
29
+ bizydraft/static/js/hookLoad/media.js,sha256=iX_zoZ0OzLAdYZ3bn5GpzpnwU-YjcBuEozQt-MwNuwk,17936
30
+ bizydraft/static/js/hookLoad/model.js,sha256=aHvEPt9k3CcrawHSYnQYcvbtTRwIztk-XDRA3lvgXvA,9890
31
+ bizydraft-0.2.78.dev20251117024007.dist-info/METADATA,sha256=UHr86vHNHIdSNQYagWYilP-23NkFtCZtyZxgGyHIRhQ,180
32
+ bizydraft-0.2.78.dev20251117024007.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
33
+ bizydraft-0.2.78.dev20251117024007.dist-info/top_level.txt,sha256=XtoBq6hjZhXIM7aas4GtPDtAiKo8FdLzMABXW8qqQ8M,10
34
+ bizydraft-0.2.78.dev20251117024007.dist-info/RECORD,,
@@ -1,173 +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
-
156
-
157
- }
158
- }
159
- }
160
- })
161
-
162
- // app.api.addEventListener('graphChanged', (e) => {
163
- // console.log('Graph 发生变化,当前 workflow JSON:', e.detail)
164
- // window.parent.postMessage({
165
- // type: 'functionResult',
166
- // method: 'workflowChanged',
167
- // result: e.detail
168
- // }, '*');
169
-
170
- // document.dispatchEvent(new CustomEvent('workflowLoaded', {
171
- // detail: e.detail
172
- // }));
173
- // })
@@ -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=6k2MvC0lhzg32zr14twuUMnAeYxPvUYWL2ID6Tv8cw8,2904
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=t3tefGg9d_2-VeNxqrwMMdX6JYE5uroyXZq0hXNWSzw,17572
14
- bizydraft/static/js/freezeModeHandler.js,sha256=l1-JK8hyFbJzQ6ylq6occUa_kwszPq9rDbKut48bn6s,17247
15
- bizydraft/static/js/handleStyle.js,sha256=o9JpjOqs_lLIr-jpqpGNjUN74XQPT8pD3fF5bjsHLAU,1466
16
- bizydraft/static/js/hookLoadImage.js,sha256=jQGckFr7bTLRiwcFsVmSy1mj_o7TKj1uup0QQ00qwbk,8079
17
- bizydraft/static/js/hookLoadModel.js,sha256=j_U-z275xxeu3XqgSVlrP8jKURWni5yUaG3pcJQ3ZGI,8582
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=5rafG9GjaesxmFD_8eSJQYHeSNWfOG3iWXLUPuaRWxg,38296
22
- bizydraft/static/js/socket.js,sha256=VE3fTAgEfM0FZhL526Skt7OCRokOa3mzTCAjAomI_tE,2432
23
- bizydraft/static/js/tool.js,sha256=dwVFLrT0pEsdOBkh2RRUDvyVo8GzOIVYg7vU5RiM0m0,2765
24
- bizydraft/static/js/uploadFile.js,sha256=WvglKzHMeOzDhOH3P-fLcPHxCLbKOJpo4DntoRxeJtI,4908
25
- bizydraft-0.2.31.dist-info/METADATA,sha256=8Hfs60uIUxadzzAuwZnIHzCwMtWqjV33z40yDVTpCa8,162
26
- bizydraft-0.2.31.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
27
- bizydraft-0.2.31.dist-info/top_level.txt,sha256=XtoBq6hjZhXIM7aas4GtPDtAiKo8FdLzMABXW8qqQ8M,10
28
- bizydraft-0.2.31.dist-info/RECORD,,