diff --git a/__init__.py b/__init__.py index 5f0f873..a1fd4c8 100644 --- a/__init__.py +++ b/__init__.py @@ -1,31 +1,26 @@ -import json -import re -import time -import aiohttp -import server -from aiohttp import web -from collections import deque -from .install import * -import os -import uuid import hashlib +import json +import os import platform +import re import stat -import urllib.request -import numpy as np -from .wss import thread_run, update_worker_flow -from .public import ( - get_port_from_cmdline, - set_token, - get_token, - get_version, - find_project_root, - args, - get_client_id, -) import threading -import folder_paths -from PIL import Image +import time +import urllib.request +import uuid +from collections import deque + +import aiohttp +import folder_paths # type: ignore +import numpy as np # type: ignore +import server # type: ignore +from aiohttp import web +from PIL import Image # type: ignore + +from .install import * +from .public import (args, find_project_root, get_client_id, + get_port_from_cmdline, get_token, get_version, set_token) +from .wss import thread_run, update_worker_flow input_directory = ( args.input_directory if args.input_directory else find_project_root() + "input" @@ -167,7 +162,7 @@ async def tech_zhulu(request): content_type="application/octet-stream", ) except Exception as e: - return web.Response(status=200, text=e) + return web.Response(status=200, text=str(e)) async with session.post(upload_url, data=form_data) as response: try: response_result = await response.text() @@ -252,7 +247,7 @@ class DeployCash: pass @classmethod - def INPUT_TYPES(s): + def INPUT_TYPES(cls): return { "required": { "app_title": ( @@ -371,7 +366,7 @@ class DeployCash_textInput: pass @classmethod - def INPUT_TYPES(s): + def INPUT_TYPES(cls): return { "required": { "text": ( @@ -398,7 +393,7 @@ class DeployCash_saveImage: self.compress_level = 4 @classmethod - def INPUT_TYPES(s): + def INPUT_TYPES(cls): return { "required": { "images": ("IMAGE",), diff --git a/public.py b/public.py index 1437f84..eea3b31 100644 --- a/public.py +++ b/public.py @@ -1,11 +1,12 @@ import hashlib -import os import json +import os +import re import sys import uuid from io import StringIO -import re -from comfy.cli_args import parser + +from comfy.cli_args import parser # type: ignore args = parser.parse_args() if args and args.listen: diff --git a/web/web.js b/web/web.js index 8578afc..ec95761 100644 --- a/web/web.js +++ b/web/web.js @@ -182,7 +182,7 @@ function getMsgByEnglish(en_str){ const msgDict = { 'Please wait...': '请稍后...', 'There can only be one "DeployCash" node in a workflow': '工作流中只能有一个"DeployCash"节点', - 'Please make sure that there is only one "SaveImgae", "DeployCash_saveImage" or "VHS_VideoCombine" node in the workflow.': '请确保工作流中只有一个"SaveImgae"、"DeployCash_saveImage"或"VHS_VideoCombine"节点。', + 'Please make sure that there is only one "SaveImgae", "DeployCash_saveImage" or "VHS_VideoCombine" node in the workflow.': '请确保工作流中只有一个"SaveImgae"、"DeployCash_saveImage"、"VHS_VideoCombine"或"SaveVideo"节点。', 'Instructions for use of works': '作品使用说明', '"app_img1" can only connect "LoadImage" node': '"app_img1" 只能连接 "LoadImage" 节点', '"app_img2" can only connect "LoadImage" node': '"app_img2" 只能连接 "LoadImage" 节点', @@ -265,7 +265,7 @@ function getPostData(prompt) { console.log(output[key].class_type) console.log(output[key].class_type) console.log(output[key].class_type) - if (output[key].class_type == 'SaveImage' || output[key].class_type == 'VHS_VideoCombine' || output[key].class_type == 'DeployCash_saveImage' || output[key].class_type == 'SaveGLB' || output[key].class_type == 'SaveAnimatedWEBP') { + if (output[key].class_type == 'SaveImage' || output[key].class_type == 'VHS_VideoCombine' || output[key].class_type == 'DeployCash_saveImage' || output[key].class_type == 'SaveGLB' || output[key].class_type == 'SaveAnimatedWEBP' || output[key].class_type == 'SaveVideo') { output[key].res_node = key; saveImageNodes.push(output[key]); } diff --git a/wss.py b/wss.py index 68c85be..3e03ce8 100644 --- a/wss.py +++ b/wss.py @@ -1,31 +1,25 @@ import asyncio +import collections import hashlib import json import os import queue import random +import threading import time import traceback import urllib -import aiohttp -import urllib.request import urllib.parse -import collections +import urllib.request from concurrent.futures import ThreadPoolExecutor -from threading import Lock, Condition +from threading import Condition, Lock + +import aiohttp import websockets -import threading -from .public import ( - get_output, - write_json_to_file, - get_address, - get_port, - get_port_from_cmdline, - args, - find_project_root, - get_workflow, - get_client_id, -) + +from .public import (args, find_project_root, get_address, get_client_id, + get_output, get_port, get_port_from_cmdline, get_workflow, + write_json_to_file) os.environ["http_proxy"] = "" os.environ["https_proxy"] = "" @@ -50,8 +44,10 @@ websocket_conn3 = None history_data = {"queue_running": [], "queue_pending": []} history_prompt_ids = [] -WEBSOCKETS_VERSION = tuple(map(int, websockets.__version__.split('.'))) +import importlib.metadata +WEBSOCKETS_VERSION = tuple(map(int, importlib.metadata.version("websockets").split('.'))) +# WEBSOCKETS_VERSION = tuple(map(int, websockets.__version__.split('.'))) def is_websocket_connected(websocket_conn): if websocket_conn is None: @@ -68,7 +64,8 @@ class MonitoredThreadPoolExecutor(ThreadPoolExecutor): self._lock = Lock() self._condition = Condition(self._lock) self._active_tasks = 0 - self._max_workers = max_workers + if max_workers: + self._max_workers = max_workers def submit(self, fn, *args, **kwargs): with self._lock: @@ -631,14 +628,16 @@ async def run_websocket_task_in_loop(): if is_websocket_connected(websocket_conn3) and is_websocket_connected(websocket_conn1): websocket_info["data"]["zhu_client_id"] = new_client_w_id if websocket_info["conn_identifier"] == 1: - await websocket_conn3.send( - json.dumps(websocket_info["data"]) - ) + if websocket_conn3 is not None: + await websocket_conn3.send( + json.dumps(websocket_info["data"]) + ) else: loop_num = loop_num + 1 if loop_num > 1000: loop_num = 0 - await websocket_conn3.send(json.dumps({ + if websocket_conn3 and is_websocket_connected(websocket_conn3): + await websocket_conn3.send(json.dumps({ 'time': get_time(), 'type': 'crystools.line', 'data': { @@ -958,16 +957,17 @@ async def websocket_connect_fu(uri, conn_identifier): async with websockets.connect(uri) as websocket: print(f"websocket_connect_fu {conn_identifier} 连接成功") websocket_conn3 = websocket - await websocket_conn3.send( - json.dumps( - { - "type": "crystools.bind", - "data": { - "client_id": new_client_w_id + "_fu", - }, - } + if websocket_conn3 and is_websocket_connected(websocket_conn3): + await websocket_conn3.send( + json.dumps( + { + "type": "crystools.bind", + "data": { + "client_id": new_client_w_id + "_fu", + }, + } + ) ) - ) reconnect_delay = RECONNECT_DELAY tasks = [ asyncio.create_task(run_websocket_task_in_loop()),