From bfcadde5c36a5ebd48de4a0cb253214ae890f862 Mon Sep 17 00:00:00 2001 From: shadowcz007 Date: Sat, 17 Aug 2024 14:22:31 +0800 Subject: [PATCH] update --- __init__.py | 60 ++ ...50\265\233\346\250\241\346\235\277_4.json" | 1 - example/Image-to-Image_2.json | 1 - example/Text-to-Image_3.json | 704 ------------------ pyproject.toml | 2 +- web/javascript/3d_mixlab.js | 37 +- web/javascript/app_mixlab.js | 62 +- web/javascript/chat.js | 100 ++- web/javascript/command.js | 697 ----------------- web/javascript/common.js | 168 +++++ web/javascript/main_mixlab.js | 94 +-- web/javascript/ui_mixlab.js | 317 ++++---- web/javascript/utils_mixlab.js | 84 +-- workflow/5-gpt-workflow.json | 631 ---------------- workflow/6-gpt-all-workflow.json | 251 ------- 15 files changed, 546 insertions(+), 2663 deletions(-) delete mode 100644 "example/AIPC\345\244\247\350\265\233\346\250\241\346\235\277_4.json" delete mode 100644 example/Image-to-Image_2.json delete mode 100644 example/Text-to-Image_3.json delete mode 100644 web/javascript/command.js create mode 100644 web/javascript/common.js delete mode 100644 workflow/5-gpt-workflow.json delete mode 100644 workflow/6-gpt-all-workflow.json diff --git a/__init__.py b/__init__.py index 1251118f..c33b3913 100644 --- a/__init__.py +++ b/__init__.py @@ -32,6 +32,7 @@ # except: # print("##nodes.ChatGPT ImportError") +from .nodes.ChatGPT import openai_client from .nodes.RembgNode import get_rembg_models,U2NET_HOME,run_briarmbg,run_rembg @@ -584,6 +585,65 @@ async def mixlab_hander(request): print(e) return web.json_response(data) +# llm的api key,使用硅基流动 +@routes.post('/mixlab/llm_api_key') +async def mixlab_llm_api_key_handler(request): + data = await request.json() + api_key = data.get('key') + + app_folder = os.path.join(current_path, "app") + key_file_path = os.path.join(app_folder, "llm_api_key.txt") + + if api_key: + if not os.path.exists(app_folder): + os.makedirs(app_folder) + try: + with open(key_file_path, 'w') as f: + f.write(api_key) + return web.json_response({'message': 'API key saved successfully'}) + except Exception as e: + return web.json_response({'error': str(e)}, status=500) + else: + if os.path.exists(key_file_path): + try: + with open(key_file_path, 'r') as f: + saved_api_key = f.read().strip() + return web.json_response({'key': saved_api_key}) + except Exception as e: + return web.json_response({'error': str(e)}, status=500) + else: + return web.json_response({'error': 'No API key provided and no key found in local storage'}, status=400) + + +@routes.post('/chat/completions') +async def chat_completions(request): + data = await request.json() + messages = data.get('messages') + key=data.get('key') + if not messages: + return web.json_response({"error": "No messages provided"}, status=400) + + async def generate(): + try: + client=openai_client(key,"https://api.siliconflow.cn/v1") + + response = client.chat.completions.create( + model="01-ai/Yi-1.5-9B-Chat-16K", + messages=messages, + stream=True + ) + + for chunk in response: + if hasattr(chunk.choices[0].delta, 'content'): + content = chunk.choices[0].delta.content + if content is not None: + yield content.encode('utf-8') + b"\r\n" + + except Exception as e: + yield f"Error: {str(e)}".encode('utf-8') + b"\r\n" + + return web.Response(body=generate(), content_type='text/event-stream') + @routes.get('/mixlab/app') async def mixlab_app_handler(request): diff --git "a/example/AIPC\345\244\247\350\265\233\346\250\241\346\235\277_4.json" "b/example/AIPC\345\244\247\350\265\233\346\250\241\346\235\277_4.json" deleted file mode 100644 index b5468e7e..00000000 --- "a/example/AIPC\345\244\247\350\265\233\346\250\241\346\235\277_4.json" +++ /dev/null @@ -1 +0,0 @@ -{"workflow": {"last_node_id": 128, "last_link_id": 207, "nodes": [{"id": 8, "type": "PreviewImage", "pos": [2521.460559703692, -1587.2180470095893], "size": {"0": 210, "1": 246}, "flags": {}, "order": 18, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 14}], "properties": {"Node name for S&R": "PreviewImage"}}, {"id": 14, "type": "PreviewImage", "pos": [2535.460559703692, -1204.2180470095905], "size": {"0": 210, "1": 246}, "flags": {}, "order": 21, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 17}], "properties": {"Node name for S&R": "PreviewImage"}}, {"id": 7, "type": "LoadImagesFromURL", "pos": [1711.42830256307, -1599.3206325408398], "size": {"0": 400, "1": 200}, "flags": {}, "order": 0, "mode": 0, "outputs": [{"name": "images", "type": "IMAGE", "links": [12, 119, 128], "shape": 6, "slot_index": 0}, {"name": "masks", "type": "MASK", "links": [13, 117], "shape": 6, "slot_index": 1}], "title": "# 3-4", "properties": {"Node name for S&R": "LoadImagesFromURL"}, "widgets_values": ["https://www.mixcomfy.com/assets/images/AIPC3-4.png"]}, {"id": 11, "type": "LoadImagesFromURL", "pos": [1695.4605597036943, -1264.2180470095902], "size": {"0": 400, "1": 200}, "flags": {}, "order": 1, "mode": 0, "outputs": [{"name": "images", "type": "IMAGE", "links": [15, 124, 129], "shape": 6, "slot_index": 0}, {"name": "masks", "type": "MASK", "links": [16, 125], "shape": 6, "slot_index": 1}], "title": "# 9-16", "properties": {"Node name for S&R": "LoadImagesFromURL"}, "widgets_values": ["https://www.mixcomfy.com/assets/images/AIPC9-16.png"]}, {"id": 55, "type": "GetImageSize_", "pos": [3005.974020506248, -1121.2566086687507], "size": {"0": 210, "1": 46}, "flags": {}, "order": 9, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 128}], "outputs": [{"name": "width", "type": "INT", "links": [79], "shape": 3, "slot_index": 0}, {"name": "height", "type": "INT", "links": [80], "shape": 3, "slot_index": 1}], "properties": {"Node name for S&R": "GetImageSize_"}}, {"id": 70, "type": "GetImageSize_", "pos": [2996.974020506248, -938.2566086687494], "size": {"0": 210, "1": 46}, "flags": {}, "order": 11, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 129}], "outputs": [{"name": "width", "type": "INT", "links": [120], "shape": 3, "slot_index": 0}, {"name": "height", "type": "INT", "links": [121], "shape": 3, "slot_index": 1}], "properties": {"Node name for S&R": "GetImageSize_"}}, {"id": 71, "type": "GetImageSize_", "pos": [2998.974020506248, -734.2566086687494], "size": {"0": 210, "1": 46}, "flags": {}, "order": 13, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 130}], "outputs": [{"name": "width", "type": "INT", "links": [122], "shape": 3, "slot_index": 0}, {"name": "height", "type": "INT", "links": [123], "shape": 3, "slot_index": 1}], "properties": {"Node name for S&R": "GetImageSize_"}}, {"id": 49, "type": "NewLayer", "pos": [3301.974020506248, -1186.2566086687507], "size": {"0": 210, "1": 262}, "flags": {}, "order": 17, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 119}, {"name": "mask", "type": "MASK", "link": 117}, {"name": "layers", "type": "LAYER", "link": null}, {"name": "canvas", "type": "IMAGE", "link": null}, {"name": "width", "type": "INT", "link": 79, "widget": {"name": "width"}}, {"name": "height", "type": "INT", "link": 80, "widget": {"name": "height"}}], "outputs": [{"name": "layers", "type": "LAYER", "links": [113], "shape": 6, "slot_index": 0}], "properties": {"Node name for S&R": "NewLayer"}, "widgets_values": [0, 0, 512, 512, 1, "width", ""]}, {"id": 68, "type": "NewLayer", "pos": [3322.974020506248, -877.2566086687494], "size": {"0": 210, "1": 262}, "flags": {}, "order": 20, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 124}, {"name": "mask", "type": "MASK", "link": 125}, {"name": "layers", "type": "LAYER", "link": null}, {"name": "canvas", "type": "IMAGE", "link": null}, {"name": "width", "type": "INT", "link": 120, "widget": {"name": "width"}}, {"name": "height", "type": "INT", "link": 121, "widget": {"name": "height"}}], "outputs": [{"name": "layers", "type": "LAYER", "links": [114], "shape": 6, "slot_index": 0}], "properties": {"Node name for S&R": "NewLayer"}, "widgets_values": [0, 0, 512, 512, 1, "width", ""]}, {"id": 76, "type": "PreviewImage", "pos": [3488.369251598011, -1663.088123668324], "size": {"0": 210, "1": 246}, "flags": {}, "order": 26, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 142}], "properties": {"Node name for S&R": "PreviewImage"}}, {"id": 58, "type": "NewLayer", "pos": [3689.974020506248, -1178.2566086687507], "size": {"0": 210, "1": 262}, "flags": {}, "order": 28, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 92}, {"name": "mask", "type": "MASK", "link": 85}, {"name": "layers", "type": "LAYER", "link": 113}, {"name": "canvas", "type": "IMAGE", "link": 88}], "outputs": [{"name": "layers", "type": "LAYER", "links": [131], "shape": 6, "slot_index": 0}], "properties": {"Node name for S&R": "NewLayer"}, "widgets_values": [968, 1381, 114, 22, 2, "height", ""]}, {"id": 63, "type": "NewLayer", "pos": [3681.974020506248, -857.2566086687494], "size": {"0": 210, "1": 262}, "flags": {}, "order": 30, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 103}, {"name": "mask", "type": "MASK", "link": 94}, {"name": "layers", "type": "LAYER", "link": 114}, {"name": "canvas", "type": "IMAGE", "link": 95}], "outputs": [{"name": "layers", "type": "LAYER", "links": [135], "shape": 6, "slot_index": 0}], "properties": {"Node name for S&R": "NewLayer"}, "widgets_values": [971, 1818, 87, 22, 2, "height", ""]}, {"id": 101, "type": "PreviewImage", "pos": [5328.397364750004, -1726.0537115390628], "size": {"0": 210, "1": 246}, "flags": {}, "order": 27, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 161}], "properties": {"Node name for S&R": "PreviewImage"}}, {"id": 21, "type": "Note", "pos": [5329.397364750004, -1946.0537115390628], "size": {"0": 210, "1": 166.71800231933594}, "flags": {}, "order": 2, "mode": 0, "properties": {"text": ""}, "widgets_values": ["\u5206\u4eab\u4fe1\u606f"], "color": "#432", "bgcolor": "#653"}, {"id": 40, "type": "LoadImagesFromURL", "pos": [4928.397364750004, -1961.0537115390628], "size": {"0": 210, "1": 117.2959976196289}, "flags": {}, "order": 3, "mode": 0, "outputs": [{"name": "images", "type": "IMAGE", "links": [], "shape": 6, "slot_index": 0}, {"name": "masks", "type": "MASK", "links": null, "shape": 6}], "properties": {"Node name for S&R": "LoadImagesFromURL"}, "widgets_values": ["https://www.mixcomfy.com/assets/images/mixlab_logo_b.png"]}, {"id": 65, "type": "NewLayer", "pos": [3683, -525], "size": {"0": 210, "1": 262}, "flags": {}, "order": 32, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 102}, {"name": "mask", "type": "MASK", "link": 100}, {"name": "layers", "type": "LAYER", "link": 115}, {"name": "canvas", "type": "IMAGE", "link": 99}], "outputs": [{"name": "layers", "type": "LAYER", "links": [138], "shape": 6, "slot_index": 0}], "properties": {"Node name for S&R": "NewLayer"}, "widgets_values": [1791, 1000, 120, 23, 2, "height", ""]}, {"id": 69, "type": "NewLayer", "pos": [3331, -547], "size": {"0": 210, "1": 262}, "flags": {}, "order": 23, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 126}, {"name": "mask", "type": "MASK", "link": 127}, {"name": "layers", "type": "LAYER", "link": null}, {"name": "canvas", "type": "IMAGE", "link": null}, {"name": "width", "type": "INT", "link": 122, "widget": {"name": "width"}}, {"name": "height", "type": "INT", "link": 123, "widget": {"name": "height"}}], "outputs": [{"name": "layers", "type": "LAYER", "links": [115], "shape": 6, "slot_index": 0}], "properties": {"Node name for S&R": "NewLayer"}, "widgets_values": [0, 0, 512, 512, 1, "width", ""]}, {"id": 18, "type": "PreviewImage", "pos": [2550.3720433339645, -773.3056833328795], "size": {"0": 210, "1": 246}, "flags": {}, "order": 24, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 20}], "properties": {"Node name for S&R": "PreviewImage"}}, {"id": 17, "type": "TransparentImage", "pos": [2192.460559703692, -768.2180470095883], "size": {"0": 315, "1": 358.0000305175781}, "flags": {}, "order": 14, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 18}, {"name": "masks", "type": "MASK", "link": 19}], "outputs": [{"name": "file_path", "type": "STRING", "links": null, "shape": 6}, {"name": "IMAGE", "type": "IMAGE", "links": [20, 99, 189], "shape": 6, "slot_index": 1}, {"name": "RGBA", "type": "RGBA", "links": null, "shape": 6}], "properties": {"Node name for S&R": "TransparentImage"}, "widgets_values": ["yes", "no", "Mixlab_save"]}, {"id": 121, "type": "GetImageSize_", "pos": [3007.0709458493775, -116.84108583414061], "size": {"0": 210, "1": 46}, "flags": {}, "order": 25, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 189}], "outputs": [{"name": "width", "type": "INT", "links": [190], "shape": 3, "slot_index": 0}, {"name": "height", "type": "INT", "links": [191], "shape": 3, "slot_index": 1}], "properties": {"Node name for S&R": "GetImageSize_"}}, {"id": 13, "type": "TransparentImage", "pos": [2188.460559703692, -1215.2180470095902], "size": {"0": 315, "1": 358.0000305175781}, "flags": {}, "order": 12, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 15}, {"name": "masks", "type": "MASK", "link": 16}], "outputs": [{"name": "file_path", "type": "STRING", "links": null, "shape": 6}, {"name": "IMAGE", "type": "IMAGE", "links": [17, 95, 195], "shape": 6, "slot_index": 1}, {"name": "RGBA", "type": "RGBA", "links": null, "shape": 6}], "properties": {"Node name for S&R": "TransparentImage"}, "widgets_values": ["yes", "no", "Mixlab_save"]}, {"id": 12, "type": "TransparentImage", "pos": [2169.460559703692, -1640.2180470095893], "size": {"0": 315, "1": 358.0000305175781}, "flags": {}, "order": 10, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 12}, {"name": "masks", "type": "MASK", "link": 13}], "outputs": [{"name": "file_path", "type": "STRING", "links": null, "shape": 6}, {"name": "IMAGE", "type": "IMAGE", "links": [14, 88, 199], "shape": 6, "slot_index": 1}, {"name": "RGBA", "type": "RGBA", "links": null, "shape": 6}], "properties": {"Node name for S&R": "TransparentImage"}, "widgets_values": ["yes", "no", "Mixlab_save"]}, {"id": 125, "type": "GetImageSize_", "pos": [2996.0709458493775, 396.1589141658592], "size": {"0": 210, "1": 46}, "flags": {}, "order": 19, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 199}], "outputs": [{"name": "width", "type": "INT", "links": [196], "shape": 3, "slot_index": 0}, {"name": "height", "type": "INT", "links": [197], "shape": 3, "slot_index": 1}], "properties": {"Node name for S&R": "GetImageSize_"}}, {"id": 16, "type": "LoadImagesFromURL", "pos": [1703.3720433339654, -957.3056833328795], "size": {"0": 400, "1": 200}, "flags": {"pinned": false}, "order": 4, "mode": 0, "outputs": [{"name": "images", "type": "IMAGE", "links": [18, 126, 130], "shape": 6, "slot_index": 0}, {"name": "masks", "type": "MASK", "links": [19, 127], "shape": 6, "slot_index": 1}], "title": "# 16-9", "properties": {"Node name for S&R": "LoadImagesFromURL"}, "widgets_values": ["https://www.mixcomfy.com/assets/images/AIPC16-9.png"]}, {"id": 72, "type": "MergeLayers", "pos": [3955.974020506248, -1182.2566086687507], "size": {"0": 210, "1": 46}, "flags": {}, "order": 34, "mode": 0, "inputs": [{"name": "layers", "type": "LAYER", "link": 131}, {"name": "images", "type": "IMAGE", "link": 198}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [202], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "MergeLayers"}}, {"id": 73, "type": "MergeLayers", "pos": [3965, -842], "size": {"0": 210, "1": 46}, "flags": {}, "order": 35, "mode": 0, "inputs": [{"name": "layers", "type": "LAYER", "link": 135}, {"name": "images", "type": "IMAGE", "link": 194}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [203], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "MergeLayers"}}, {"id": 74, "type": "MergeLayers", "pos": [3956.974020506248, -510.2566086687502], "size": {"0": 210, "1": 46}, "flags": {}, "order": 36, "mode": 0, "inputs": [{"name": "layers", "type": "LAYER", "link": 138}, {"name": "images", "type": "IMAGE", "link": 188}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [204], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "MergeLayers"}}, {"id": 75, "type": "TextInput_", "pos": [2991, -1909], "size": {"0": 325.0866394042969, "1": 121.88375854492188}, "flags": {}, "order": 5, "mode": 0, "outputs": [{"name": "STRING", "type": "STRING", "links": [141], "shape": 3, "slot_index": 0}], "title": "\u4f60\u7684\u59d3\u540d/\u6635\u79f0", "properties": {"Node name for S&R": "TextInput_"}, "widgets_values": ["shadow"]}, {"id": 57, "type": "PreviewImage", "pos": [4318, -1243], "size": {"0": 382.9111022949219, "1": 532.8897705078125}, "flags": {}, "order": 37, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 202}], "properties": {"Node name for S&R": "PreviewImage"}}, {"id": 126, "type": "PreviewImage", "pos": [4738, -1242], "size": {"0": 368.4781188964844, "1": 553.1112670898438}, "flags": {}, "order": 38, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 203}], "properties": {"Node name for S&R": "PreviewImage"}}, {"id": 122, "type": "ResizeImageMixlab", "pos": [3247.0709458493775, 143.15891416585947], "size": {"0": 315, "1": 150}, "flags": {}, "order": 31, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 200}, {"name": "width", "type": "INT", "link": 192, "widget": {"name": "width"}}, {"name": "height", "type": "INT", "link": 193, "widget": {"name": "height"}}], "outputs": [{"name": "image", "type": "IMAGE", "links": [194], "shape": 6, "slot_index": 0}, {"name": "average_image", "type": "IMAGE", "links": null, "shape": 6}], "properties": {"Node name for S&R": "ResizeImageMixlab"}, "widgets_values": [512, 512, "center", "off", "#FFFFFF"]}, {"id": 123, "type": "GetImageSize_", "pos": [3004, 156], "size": {"0": 210, "1": 46}, "flags": {}, "order": 22, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 195}], "outputs": [{"name": "width", "type": "INT", "links": [192], "shape": 3, "slot_index": 0}, {"name": "height", "type": "INT", "links": [193], "shape": 3, "slot_index": 1}], "properties": {"Node name for S&R": "GetImageSize_"}}, {"id": 127, "type": "PreviewImage", "pos": [4305, -631], "size": {"0": 378.9849548339844, "1": 499.6607971191406}, "flags": {}, "order": 39, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 204}], "properties": {"Node name for S&R": "PreviewImage"}}, {"id": 118, "type": "LoadImage", "pos": [2358, -36], "size": {"0": 315, "1": 314}, "flags": {}, "order": 6, "mode": 0, "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [185, 200, 201], "shape": 3, "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": null, "shape": 3}], "title": "\u4f60\u7684\u4f5c\u54c1", "properties": {"Node name for S&R": "LoadImage"}, "widgets_values": ["1703554480406.png", "image"]}, {"id": 119, "type": "ResizeImageMixlab", "pos": [3277, -137], "size": {"0": 315, "1": 150}, "flags": {}, "order": 33, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 185}, {"name": "width", "type": "INT", "link": 190, "widget": {"name": "width"}}, {"name": "height", "type": "INT", "link": 191, "widget": {"name": "height"}}], "outputs": [{"name": "image", "type": "IMAGE", "links": [188], "shape": 6, "slot_index": 0}, {"name": "average_image", "type": "IMAGE", "links": null, "shape": 6}], "properties": {"Node name for S&R": "ResizeImageMixlab"}, "widgets_values": [512, 512, "center", "off", "#FFFFFF"]}, {"id": 124, "type": "ResizeImageMixlab", "pos": [3257, 359], "size": {"0": 315, "1": 150}, "flags": {}, "order": 29, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 201}, {"name": "width", "type": "INT", "link": 196, "widget": {"name": "width"}}, {"name": "height", "type": "INT", "link": 197, "widget": {"name": "height"}}], "outputs": [{"name": "image", "type": "IMAGE", "links": [198], "shape": 6, "slot_index": 0}, {"name": "average_image", "type": "IMAGE", "links": null, "shape": 6}], "properties": {"Node name for S&R": "ResizeImageMixlab"}, "widgets_values": [512, 512, "center", "off", "#FFFFFF"]}, {"id": 60, "type": "Font", "pos": [2990.1117677550033, -1666.4395648128136], "size": {"0": 315, "1": 58}, "flags": {}, "order": 7, "mode": 0, "outputs": [{"name": "STRING", "type": "STRING", "links": [82], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "Font"}, "widgets_values": ["FangSong"]}, {"id": 59, "type": "TextImage", "pos": [2990, -1540], "size": {"0": 400, "1": 216}, "flags": {}, "order": 15, "mode": 0, "inputs": [{"name": "font_path", "type": "STRING", "link": 82, "widget": {"name": "font_path"}}, {"name": "text", "type": "STRING", "link": 141, "widget": {"name": "text"}}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [92, 102, 103, 142], "shape": 3, "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": [85, 94, 100], "shape": 3, "slot_index": 1}], "properties": {"Node name for S&R": "TextImage"}, "widgets_values": ["shadow", "C:\\Users\\38957\\Documents\\ai-lab\\ComfyUI_windows_portable\\ComfyUI\\custom_nodes\\comfyui-mixlab-nodes\\assets\\\u738b\u6c49\u5b97\u989c\u6977\u4f53\u7e41.ttf", 101, 0, "#000000", false]}, {"id": 98, "type": "AppInfo", "pos": [4922.397364750004, -1807.0537115390628], "size": {"0": 362.42608642578125, "1": 431.3537902832031}, "flags": {}, "order": 16, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 162}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [161], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "AppInfo"}, "widgets_values": ["AIPC\u5927\u8d5b\u6a21\u677f", "\n75\n118", "57\n126\n127\n", "\u6295\u7a3f\u6a21\u677f#\u53d1\u6325\u4f60\u7684\u60f3\u8c61\u529b", 4, "#AIPC# \u53c2\u8d5b\u4f5c\u54c1", "https://www.weibo.com", "", null]}, {"id": 106, "type": "LoadImage", "pos": [4535, -1843], "size": [210, 314], "flags": {}, "order": 8, "mode": 0, "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [162], "shape": 3, "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": null, "shape": 3}], "properties": {"Node name for S&R": "LoadImage"}, "widgets_values": ["1703759043279.png", "image"]}], "links": [[12, 7, 0, 12, 0, "IMAGE"], [13, 7, 1, 12, 1, "MASK"], [14, 12, 1, 8, 0, "IMAGE"], [15, 11, 0, 13, 0, "IMAGE"], [16, 11, 1, 13, 1, "MASK"], [17, 13, 1, 14, 0, "IMAGE"], [18, 16, 0, 17, 0, "IMAGE"], [19, 16, 1, 17, 1, "MASK"], [20, 17, 1, 18, 0, "IMAGE"], [79, 55, 0, 49, 4, "INT"], [80, 55, 1, 49, 5, "INT"], [82, 60, 0, 59, 0, "STRING"], [85, 59, 1, 58, 1, "MASK"], [88, 12, 1, 58, 3, "IMAGE"], [92, 59, 0, 58, 0, "IMAGE"], [94, 59, 1, 63, 1, "MASK"], [95, 13, 1, 63, 3, "IMAGE"], [99, 17, 1, 65, 3, "IMAGE"], [100, 59, 1, 65, 1, "MASK"], [102, 59, 0, 65, 0, "IMAGE"], [103, 59, 0, 63, 0, "IMAGE"], [113, 49, 0, 58, 2, "LAYER"], [114, 68, 0, 63, 2, "LAYER"], [115, 69, 0, 65, 2, "LAYER"], [117, 7, 1, 49, 1, "MASK"], [119, 7, 0, 49, 0, "IMAGE"], [120, 70, 0, 68, 4, "INT"], [121, 70, 1, 68, 5, "INT"], [122, 71, 0, 69, 4, "INT"], [123, 71, 1, 69, 5, "INT"], [124, 11, 0, 68, 0, "IMAGE"], [125, 11, 1, 68, 1, "MASK"], [126, 16, 0, 69, 0, "IMAGE"], [127, 16, 1, 69, 1, "MASK"], [128, 7, 0, 55, 0, "IMAGE"], [129, 11, 0, 70, 0, "IMAGE"], [130, 16, 0, 71, 0, "IMAGE"], [131, 58, 0, 72, 0, "LAYER"], [135, 63, 0, 73, 0, "LAYER"], [138, 65, 0, 74, 0, "LAYER"], [141, 75, 0, 59, 1, "STRING"], [142, 59, 0, 76, 0, "IMAGE"], [161, 98, 0, 101, 0, "IMAGE"], [162, 106, 0, 98, 0, "IMAGE"], [185, 118, 0, 119, 0, "IMAGE"], [188, 119, 0, 74, 1, "IMAGE"], [189, 17, 1, 121, 0, "IMAGE"], [190, 121, 0, 119, 1, "INT"], [191, 121, 1, 119, 2, "INT"], [192, 123, 0, 122, 1, "INT"], [193, 123, 1, 122, 2, "INT"], [194, 122, 0, 73, 1, "IMAGE"], [195, 13, 1, 123, 0, "IMAGE"], [196, 125, 0, 124, 1, "INT"], [197, 125, 1, 124, 2, "INT"], [198, 124, 0, 72, 1, "IMAGE"], [199, 12, 1, 125, 0, "IMAGE"], [200, 118, 0, 122, 0, "IMAGE"], [201, 118, 0, 124, 0, "IMAGE"], [202, 72, 0, 57, 0, "IMAGE"], [203, 73, 0, 126, 0, "IMAGE"], [204, 74, 0, 127, 0, "IMAGE"]], "groups": [{"title": "\u6a21\u677f", "bounding": [1685, -1714, 1070, 1314], "color": "#3f789e", "font_size": 24, "locked": false}, {"title": "Group", "bounding": [4912, -2035, 637, 669], "color": "#444", "font_size": 24, "locked": false}, {"title": "Group", "bounding": [2981, -1993, 728, 216], "color": "#A88", "font_size": 24, "locked": false}, {"title": "Group", "bounding": [2987, -1260, 1198, 1007], "color": "#88A", "font_size": 24, "locked": false}, {"title": "Group", "bounding": [2979, -1741, 420, 426], "color": "#3f789e", "font_size": 24, "locked": false}, {"title": "Group", "bounding": [2986, -211, 616, 730], "color": "#3f789e", "font_size": 24, "locked": false}], "config": {}, "extra": {}, "version": 0.4}, "output": {"7": {"inputs": {"url": "https://www.mixcomfy.com/assets/images/AIPC3-4.png"}, "class_type": "LoadImagesFromURL"}, "8": {"inputs": {"images": ["12", 1]}, "class_type": "PreviewImage"}, "11": {"inputs": {"url": "https://www.mixcomfy.com/assets/images/AIPC9-16.png"}, "class_type": "LoadImagesFromURL"}, "12": {"inputs": {"invert": "yes", "save": "no", "filename_prefix": "Mixlab_save", "images": ["7", 0], "masks": ["7", 1]}, "class_type": "TransparentImage"}, "13": {"inputs": {"invert": "yes", "save": "no", "filename_prefix": "Mixlab_save", "images": ["11", 0], "masks": ["11", 1]}, "class_type": "TransparentImage"}, "14": {"inputs": {"images": ["13", 1]}, "class_type": "PreviewImage"}, "16": {"inputs": {"url": "https://www.mixcomfy.com/assets/images/AIPC16-9.png"}, "class_type": "LoadImagesFromURL"}, "17": {"inputs": {"invert": "yes", "save": "no", "filename_prefix": "Mixlab_save", "images": ["16", 0], "masks": ["16", 1]}, "class_type": "TransparentImage"}, "18": {"inputs": {"images": ["17", 1]}, "class_type": "PreviewImage"}, "40": {"inputs": {"url": "https://www.mixcomfy.com/assets/images/mixlab_logo_b.png"}, "class_type": "LoadImagesFromURL"}, "49": {"inputs": {"x": 0, "y": 0, "width": ["55", 0], "height": ["55", 1], "z_index": 1, "scale_option": "width", "Set Area": "", "image": ["7", 0], "mask": ["7", 1]}, "class_type": "NewLayer"}, "55": {"inputs": {"image": ["7", 0]}, "class_type": "GetImageSize_"}, "57": {"inputs": {"images": ["72", 0]}, "class_type": "PreviewImage"}, "58": {"inputs": {"x": 968, "y": 1381, "width": 114, "height": 22, "z_index": 2, "scale_option": "height", "Set Area": "", "image": ["59", 0], "mask": ["59", 1], "layers": ["49", 0], "canvas": ["12", 1]}, "class_type": "NewLayer"}, "59": {"inputs": {"text": ["75", 0], "font_path": ["60", 0], "font_size": 101, "spacing": 0, "text_color": "#000000", "vertical": false}, "class_type": "TextImage"}, "60": {"inputs": {"font": "FangSong"}, "class_type": "Font"}, "63": {"inputs": {"x": 971, "y": 1818, "width": 87, "height": 22, "z_index": 2, "scale_option": "height", "Set Area": "", "image": ["59", 0], "mask": ["59", 1], "layers": ["68", 0], "canvas": ["13", 1]}, "class_type": "NewLayer"}, "65": {"inputs": {"x": 1791, "y": 1000, "width": 120, "height": 23, "z_index": 2, "scale_option": "height", "Set Area": "", "image": ["59", 0], "mask": ["59", 1], "layers": ["69", 0], "canvas": ["17", 1]}, "class_type": "NewLayer"}, "68": {"inputs": {"x": 0, "y": 0, "width": ["70", 0], "height": ["70", 1], "z_index": 1, "scale_option": "width", "Set Area": "", "image": ["11", 0], "mask": ["11", 1]}, "class_type": "NewLayer"}, "69": {"inputs": {"x": 0, "y": 0, "width": ["71", 0], "height": ["71", 1], "z_index": 1, "scale_option": "width", "Set Area": "", "image": ["16", 0], "mask": ["16", 1]}, "class_type": "NewLayer"}, "70": {"inputs": {"image": ["11", 0]}, "class_type": "GetImageSize_"}, "71": {"inputs": {"image": ["16", 0]}, "class_type": "GetImageSize_"}, "72": {"inputs": {"layers": ["58", 0], "images": ["124", 0]}, "class_type": "MergeLayers"}, "73": {"inputs": {"layers": ["63", 0], "images": ["122", 0]}, "class_type": "MergeLayers"}, "74": {"inputs": {"layers": ["65", 0], "images": ["119", 0]}, "class_type": "MergeLayers"}, "75": {"inputs": {"text": "shadow"}, "class_type": "TextInput_"}, "76": {"inputs": {"images": ["59", 0]}, "class_type": "PreviewImage"}, "98": {"inputs": {"name": "AIPC\u5927\u8d5b\u6a21\u677f", "input_ids": "\n75\n118", "output_ids": "57\n126\n127\n", "description": "\u6295\u7a3f\u6a21\u677f#\u53d1\u6325\u4f60\u7684\u60f3\u8c61\u529b", "version": 4, "share_prefix": "#AIPC# \u53c2\u8d5b\u4f5c\u54c1", "link": "https://www.weibo.com", "category": "", "AppInfoRun": null, "image": ["106", 0]}, "class_type": "AppInfo"}, "101": {"inputs": {"images": ["98", 0]}, "class_type": "PreviewImage"}, "106": {"inputs": {"image": "1703759043279.png", "upload": "image"}, "class_type": "LoadImage"}, "118": {"inputs": {"image": "1703554480406.png", "upload": "image"}, "class_type": "LoadImage"}, "119": {"inputs": {"width": ["121", 0], "height": ["121", 1], "scale_option": "center", "average_color": "off", "fill_color": "#FFFFFF", "image": ["118", 0]}, "class_type": "ResizeImageMixlab"}, "121": {"inputs": {"image": ["17", 1]}, "class_type": "GetImageSize_"}, "122": {"inputs": {"width": ["123", 0], "height": ["123", 1], "scale_option": "center", "average_color": "off", "fill_color": "#FFFFFF", "image": ["118", 0]}, "class_type": "ResizeImageMixlab"}, "123": {"inputs": {"image": ["13", 1]}, "class_type": "GetImageSize_"}, "124": {"inputs": {"width": ["125", 0], "height": ["125", 1], "scale_option": "center", "average_color": "off", "fill_color": "#FFFFFF", "image": ["118", 0]}, "class_type": "ResizeImageMixlab"}, "125": {"inputs": {"image": ["12", 1]}, "class_type": "GetImageSize_"}, "126": {"inputs": {"images": ["73", 0]}, "class_type": "PreviewImage"}, "127": {"inputs": {"images": ["74", 0]}, "class_type": "PreviewImage"}}, "app": {"name": "AIPC\u5927\u8d5b\u6a21\u677f", "description": "\u6295\u7a3f\u6a21\u677f#\u53d1\u6325\u4f60\u7684\u60f3\u8c61\u529b", "version": 4, "input": [{"inputs": {"text": "shadow"}, "class_type": "TextInput_", "title": "\u4f60\u7684\u59d3\u540d/\u6635\u79f0", "id": "75", "options": []}, {"inputs": {"image": "1703554480406.png", "upload": "image"}, "class_type": "LoadImage", "title": "\u4f60\u7684\u4f5c\u54c1", "id": "118", "options": []}], "output": [{"inputs": {"images": ["72", 0]}, "class_type": "PreviewImage", "title": "Preview Image", "id": "57"}, {"inputs": {"images": ["73", 0]}, "class_type": "PreviewImage", "title": "Preview Image", "id": "126"}, {"inputs": {"images": ["74", 0]}, "class_type": "PreviewImage", "title": "Preview Image", "id": "127"}], "seed": {}, "share_prefix": "#AIPC# \u53c2\u8d5b\u4f5c\u54c1", "link": "https://www.weibo.com", "category": "", "filename": "AIPC\u5927\u8d5b\u6a21\u677f_4.json", "icon": "data:image/jpeg;base64,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", "id": "7b4c2d0ea2522605969ed331bc7b5e0c"}} \ No newline at end of file diff --git a/example/Image-to-Image_2.json b/example/Image-to-Image_2.json deleted file mode 100644 index 27b0f179..00000000 --- a/example/Image-to-Image_2.json +++ /dev/null @@ -1 +0,0 @@ -{"workflow": {"last_node_id": 20, "last_link_id": 25, "nodes": [{"id": 5, "type": "CLIPTextEncode", "pos": [1029, -2149], "size": {"0": 425.27801513671875, "1": 180.6060791015625}, "flags": {}, "order": 4, "mode": 0, "inputs": [{"name": "clip", "type": "CLIP", "link": 6}], "outputs": [{"name": "CONDITIONING", "type": "CONDITIONING", "links": [3], "slot_index": 0}], "title": "\u8d1f\u5411prompt", "properties": {"Node name for S&R": "CLIPTextEncode"}, "widgets_values": ["text, watermark"]}, {"id": 1, "type": "KSampler", "pos": [1509, -2394], "size": {"0": 315, "1": 262}, "flags": {}, "order": 6, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 1}, {"name": "positive", "type": "CONDITIONING", "link": 2}, {"name": "negative", "type": "CONDITIONING", "link": 3}, {"name": "latent_image", "type": "LATENT", "link": 14}, {"name": "denoise", "type": "FLOAT", "link": 16, "widget": {"name": "denoise"}, "slot_index": 4}], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [7], "slot_index": 0}], "properties": {"Node name for S&R": "KSampler"}, "widgets_values": [849307358041833, "randomize", 20, 8, "euler", "normal", 0.59]}, {"id": 6, "type": "VAEDecode", "pos": [1867, -2378], "size": {"0": 210, "1": 46}, "flags": {"collapsed": false}, "order": 7, "mode": 0, "inputs": [{"name": "samples", "type": "LATENT", "link": 7}, {"name": "vae", "type": "VAE", "link": 8}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [9], "slot_index": 0}], "properties": {"Node name for S&R": "VAEDecode"}}, {"id": 12, "type": "VAEEncode", "pos": [1031, -2482], "size": {"0": 210, "1": 46}, "flags": {}, "order": 5, "mode": 0, "inputs": [{"name": "pixels", "type": "IMAGE", "link": 12}, {"name": "vae", "type": "VAE", "link": 13}], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [14], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "VAEEncode"}}, {"id": 2, "type": "CheckpointLoaderSimple", "pos": [613, -2395], "size": {"0": 315, "1": 98}, "flags": {}, "order": 0, "mode": 0, "outputs": [{"name": "MODEL", "type": "MODEL", "links": [1], "slot_index": 0}, {"name": "CLIP", "type": "CLIP", "links": [5, 6], "slot_index": 1}, {"name": "VAE", "type": "VAE", "links": [8, 13], "slot_index": 2}], "properties": {"Node name for S&R": "CheckpointLoaderSimple"}, "widgets_values": ["deliberate_v2.safetensors"]}, {"id": 11, "type": "LoadImage", "pos": [626, -2823], "size": {"0": 315, "1": 314}, "flags": {}, "order": 1, "mode": 0, "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [12], "shape": 3, "slot_index": 0}, {"name": "MASK", "type": "MASK", "links": null, "shape": 3}], "title": "upload image", "properties": {"Node name for S&R": "LoadImage"}, "widgets_values": ["1703572811473.png", "image"]}, {"id": 14, "type": "FloatSlider", "pos": [1007, -2819], "size": {"0": 315, "1": 130}, "flags": {}, "order": 2, "mode": 0, "outputs": [{"name": "FLOAT", "type": "FLOAT", "links": [16], "shape": 3, "slot_index": 0}], "title": "denoise", "properties": {"Node name for S&R": "FloatSlider"}, "widgets_values": [0.45, 0, 1, 0.001]}, {"id": 15, "type": "EnhanceImage", "pos": [2591, -2531], "size": {"0": 315, "1": 58}, "flags": {}, "order": 9, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 25}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [18], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "EnhanceImage"}, "widgets_values": [1.1]}, {"id": 16, "type": "PreviewImage", "pos": [2963, -2520], "size": {"0": 210, "1": 246}, "flags": {}, "order": 10, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 18}], "properties": {"Node name for S&R": "PreviewImage"}}, {"id": 4, "type": "CLIPTextEncode", "pos": [1022, -2375], "size": {"0": 422.84503173828125, "1": 164.31304931640625}, "flags": {}, "order": 3, "mode": 0, "inputs": [{"name": "clip", "type": "CLIP", "link": 5}], "outputs": [{"name": "CONDITIONING", "type": "CONDITIONING", "links": [2], "slot_index": 0}], "title": "\u6b63\u5411prompt", "properties": {"Node name for S&R": "CLIPTextEncode"}, "widgets_values": ["hair,girl"]}, {"id": 7, "type": "AppInfo", "pos": [2134, -2528], "size": {"0": 408.4201965332031, "1": 406.9195861816406}, "flags": {}, "order": 8, "mode": 0, "inputs": [{"name": "image", "type": "IMAGE", "link": 9}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [25], "shape": 3, "slot_index": 0}], "properties": {"Node name for S&R": "AppInfo"}, "widgets_values": ["Image-to-Image", "11\n14\n4\n2\n", "16", "\u6f14\u793a\u57fa\u672c\u7684\u56fe\u751f\u56fe\u6d41\u7a0b", 2, "#comfyui-mixlab-nodes# ", "", null]}], "links": [[1, 2, 0, 1, 0, "MODEL"], [2, 4, 0, 1, 1, "CONDITIONING"], [3, 5, 0, 1, 2, "CONDITIONING"], [5, 2, 1, 4, 0, "CLIP"], [6, 2, 1, 5, 0, "CLIP"], [7, 1, 0, 6, 0, "LATENT"], [8, 2, 2, 6, 1, "VAE"], [9, 6, 0, 7, 0, "IMAGE"], [12, 11, 0, 12, 0, "IMAGE"], [13, 2, 2, 12, 1, "VAE"], [14, 12, 0, 1, 3, "LATENT"], [16, 14, 0, 1, 4, "FLOAT"], [18, 15, 0, 16, 0, "IMAGE"], [25, 7, 0, 15, 0, "IMAGE"]], "groups": [], "config": {}, "extra": {}, "version": 0.4}, "output": {"1": {"inputs": {"seed": 849307358041833, "steps": 20, "cfg": 8, "sampler_name": "euler", "scheduler": "normal", "denoise": ["14", 0], "model": ["2", 0], "positive": ["4", 0], "negative": ["5", 0], "latent_image": ["12", 0]}, "class_type": "KSampler"}, "2": {"inputs": {"ckpt_name": "deliberate_v2.safetensors"}, "class_type": "CheckpointLoaderSimple"}, "4": {"inputs": {"text": "hair,girl", "clip": ["2", 1]}, "class_type": "CLIPTextEncode"}, "5": {"inputs": {"text": "text, watermark", "clip": ["2", 1]}, "class_type": "CLIPTextEncode"}, "6": {"inputs": {"samples": ["1", 0], "vae": ["2", 2]}, "class_type": "VAEDecode"}, "7": {"inputs": {"name": "Image-to-Image", "input_ids": "11\n14\n4\n2\n", "output_ids": "16", "description": "\u6f14\u793a\u57fa\u672c\u7684\u56fe\u751f\u56fe\u6d41\u7a0b", "version": 2, "share_prefix": "#comfyui-mixlab-nodes# ", "link": "", "image": ["6", 0]}, "class_type": "AppInfo"}, "11": {"inputs": {"image": "1703572811473.png", "upload": "image"}, "class_type": "LoadImage"}, "12": {"inputs": {"pixels": ["11", 0], "vae": ["2", 2]}, "class_type": "VAEEncode"}, "14": {"inputs": {"number": 0.45, "min_value": 0, "max_value": 1, "step": 0.001}, "class_type": "FloatSlider"}, "15": {"inputs": {"contrast": 1.1, "image": ["7", 0]}, "class_type": "EnhanceImage"}, "16": {"inputs": {"images": ["15", 0]}, "class_type": "PreviewImage"}}, "app": {"name": "Image-to-Image", "description": "\u6f14\u793a\u57fa\u672c\u7684\u56fe\u751f\u56fe\u6d41\u7a0b", "version": 2, "input": [{"inputs": {"image": "1703572811473.png", "upload": "image"}, "class_type": "LoadImage", "title": "upload image", "id": "11", "options": []}, {"inputs": {"number": 0.45, "min_value": 0, "max_value": 1, "step": 0.001}, "class_type": "FloatSlider", "title": "denoise", "id": "14", "options": {"min": 0, "max": 1, "step": 0.001}}, {"inputs": {"text": "hair,girl", "clip": ["2", 1]}, "class_type": "CLIPTextEncode", "title": "\u6b63\u5411prompt", "id": "4", "options": []}, {"inputs": {"ckpt_name": "deliberate_v2.safetensors"}, "class_type": "CheckpointLoaderSimple", "title": "Load Checkpoint", "id": "2", "options": ["512-inpainting-ema.safetensors", "SSD-1B.safetensors", "awportrait_v12.safetensors", "cardosAnime_v20.safetensors", "deliberate_v2.safetensors", "illuminatiDiffusionV1_v11-unclip-h-fp16.safetensors", "sd_xl_turbo_1.0_fp16.safetensors", "svd.safetensors"]}], "output": [{"inputs": {"images": ["15", 0]}, "class_type": "PreviewImage", "title": "Preview Image", "id": "16"}], "seed": {"1": "randomize"}, "share_prefix": "#comfyui-mixlab-nodes# ", "link": null, "filename": "Image-to-Image_2.json", "icon": "data:image/jpeg;base64,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", "id": "e87b8dde1301aafb9ecbaac8f957f72f"}} \ No newline at end of file diff --git a/example/Text-to-Image_3.json b/example/Text-to-Image_3.json deleted file mode 100644 index 1ed076b5..00000000 --- a/example/Text-to-Image_3.json +++ /dev/null @@ -1,704 +0,0 @@ -{ - "workflow": { - "last_node_id": 21, - "last_link_id": 26, - "nodes": [ - { - "id": 5, - "type": "CLIPTextEncode", - "pos": [ - 1029, - -2149 - ], - "size": { - "0": 425.27801513671875, - "1": 180.6060791015625 - }, - "flags": {}, - "order": 4, - "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 6 - } - ], - "outputs": [ - { - "name": "CONDITIONING", - "type": "CONDITIONING", - "links": [ - 3 - ], - "slot_index": 0 - } - ], - "title": "\u8d1f\u5411prompt", - "properties": { - "Node name for S&R": "CLIPTextEncode" - }, - "widgets_values": [ - "text, watermark" - ] - }, - { - "id": 6, - "type": "VAEDecode", - "pos": [ - 1867, - -2378 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": { - "collapsed": false - }, - "order": 6, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 7 - }, - { - "name": "vae", - "type": "VAE", - "link": 8 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 9 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VAEDecode" - } - }, - { - "id": 2, - "type": "CheckpointLoaderSimple", - "pos": [ - 613, - -2395 - ], - "size": { - "0": 315, - "1": 98 - }, - "flags": {}, - "order": 0, - "mode": 0, - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 1 - ], - "slot_index": 0 - }, - { - "name": "CLIP", - "type": "CLIP", - "links": [ - 5, - 6 - ], - "slot_index": 1 - }, - { - "name": "VAE", - "type": "VAE", - "links": [ - 8 - ], - "slot_index": 2 - } - ], - "properties": { - "Node name for S&R": "CheckpointLoaderSimple" - }, - "widgets_values": [ - "deliberate_v2.safetensors" - ] - }, - { - "id": 15, - "type": "EnhanceImage", - "pos": [ - 2591, - -2531 - ], - "size": { - "0": 315, - "1": 58 - }, - "flags": {}, - "order": 8, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 25 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 18 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "EnhanceImage" - }, - "widgets_values": [ - 1.1 - ] - }, - { - "id": 16, - "type": "PreviewImage", - "pos": [ - 2963, - -2520 - ], - "size": { - "0": 210, - "1": 246 - }, - "flags": {}, - "order": 9, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 18 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 1, - "type": "KSampler", - "pos": [ - 1509, - -2394 - ], - "size": { - "0": 315, - "1": 262 - }, - "flags": {}, - "order": 5, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 1 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 2 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 3 - }, - { - "name": "latent_image", - "type": "LATENT", - "link": 26, - "slot_index": 3 - }, - { - "name": "denoise", - "type": "FLOAT", - "link": 16, - "widget": { - "name": "denoise" - }, - "slot_index": 4 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 7 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "KSampler" - }, - "widgets_values": [ - 914085921137224, - "randomize", - 20, - 8, - "euler", - "normal", - 0.59 - ] - }, - { - "id": 21, - "type": "EmptyLatentImage", - "pos": [ - 994, - -2560 - ], - "size": { - "0": 315, - "1": 106 - }, - "flags": {}, - "order": 1, - "mode": 0, - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 26 - ], - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "EmptyLatentImage" - }, - "widgets_values": [ - 512, - 512, - 1 - ] - }, - { - "id": 14, - "type": "FloatSlider", - "pos": [ - 1007, - -2819 - ], - "size": { - "0": 315, - "1": 130 - }, - "flags": {}, - "order": 2, - "mode": 0, - "outputs": [ - { - "name": "FLOAT", - "type": "FLOAT", - "links": [ - 16 - ], - "shape": 3, - "slot_index": 0 - } - ], - "title": "denoise", - "properties": { - "Node name for S&R": "FloatSlider" - }, - "widgets_values": [ - 1, - 0, - 1, - 0.001 - ] - }, - { - "id": 7, - "type": "AppInfo", - "pos": [ - 2134, - -2528 - ], - "size": { - "0": 408.4201965332031, - "1": 406.9195861816406 - }, - "flags": {}, - "order": 7, - "mode": 0, - "inputs": [ - { - "name": "image", - "type": "IMAGE", - "link": 9 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 25 - ], - "shape": 3, - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "AppInfo" - }, - "widgets_values": [ - "Text-to-Image", - "4\n5", - "16", - "\u6f14\u793a\u57fa\u672c\u7684\u6587\u751f\u56fe\u6d41\u7a0b", - 3, - "#comfyui-mixlab-nodes# ", - null, - null - ] - }, - { - "id": 4, - "type": "CLIPTextEncode", - "pos": [ - 1022, - -2375 - ], - "size": { - "0": 422.84503173828125, - "1": 164.31304931640625 - }, - "flags": {}, - "order": 3, - "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 5 - } - ], - "outputs": [ - { - "name": "CONDITIONING", - "type": "CONDITIONING", - "links": [ - 2 - ], - "slot_index": 0 - } - ], - "title": "\u6b63\u5411prompt", - "properties": { - "Node name for S&R": "CLIPTextEncode" - }, - "widgets_values": [ - "superman" - ] - } - ], - "links": [ - [ - 1, - 2, - 0, - 1, - 0, - "MODEL" - ], - [ - 2, - 4, - 0, - 1, - 1, - "CONDITIONING" - ], - [ - 3, - 5, - 0, - 1, - 2, - "CONDITIONING" - ], - [ - 5, - 2, - 1, - 4, - 0, - "CLIP" - ], - [ - 6, - 2, - 1, - 5, - 0, - "CLIP" - ], - [ - 7, - 1, - 0, - 6, - 0, - "LATENT" - ], - [ - 8, - 2, - 2, - 6, - 1, - "VAE" - ], - [ - 9, - 6, - 0, - 7, - 0, - "IMAGE" - ], - [ - 16, - 14, - 0, - 1, - 4, - "FLOAT" - ], - [ - 18, - 15, - 0, - 16, - 0, - "IMAGE" - ], - [ - 25, - 7, - 0, - 15, - 0, - "IMAGE" - ], - [ - 26, - 21, - 0, - 1, - 3, - "LATENT" - ] - ], - "groups": [], - "config": {}, - "extra": {}, - "version": 0.4 - }, - "output": { - "1": { - "inputs": { - "seed": 914085921137224, - "steps": 20, - "cfg": 8, - "sampler_name": "euler", - "scheduler": "normal", - "denoise": [ - "14", - 0 - ], - "model": [ - "2", - 0 - ], - "positive": [ - "4", - 0 - ], - "negative": [ - "5", - 0 - ], - "latent_image": [ - "21", - 0 - ] - }, - "class_type": "KSampler" - }, - "2": { - "inputs": { - "ckpt_name": "deliberate_v2.safetensors" - }, - "class_type": "CheckpointLoaderSimple" - }, - "4": { - "inputs": { - "text": "superman", - "clip": [ - "2", - 1 - ] - }, - "class_type": "CLIPTextEncode" - }, - "5": { - "inputs": { - "text": "text, watermark", - "clip": [ - "2", - 1 - ] - }, - "class_type": "CLIPTextEncode" - }, - "6": { - "inputs": { - "samples": [ - "1", - 0 - ], - "vae": [ - "2", - 2 - ] - }, - "class_type": "VAEDecode" - }, - "7": { - "inputs": { - "name": "Text-to-Image", - "input_ids": "4\n5", - "output_ids": "16", - "description": "\u6f14\u793a\u57fa\u672c\u7684\u6587\u751f\u56fe\u6d41\u7a0b", - "version": 3, - "share_prefix": "#comfyui-mixlab-nodes# ", - "link": null, - "AppInfoRun": null, - "image": [ - "6", - 0 - ] - }, - "class_type": "AppInfo" - }, - "14": { - "inputs": { - "number": 1, - "min_value": 0, - "max_value": 1, - "step": 0.001 - }, - "class_type": "FloatSlider" - }, - "15": { - "inputs": { - "contrast": 1.1, - "image": [ - "7", - 0 - ] - }, - "class_type": "EnhanceImage" - }, - "16": { - "inputs": { - "images": [ - "15", - 0 - ] - }, - "class_type": "PreviewImage" - }, - "21": { - "inputs": { - "width": 512, - "height": 512, - "batch_size": 1 - }, - "class_type": "EmptyLatentImage" - } - }, - "app": { - "name": "Text-to-Image", - "description": "\u6f14\u793a\u57fa\u672c\u7684\u6587\u751f\u56fe\u6d41\u7a0b", - "version": 3, - "input": [ - { - "inputs": { - "text": "superman", - "clip": [ - "2", - 1 - ] - }, - "class_type": "CLIPTextEncode", - "title": "\u6b63\u5411prompt", - "id": "4", - "options": [] - }, - { - "inputs": { - "text": "text, watermark", - "clip": [ - "2", - 1 - ] - }, - "class_type": "CLIPTextEncode", - "title": "\u8d1f\u5411prompt", - "id": "5", - "options": [] - } - ], - "output": [ - { - "inputs": { - "images": [ - "15", - 0 - ] - }, - "class_type": "PreviewImage", - "title": "Preview Image", - "id": "16" - } - ], - "seed": { - "1": "randomize" - }, - "share_prefix": "#comfyui-mixlab-nodes# ", - "link": null, - "filename": "Text-to-Image_3.json", - "icon": "data:image/jpeg;base64,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", - "id": "608ad67eea6981c4c378f8b5b4a8e04d" - } -} \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 9ee5a41f..e403ec31 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "comfyui-mixlab-nodes" description = "3D, ScreenShareNode & FloatingVideoNode, SpeechRecognition & SpeechSynthesis, GPT, LoadImagesFromLocal, Layers, Other Nodes, ..." -version = "0.37.0" +version = "0.38.0" license = "MIT" dependencies = ["numpy", "pyOpenSSL", "watchdog", "opencv-python-headless", "matplotlib", "openai", "simple-lama-inpainting", "clip-interrogator==0.6.0", "transformers>=4.36.0", "lark-parser", "imageio-ffmpeg", "rembg[gpu]", "omegaconf==2.3.0", "Pillow>=9.5.0", "einops==0.7.0", "trimesh>=4.0.5", "huggingface-hub", "scikit-image"] diff --git a/web/javascript/3d_mixlab.js b/web/javascript/3d_mixlab.js index f0de1ea3..b5a9e6f4 100644 --- a/web/javascript/3d_mixlab.js +++ b/web/javascript/3d_mixlab.js @@ -2,35 +2,7 @@ import { app } from '../../../scripts/app.js' import { api } from '../../../scripts/api.js' import { $el } from '../../../scripts/ui.js' -let isScriptLoaded = {} -function loadExternalScript(url,type) { - return new Promise((resolve, reject) => { - if (isScriptLoaded[url]) { - resolve(); - return; - } - - const existingScript = document.querySelector(`script[src="${url}"]`); - if (existingScript) { - existingScript.onload = () => { - isScriptLoaded[url] = true; - resolve(); - }; - existingScript.onerror = reject; - return; - } - - const script = document.createElement('script'); - script.src = url; - script.type = type; // Add this line to load the script as an ES module - script.onload = () => { - isScriptLoaded[url] = true; - resolve(); - }; - script.onerror = reject; - document.head.appendChild(script); - }); -} +import { loadExternalScript } from './common.js' const getLocalData = key => { let data = {} @@ -130,9 +102,9 @@ function get_position_style (ctx, widget_width, y, node_height) { transformOrigin: '0 0', transform: transform, left: - document.querySelector('.comfy-menu').style.display === 'none' - ? `60px` - : `0`, + document.querySelector('.comfy-menu').style.display === 'none' + ? `60px` + : `0`, top: `0`, cursor: 'pointer', position: 'absolute', @@ -299,7 +271,6 @@ app.registerExtension({ if (nodeType.comfyClass == '3DImage') { const orig_nodeCreated = nodeType.prototype.onNodeCreated nodeType.prototype.onNodeCreated = async function () { - await loadExternalScript( '/mixlab/app/lib/model-viewer.min.js', 'module' diff --git a/web/javascript/app_mixlab.js b/web/javascript/app_mixlab.js index 8ba95ee0..a30b389d 100644 --- a/web/javascript/app_mixlab.js +++ b/web/javascript/app_mixlab.js @@ -4,28 +4,11 @@ import { api } from '../../../scripts/api.js' import { td_bg } from './td_background.js' // console.log('td_bg', td_bg) +import { getUrl, base64Df, get_position_style, getObjectInfo } from './common.js' //本机安装的插件节点全集 window._nodesAll = null -//获取当前系统的插件,节点清单 -function getObjectInfo () { - return new Promise(async (resolve, reject) => { - let url = getUrl() - - try { - const response = await fetch(`${url}/object_info`) - const data = await response.json() - resolve(data) - } catch (error) { - reject(error) - } - }) -} - -const base64Df = - 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAAXNSR0IArs4c6QAAALZJREFUKFOFkLERwjAQBPdbgBkInECGaMLUQDsE0AkRVRAYWqAByxldPPOWHwnw4OBGye1p50UDSoA+W2ABLPN7i+C5dyC6R/uiAUXRQCs0bXoNIu4QPQzAxDKxHoALOrZcqtiyR/T6CXw7+3IGHhkYcy6BOR2izwT8LptG8rbMiCRAUb+CQ6WzQVb0SNOi5Z2/nX35DRyb/ENazhpWKoGwrpD6nICp5c2qogc4of+c7QcrhgF4Aa/aoAFHiL+RAAAAAElFTkSuQmCC' - const parseImageToBase64 = url => { return new Promise((res, rej) => { fetch(url) @@ -45,42 +28,6 @@ const parseImageToBase64 = url => { }) } -function get_position_style (ctx, widget_width, y, node_height) { - const MARGIN = 12 // the margin around the html element - - /* Create a transform that deals with all the scrolling and zooming */ - const elRect = ctx.canvas.getBoundingClientRect() - const transform = new DOMMatrix() - .scaleSelf( - elRect.width / ctx.canvas.width, - elRect.height / ctx.canvas.height - ) - .multiplySelf(ctx.getTransform()) - .translateSelf(MARGIN, MARGIN + y) - - return { - transformOrigin: '0 0', - transform: transform, - left: - document.querySelector('.comfy-menu').style.display === 'none' - ? `60px` - : `0`, - top: `0`, - cursor: 'pointer', - position: 'absolute', - maxWidth: `${widget_width - MARGIN * 2}px`, - // maxHeight: `${node_height - MARGIN * 2}px`, // we're assuming we have the whole height of the node - width: `${widget_width - MARGIN * 2}px`, - // height: `${node_height * 0.3 - MARGIN * 2}px`, - // background: '#EEEEEE', - display: 'flex', - flexDirection: 'column', - // alignItems: 'center', - justifyContent: 'flex-start', - zIndex: 9999999 - } -} - async function drawImageToCanvas (imageUrl, sFactor = 320) { var canvas = document.createElement('canvas') var ctx = canvas.getContext('2d') @@ -282,13 +229,6 @@ async function extractInputAndOutputData ( return { input, output, seed, seedTitle } } -function getUrl () { - let api_host = `${window.location.hostname}:${window.location.port}` - let api_base = '' - let url = `${window.location.protocol}//${api_host}${api_base}` - return url -} - const getLocalData = key => { let data = {} try { diff --git a/web/javascript/chat.js b/web/javascript/chat.js index 85418b3f..93365954 100644 --- a/web/javascript/chat.js +++ b/web/javascript/chat.js @@ -1,3 +1,5 @@ +import { getUrl } from "./common.js" + async function* completion (url, messages, controller) { let data = { model: 'gpt-3.5-turbo-16k', @@ -92,8 +94,9 @@ async function* completion (url, messages, controller) { // return (await response.json()).content } -export async function completion_ (url, messages, controller, callback) { - let request = await completion(url, messages, controller) +export async function completion_ (apiKey,url, messages, controller, callback) { + // let request = await completion(url, messages, controller) + let request=await chatCompletion(apiKey,url, messages, controller) for await (const chunk of request) { let content = chunk.data.choices[0].delta.content || '' if (chunk.data.choices[0].role == 'assistant') { @@ -104,3 +107,96 @@ export async function completion_ (url, messages, controller, callback) { if (callback) callback(content) } } + + + +export async function* chatCompletion(apiKey, url,messages,controller){ + // const apiKey = 'YOUR_API_KEY' + url = `${getUrl()}/chat/completions` + + const requestBody = { + model: '01-ai/Yi-1.5-9B-Chat-16K', + messages: messages, + stream: true, + key:apiKey + } + + let response=await fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${apiKey}`, + signal: controller.signal + }, + body: JSON.stringify(requestBody), + mode: 'cors' // This is to ensure the request is made with CORS + }) + + const reader = response.body.getReader() + const decoder = new TextDecoder() + + let content = '' + let leftover = '' // Buffer for partially read lines + + try { + let cont = true + while (cont) { + let result = await reader.read() + if (result.done) { + break + } + + // Add any leftover data to the current chunk of data + const text = leftover + decoder.decode(result.value) + + // Check if the last character is a line break + const endsWithLineBreak = text.endsWith('\n') + + // Split the text into lines + let lines = text.split('\n') + + // If the text doesn't end with a line break, then the last line is incomplete + // Store it in leftover to be added to the next chunk of data + if (!endsWithLineBreak) { + leftover = lines.pop() + } else { + leftover = '' // Reset leftover if we have a line break at the end + } + + // Parse all sse events and add them to result + const regex = /^(\S+):\s(.*)$/gm + for (const line of lines) { + const match = regex.exec(line) + if (match) { + result[match[1]] = match[2] + // since we know this is llama.cpp, let's just decode the json in data + if (result.data) { + result.data = JSON.parse(result.data) + console.log('#result.data',result.data) + + content += result.data.choices[0].delta?.content || '' + + // yield + yield result + + // if we got a stop token from server, we will break here + if (result.data.choices[0].finish_reason == 'stop') { + if (result.data.generation_settings) { + // generation_settings = result.data.generation_settings; + } + cont = false + break + } + } + } + } + } + } catch (e) { + console.error('llama error: ', e) + throw e + } finally { + controller.abort() + } + + return content +} diff --git a/web/javascript/command.js b/web/javascript/command.js deleted file mode 100644 index 694fb5c1..00000000 --- a/web/javascript/command.js +++ /dev/null @@ -1,697 +0,0 @@ -function get_url () { - // 如果有缓存记录 - let hostUrl = localStorage.getItem('_hostUrl') || '' - if (hostUrl) { - return hostUrl - } - let api_host = `${window.location.hostname}:${window.location.port}` - let api_base = '' - let url = `${window.location.protocol}//${api_host}${api_base}` - return url -} - -function getFilenameAndCategoryFromUrl (url) { - const queryString = url.split('?')[1] - if (!queryString) { - return {} - } - - const params = new URLSearchParams(queryString) - - const filename = params.get('filename') - ? decodeURIComponent(params.get('filename')) - : null - const category = params.get('category') - ? decodeURIComponent(params.get('category') || '') - : '' - - return { category, filename } -} - -async function get_my_app (category = '', filename = null) { - let url = get_url() - const res = await fetch(`${url}/mixlab/workflow`, { - method: 'POST', - mode: 'cors', // 允许跨域请求 - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - task: 'my_app', - filename, - category - }) - }) - let result = await res.json() - let data = [] - try { - for (const res of result.data) { - let { output, app } = res.data - if (app.filename) - data.push({ - ...app, - data: output, - date: res.date - }) - } - } catch (error) {} - - return data -} - -async function getAppInit () { - const { category, filename } = getFilenameAndCategoryFromUrl( - window.location.href - ) - return await get_my_app(category, filename) -} - -function success (isSuccess, btn, text) { - isSuccess ? (btn.innerText = 'success') : text - setTimeout(() => { - btn.innerText = text - }, 5000) -} - -async function interrupt () { - try { - await fetch(`${get_url()}/interrupt`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: undefined - }) - } catch (error) { - console.error(error) - } - return true -} - -async function getQueue (clientId) { - try { - const res = await fetch(`${get_url()}/queue`) - const data = await res.json() - return { - // Running action uses a different endpoint for cancelling - Running: Array.from(data.queue_running, prompt => { - if (prompt[3].client_id === clientId) { - let prompt_id = prompt[1] - return { - prompt_id, - remove: () => interrupt() - } - } - }), - Pending: data.queue_pending.map(prompt => ({ prompt })) - } - } catch (error) { - console.error(error) - return { Running: [], Pending: [] } - } -} - -// 请求历史数据 -async function getPromptResult (category) { - let url = get_url() - try { - const response = await fetch(`${url}/mixlab/prompt_result`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - action: 'all' - }) - }) - - if (response.ok) { - const data = await response.json() - console.log('#getPromptResult:', category, data) - - return data.result.filter(r => r.appInfo.category == category) - // 处理返回的数据 - } else { - console.log('Error:', response.status) - // 处理错误情况 - } - } catch (error) { - console.log('Error:', error) - // 处理异常情况 - } -} - -// 新的运行工作流的接口 -function queuePromptNew ( - filename, - category, - seed, - input, - client_id, - apps = null -) { - let url = get_url() - // var filename = "Text-to-Image_1.json", category = ""; - - // 随机seed - // promptWorkflow = randomSeed(seed, promptWorkflow); - let d = { filename, category, seed, input, client_id } - if (apps) { - d.apps = apps - } - - const data = JSON.stringify(d) - return new Promise((res, rej) => { - fetch(`${url}/mixlab/prompt`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: data - }) - .then(response => { - if (!response.ok) { - // Handle HTTP error responses - if (response.status === 400) { - return response.json().then(errorData => { - // Process the error data - console.error('Error 400:', errorData) - alert(JSON.stringify(errorData, null, 2)) - res(null) - }) - } - throw new Error('Network response was not ok') - } - return response.json() // Process the response data - }) - .then(data => { - // Handle the response data - console.log('Success:', data) - res(true) - }) - .catch(error => { - // Handle fetch errors - console.error('Fetch error:', error) - res(null) - }) - }) -} - -// 保存历史数据 -async function savePromptResult (data) { - let url = get_url() - try { - const response = await fetch(`${url}/mixlab/prompt_result`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - action: 'save', - data - }) - }) - - if (response.ok) { - const res = await response.json() - console.log('Response:', res) - return res - // 处理返回的数据 - } else { - console.log('Error:', response.status) - // 处理错误情况 - } - } catch (error) { - console.log('Error:', error) - // 处理异常情况 - } -} - -async function uploadImage (blob, fileType = '.png', filename) { - const body = new FormData() - body.append( - 'image', - new File([blob], (filename || new Date().getTime()) + fileType) - ) - - const url = get_url() - - const resp = await fetch(`${url}/upload/image`, { - method: 'POST', - body - }) - - let data = await resp.json() - // console.log(data) - let { name, subfolder } = data - let src = `${url}/view?filename=${encodeURIComponent( - name - )}&type=input&subfolder=${subfolder}&rand=${Math.random()}` - - return { url: src, name } -} - -async function uploadMask (arrayBuffer, imgurl) { - const body = new FormData() - const filename = 'clipspace-mask-' + performance.now() + '.png' - - let original_url = new URL(imgurl) - - const original_ref = { filename: original_url.searchParams.get('filename') } - - let original_subfolder = original_url.searchParams.get('subfolder') - if (original_subfolder) original_ref.subfolder = original_subfolder - - let original_type = original_url.searchParams.get('type') - if (original_type) original_ref.type = original_type - - body.append('image', arrayBuffer, filename) - body.append('original_ref', JSON.stringify(original_ref)) - body.append('type', 'input') - body.append('subfolder', 'clipspace') - - const url = get_url() - - const resp = await fetch(`${url}/upload/mask`, { - method: 'POST', - body - }) - - // console.log(resp) - let data = await resp.json() - let { name, subfolder, type } = data - let src = `${url}/view?filename=${encodeURIComponent( - name - )}&type=${type}&subfolder=${subfolder}&rand=${Math.random()}` - - return { url: src, name: 'clipspace/' + name } -} - -const parseImageToBase64 = url => { - return new Promise((res, rej) => { - fetch(url) - .then(response => response.blob()) - .then(blob => { - const reader = new FileReader() - reader.onloadend = () => { - const base64data = reader.result - res(base64data) - // 在这里可以将base64数据用于进一步处理或显示图片 - } - reader.readAsDataURL(blob) - }) - .catch(error => { - console.log('发生错误:', error) - }) - }) -} - -function createImage (url) { - let im = new Image() - return new Promise((res, rej) => { - im.onload = () => res(im) - im.src = url - }) -} - -function convertImageToBlackBasedOnAlpha (image) { - const canvas = document.createElement('canvas') - const ctx = canvas.getContext('2d') - - // Draw the image onto the canvas - canvas.width = image.width - canvas.height = image.height - ctx.drawImage(image, 0, 0) - - // Get the image data from the canvas - const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height) - const pixels = imageData.data - - // Modify the RGB values based on the alpha channel - for (let i = 0; i < pixels.length; i += 4) { - const alpha = pixels[i + 3] - if (alpha !== 0) { - // Set non-transparent pixels to black - // 蒙版是黑色? - pixels[i] = 0 // Red - pixels[i + 1] = 255 // Green - pixels[i + 2] = 0 // Blue - } - } - - // Put the modified image data back onto the canvas - ctx.putImageData(imageData, 0, 0) - - // Convert the modified canvas to base64 data URL - const base64ImageData = canvas.toDataURL('image/png') // Replace 'png' with your desired image format - - return base64ImageData -} - -const blobToBase64 = blob => { - return new Promise((res, rej) => { - const reader = new FileReader() - reader.onloadend = () => { - const base64data = reader.result - res(base64data) - // 在这里可以将base64数据用于进一步处理或显示图片 - } - reader.readAsDataURL(blob) - }) -} - -function base64ToBlob (base64) { - // 去除base64编码中的前缀 - const base64WithoutPrefix = base64.replace(/^data:image\/\w+;base64,/, '') - - // 将base64编码转换为字节数组 - const byteCharacters = atob(base64WithoutPrefix) - - // 创建一个存储字节数组的数组 - const byteArrays = [] - - // 将字节数组放入数组中 - for (let offset = 0; offset < byteCharacters.length; offset += 1024) { - const slice = byteCharacters.slice(offset, offset + 1024) - - const byteNumbers = new Array(slice.length) - for (let i = 0; i < slice.length; i++) { - byteNumbers[i] = slice.charCodeAt(i) - } - - const byteArray = new Uint8Array(byteNumbers) - byteArrays.push(byteArray) - } - - // 创建blob对象 - const blob = new Blob(byteArrays, { type: 'image/png' }) // 根据实际情况设置MIME类型 - - return blob -} - -async function calculateImageHash (blob) { - const buffer = await blob.arrayBuffer() - const hashBuffer = await crypto.subtle.digest('SHA-256', buffer) - const hashArray = Array.from(new Uint8Array(hashBuffer)) - const hashHex = hashArray - .map(byte => byte.toString(16).padStart(2, '0')) - .join('') - return hashHex -} - -// 获取 rembg 模型 -async function get_rembg_models () { - try { - const response = await fetch(`${get_url()}/mixlab/folder_paths`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - type: 'rembg' - }) - }) - - const data = await response.json() - // console.log(data) - return data.names - } catch (error) { - console.error(error) - } -} - -//自动抠图 -async function run_rembg (model, base64) { - try { - const response = await fetch(`${get_url()}/mixlab/rembg`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - model, - base64 - }) - }) - - const data = await response.json() - // console.log(data) - return data.data - } catch (error) { - console.error(error) - } -} - -function copyHtmlWithImagesToClipboard (data, cb) { - // 创建一个临时div元素 - const tempDiv = document.createElement('div') - - // 将HTML字符串赋值给div的innerHTML属性 - tempDiv.innerHTML = data - - // 获取div中的所有图像元素 - const images = tempDiv.getElementsByTagName('img') - - // 遍历图像元素,并将图像数据转换为Base64编码 - for (let i = 0; i < images.length; i++) { - const image = images[i] - const canvas = document.createElement('canvas') - const context = canvas.getContext('2d') - - // 设置canvas尺寸与图像尺寸相同 - canvas.width = image.width - canvas.height = image.height - - // 在canvas上绘制图像 - context.drawImage(image, 0, 0) - - // 将canvas转换为Base64编码 - const imageData = canvas.toDataURL() - - // 将Base64编码替换图像元素的src属性 - image.src = imageData - } - - let richText = tempDiv.innerHTML - - // 创建一个新的Blob对象,并将富文本字符串作为数据传递进去 - const blob = new Blob([richText], { type: 'text/html' }) - - // 创建一个ClipboardItem对象,并将Blob对象添加到其中 - const clipboardItem = new ClipboardItem({ 'text/html': blob }) - - // 使用Clipboard API将内容复制到剪贴板 - navigator.clipboard - .write([clipboardItem]) - .then(() => { - console.log('富文本已成功复制到剪贴板') - tempDiv.remove() - if (cb) cb(true) - }) - .catch(error => { - console.error('复制到剪贴板失败:', error) - tempDiv.remove() - if (cb) cb(false) - }) -} - -function copyImagesToClipboard (html, cb) { - const tempDiv = document.createElement('div') - tempDiv.innerHTML = html - const images = tempDiv.querySelectorAll('img') - const promises = Array.from(images).map(image => { - return new Promise(resolve => { - const img = new Image() - img.src = image.src - img.onload = () => { - const canvas = document.createElement('canvas') - const context = canvas.getContext('2d') - canvas.width = img.width - canvas.height = img.height - context.drawImage(img, 0, 0) - canvas.toBlob(blob => { - const clipboardItem = new ClipboardItem({ 'image/png': blob }) - navigator.clipboard - .write([clipboardItem]) - .then(() => { - resolve() - tempDiv.remove() - if (cb) cb(true) - }) - .catch(error => { - reject(error) - tempDiv.remove() - if (cb) cb(false) - }) - }) - } - }) - }) - Promise.all([...promises]) - .then(() => { - console.log('所有图片已成功复制到剪贴板') - if (cb) cb(true) - tempDiv.remove() - }) - .catch(error => { - console.error('复制到剪贴板失败:', error) - if (cb) cb(false) - tempDiv.remove() - }) -} - -function copyTextToClipboard (html, cb) { - const tempDiv = document.createElement('div') - tempDiv.innerHTML = html - - const text = tempDiv.innerText - const textData = new ClipboardItem({ - 'text/plain': new Blob([text], { type: 'text/plain' }) - }) - - navigator.clipboard - .write([textData]) - .then(() => { - console.log('所有文本已成功复制到剪贴板', text) - if (cb) cb(true) - tempDiv.remove() - }) - .catch(error => { - console.error('复制到剪贴板失败:', error) - if (cb) cb(false) - tempDiv.remove() - }) -} - -// ComfyUI\web\extensions\core\dynamicPrompts.js -// 官方实现修改 -// Allows for simple dynamic prompt replacement -// Inputs in the format {a|b} will have a random value of a or b chosen when the prompt is queued. - -/* - * Strips C-style line and block comments from a string - */ -function dynamicPrompts (prompt) { - prompt = prompt.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g, '') - while ( - prompt.replace('\\{', '').includes('{') && - prompt.replace('\\}', '').includes('}') - ) { - const startIndex = prompt.replace('\\{', '00').indexOf('{') - const endIndex = prompt.replace('\\}', '00').indexOf('}') - - const optionsString = prompt.substring(startIndex + 1, endIndex) - const options = optionsString.split('|') - - const randomIndex = Math.floor(Math.random() * options.length) - const randomOption = options[randomIndex] - - prompt = - prompt.substring(0, startIndex) + - randomOption + - prompt.substring(endIndex + 1) - } - return prompt -} - -// 遍历所有组合,语法同 动态提示 -function generateAllCombinations (prompt) { - prompt = prompt.replace(/\/\*[\s\S]*?\*\/|\/\/.*/g, '') - - // Helper function to get all combinations - function getAllCombinations (parts) { - if (parts.length === 0) return [''] - const [firstPart, ...restParts] = parts - const restCombinations = getAllCombinations(restParts) - const allCombinations = [] - - firstPart.forEach(option => { - restCombinations.forEach(combination => { - allCombinations.push(option + combination) - }) - }) - - return allCombinations - } - - // Split prompt into static parts and dynamic parts - let parts = [] - let startIndex = 0 - - while ( - prompt.replace('\\{', '').includes('{') && - prompt.replace('\\}', '').includes('}') - ) { - startIndex = prompt.replace('\\{', '00').indexOf('{') - const endIndex = prompt.replace('\\}', '00').indexOf('}') - const staticPart = prompt.substring(0, startIndex) - const optionsString = prompt.substring(startIndex + 1, endIndex) - const options = optionsString.split('|') - - parts.push([staticPart]) - parts.push(options) - - prompt = prompt.substring(endIndex + 1) - } - - // Add the remaining static part - parts.push([prompt]) - - // Get all combinations - const combinations = getAllCombinations(parts) - - return combinations -} - -const _textNodes = [ - 'TextInput_', - 'CLIPTextEncode', - 'PromptSimplification', - 'ChinesePrompt_Mix' - ], - _loraNodes = ['CheckpointLoaderSimple', 'LoraLoader'], - _numberNodes = ['FloatSlider', 'IntNumber'], - _slideNodes = ['PromptSlide'], - _imageNodes = [ - 'LoadImage', - 'VHS_LoadVideo', - 'ImagesPrompt_', - 'LoadImagesToBatch' - ], - _colorNodes = ['Color'], - _audioNodes = ['LoadAndCombinedAudio_'] - -export default { - get_url, - get_my_app, - getAppInit, - getFilenameAndCategoryFromUrl, - success, - interrupt, - getQueue, - queuePromptNew, - savePromptResult, - uploadImage, - uploadMask, - run_rembg, - get_rembg_models, - parseImageToBase64, - createImage, - convertImageToBlackBasedOnAlpha, - blobToBase64, - base64ToBlob, - calculateImageHash, - copyHtmlWithImagesToClipboard, - copyImagesToClipboard, - copyTextToClipboard, - dynamicPrompts, - generateAllCombinations, - - _textNodes, - _loraNodes, - _numberNodes, - _slideNodes, - _imageNodes, - _colorNodes, - _audioNodes -} diff --git a/web/javascript/common.js b/web/javascript/common.js new file mode 100644 index 00000000..210062d2 --- /dev/null +++ b/web/javascript/common.js @@ -0,0 +1,168 @@ +export const base64Df = + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAAXNSR0IArs4c6QAAALZJREFUKFOFkLERwjAQBPdbgBkInECGaMLUQDsE0AkRVRAYWqAByxldPPOWHwnw4OBGye1p50UDSoA+W2ABLPN7i+C5dyC6R/uiAUXRQCs0bXoNIu4QPQzAxDKxHoALOrZcqtiyR/T6CXw7+3IGHhkYcy6BOR2izwT8LptG8rbMiCRAUb+CQ6WzQVb0SNOi5Z2/nX35DRyb/ENazhpWKoGwrpD6nICp5c2qogc4of+c7QcrhgF4Aa/aoAFHiL+RAAAAAElFTkSuQmCC' + +export function getUrl () { + let api_host = `${window.location.hostname}:${window.location.port}` + let api_base = '' + let url = `${window.location.protocol}//${api_host}${api_base}` + return url +} + +// 更新或者获取key +export const updateLLMAPIKey = async key => { + try { + const res = await fetch(`${getUrl()}/mixlab/llm_api_key`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + key: key || null + }) + }) + + const data = await res.json() + + if (!res.ok) { + console.error('Error:', data.error) + return + } + + if (key) { + console.log('API key saved successfully:', data.message) + return key + } else { + console.log('Retrieved API key:', data.key) + return data.key + } + } catch (error) { + console.error('Request failed:', error) + } +} + +//获取当前系统的插件,节点清单 +export function getObjectInfo () { + return new Promise(async (resolve, reject) => { + let url = getUrl() + + try { + const response = await fetch(`${url}/object_info`) + const data = await response.json() + resolve(data) + } catch (error) { + reject(error) + } + }) +} + +export function get_position_style (ctx, widget_width, y, node_height) { + const MARGIN = 0 // the margin around the html element + + /* Create a transform that deals with all the scrolling and zooming */ + const elRect = ctx.canvas.getBoundingClientRect() + const transform = new DOMMatrix() + .scaleSelf( + elRect.width / ctx.canvas.width, + elRect.height / ctx.canvas.height + ) + .multiplySelf(ctx.getTransform()) + .translateSelf(MARGIN, MARGIN + y) + + return { + transformOrigin: '0 0', + transform: transform, + left: + document.querySelector('.comfy-menu').style.display === 'none' + ? `60px` + : `0`, + top: `0`, + cursor: 'pointer', + position: 'absolute', + maxWidth: `${widget_width - MARGIN * 2}px`, + // maxHeight: `${node_height - MARGIN * 2}px`, // we're assuming we have the whole height of the node + // width: `${widget_width - MARGIN * 2}px`, + height: `${node_height * 0.3 - MARGIN * 2}px`, + // background: '#EEEEEE', + display: 'flex', + flexDirection: 'column', + // alignItems: 'center', + justifyContent: 'flex-start', + zIndex: 99 + } +} + +export function loadExternalScript (url, type) { + return new Promise((resolve, reject) => { + const existingScript = document.querySelector(`script[src="${url}"]`) + if (existingScript) { + existingScript.onload = () => { + resolve() + } + existingScript.onerror = reject + return + } + + const script = document.createElement('script') + script.src = url + if (type) script.type = type // Add this line to load the script as an ES module + script.onload = () => { + resolve() + } + script.onerror = reject + document.head.appendChild(script) + }) +} + +export async function getQueue () { + try { + const res = await fetch(`${getUrl()}/queue`) + const data = await res.json() + // console.log(data.queue_running,data.queue_pending) + return { + // Running action uses a different endpoint for cancelling + Running: data.queue_running.length, + Pending: data.queue_pending.length + } + } catch (error) { + console.error(error) + return { Running: 0, Pending: 0 } + } +} + +export async function interrupt () { + const resp = await fetch(`${getUrl()}/interrupt`, { + method: 'POST' + }) +} + +export async function sleep (t = 200) { + return new Promise((res, rej) => { + setTimeout(() => { + res(true) + }, t) + }) +} + +export function createImage (url) { + let im = new Image() + return new Promise((res, rej) => { + im.onload = () => res(im) + im.src = url + }) +} + +export const getLocalData = key => { + let data = {} + try { + data = JSON.parse(localStorage.getItem(key)) || {} + } catch (error) { + return {} + } + return data +} + +export const saveLocalData = (key, id, val) => { + let data = getLocalData(key) + data[id] = val + localStorage.setItem(key, JSON.stringify(data)) +} diff --git a/web/javascript/main_mixlab.js b/web/javascript/main_mixlab.js index be33675f..5d4300b4 100644 --- a/web/javascript/main_mixlab.js +++ b/web/javascript/main_mixlab.js @@ -3,31 +3,17 @@ import { app } from '../../../scripts/app.js' import { ComfyWidgets } from '../../../scripts/widgets.js' import { $el } from '../../../scripts/ui.js' -let api_host = `${window.location.hostname}:${window.location.port}` -let api_base = '' -let url = `${window.location.protocol}//${api_host}${api_base}` - -async function getQueue () { - try { - const res = await fetch(`${url}/queue`) - const data = await res.json() - // console.log(data.queue_running,data.queue_pending) - return { - // Running action uses a different endpoint for cancelling - Running: data.queue_running.length, - Pending: data.queue_pending.length - } - } catch (error) { - console.error(error) - return { Running: 0, Pending: 0 } - } -} - -async function interrupt () { - const resp = await fetch(`${url}/interrupt`, { - method: 'POST' - }) -} +import { + getQueue, + interrupt, + get_position_style, + base64Df, + getUrl, + createImage, + sleep +} from './common.js' + +// let url = getUrl() async function clipboardWriteImage (win, url) { const canvas = document.createElement('canvas') @@ -208,22 +194,7 @@ async function shareScreen ( } } -async function sleep (t = 200) { - return new Promise((res, rej) => { - setTimeout(() => { - res(true) - }, t) - }) -} - -function createImage (url) { - let im = new Image() - return new Promise((res, rej) => { - im.onload = () => res(im) - im.src = url - }) -} - + async function compareImages (threshold, previousImage, currentImage) { // 将 base64 转换为 Image 对象 var previousImg = await createImage(previousImage) @@ -458,47 +429,6 @@ async function requestCamera () { return false } -/* -A method that returns the required style for the html -*/ -function get_position_style (ctx, widget_width, y, node_height, top) { - const MARGIN = 4 // the margin around the html element - - /* Create a transform that deals with all the scrolling and zooming */ - const elRect = ctx.canvas.getBoundingClientRect() - const transform = new DOMMatrix() - .scaleSelf( - elRect.width / ctx.canvas.width, - elRect.height / ctx.canvas.height - ) - .multiplySelf(ctx.getTransform()) - .translateSelf(MARGIN, MARGIN + y) - - return { - transformOrigin: '0 0', - transform: transform, - left: - document.querySelector('.comfy-menu').style.display === 'none' - ? `60px` - : `0`, - top: `${top}px`, - cursor: 'pointer', - position: 'absolute', - maxWidth: `${widget_width - MARGIN * 2}px`, - // maxHeight: `${node_height - MARGIN * 2}px`, // we're assuming we have the whole height of the node - width: `${widget_width - MARGIN * 2}px`, - // height: `${node_height - MARGIN * 2}px`, - // background: '#EEEEEE', - display: 'flex', - flexDirection: 'column', - // alignItems: 'center', - justifyContent: 'space-around' - } -} - -const base64Df = - 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAAXNSR0IArs4c6QAAALZJREFUKFOFkLERwjAQBPdbgBkInECGaMLUQDsE0AkRVRAYWqAByxldPPOWHwnw4OBGye1p50UDSoA+W2ABLPN7i+C5dyC6R/uiAUXRQCs0bXoNIu4QPQzAxDKxHoALOrZcqtiyR/T6CXw7+3IGHhkYcy6BOR2izwT8LptG8rbMiCRAUb+CQ6WzQVb0SNOi5Z2/nX35DRyb/ENazhpWKoGwrpD6nICp5c2qogc4of+c7QcrhgF4Aa/aoAFHiL+RAAAAAElFTkSuQmCC' - app.registerExtension({ name: 'Mixlab.image.ScreenShareNode', async getCustomWidgets (app) { diff --git a/web/javascript/ui_mixlab.js b/web/javascript/ui_mixlab.js index d77a3def..d044cd89 100644 --- a/web/javascript/ui_mixlab.js +++ b/web/javascript/ui_mixlab.js @@ -11,6 +11,8 @@ import { smart_init, addSmartMenu } from './smart_connect.js' import { completion_ } from './chat.js' +import { getLocalData, saveLocalData, updateLLMAPIKey } from './common.js' + function showTextByLanguage (key, json) { // 获取浏览器语言 var language = navigator.language @@ -28,33 +30,40 @@ function showTextByLanguage (key, json) { //系统prompt // const systemPrompt = `You are a prompt creator, your task is to create prompts for the user input request, the prompts are image descriptions that include keywords for (an adjective, type of image, framing/composition, subject, subject appearance/action, environment, lighting situation, details of the shoot/illustration, visuals aesthetics and artists), brake keywords by comas, provide high quality, non-verboose, coherent, brief, concise, and not superfluous prompts, the subject from the input request must be included verbatim on the prompt,the prompt is english` -let tool ={ - "name": "create_prompt", - "description": "Create a prompt with a given subject, content, and style based on user input for image descriptions.", - "parameter": { - "type": "object", - "properties": { - "subject": { - "type": "string", - "description": "The subject of the prompt, included verbatim from the input request.", - "required": true +let tool = { + name: 'create_prompt', + description: + 'Create a prompt with a given subject, content, and style based on user input for image descriptions.', + parameter: { + type: 'object', + properties: { + subject: { + type: 'string', + description: + 'The subject of the prompt, included verbatim from the input request.', + required: true }, - "content": { - "type": "string", - "description": "The content of the prompt, primarily focusing on the scene and objects, including keywords for adjective, type of image, framing/composition, subject appearance/action, and environment.", - "required": true + content: { + type: 'string', + description: + 'The content of the prompt, primarily focusing on the scene and objects, including keywords for adjective, type of image, framing/composition, subject appearance/action, and environment.', + required: true }, - "style": { - "type": "string", - "description": "The style of the prompt, including lighting situation, details of the shoot/illustration, visual aesthetics, and artists. Ensure it is high quality, non-verbose, coherent, brief, concise, and not superfluous.", - "required": true + style: { + type: 'string', + description: + 'The style of the prompt, including lighting situation, details of the shoot/illustration, visual aesthetics, and artists. Ensure it is high quality, non-verbose, coherent, brief, concise, and not superfluous.', + required: true } } } } -const systemPrompt=`You are a helpful assistant with access to the following functions. Use them if required - ${JSON.stringify(tool,null,2)}` - +const systemPrompt = `You are a helpful assistant with access to the following functions. Use them if required - ${JSON.stringify( + tool, + null, + 2 +)}` if (!localStorage.getItem('_mixlab_system_prompt')) { localStorage.setItem('_mixlab_system_prompt', systemPrompt) @@ -100,7 +109,7 @@ async function start_llama (model = 'Phi-3-mini-4k-instruct-Q5_K_S.gguf') { }) const data = await response.json() - if (data.llama_cpp_error||!data.port) { + if (data.llama_cpp_error || !data.port) { return } @@ -145,14 +154,15 @@ function resizeImage (base64Image) { }) } -const createMixlabBtn=()=>{ +const createMixlabBtn = () => { const appsButton = document.createElement('button') appsButton.id = 'mixlab_chatbot_by_llamacpp' - appsButton.className="comfyui-button" + appsButton.className = 'comfyui-button' appsButton.textContent = '♾️Mixlab' // appsButton.onclick = () => appsButton.onclick = async () => { + let llm_key = await updateLLMAPIKey() // if (window._mixlab_llamacpp&&window._mixlab_llamacpp.model&&window._mixlab_llamacpp.model.length>0) { // //显示运行的模型 // createModelsModal([ @@ -164,9 +174,7 @@ const createMixlabBtn=()=>{ // // ms = ms.filter(m => !m.match('-mmproj-')) // // if (ms.length > 0) createModelsModal(ms) // } - createModelsModal([ - - ]) + createModelsModal([], llm_key) } return appsButton } @@ -182,50 +190,49 @@ async function createMenu () { ` menu.append(separator) - if(menu.style.display==="none"&&document.querySelector('.comfyui-menu-push')){ + if ( + menu.style.display === 'none' && + document.querySelector('.comfyui-menu-push') + ) { //新版ui document.querySelector('.comfyui-menu-push').append(createMixlabBtn()) - }else{ + } else { if (!menu.querySelector('#mixlab_chatbot_by_llamacpp')) { menu.append(createMixlabBtn()) } } - - } let isScriptLoaded = {} -function loadExternalScript(url) { +function loadExternalScript (url) { return new Promise((resolve, reject) => { if (isScriptLoaded[url]) { - resolve(); - return; + resolve() + return } - const existingScript = document.querySelector(`script[src="${url}"]`); + const existingScript = document.querySelector(`script[src="${url}"]`) if (existingScript) { existingScript.onload = () => { - isScriptLoaded[url] = true; - resolve(); - }; - existingScript.onerror = reject; - return; + isScriptLoaded[url] = true + resolve() + } + existingScript.onerror = reject + return } - const script = document.createElement('script'); - script.src = url; + const script = document.createElement('script') + script.src = url script.onload = () => { - isScriptLoaded[url] = true; - resolve(); - }; - script.onerror = reject; - document.head.appendChild(script); - }); + isScriptLoaded[url] = true + resolve() + } + script.onerror = reject + document.head.appendChild(script) + }) } - - // function createChart (chartDom, nodes) { @@ -257,9 +264,7 @@ function createChart (chartDom, nodes) { } async function createNodesCharts () { - await loadExternalScript( - '/mixlab/app/lib/echarts.min.js' - ) + await loadExternalScript('/mixlab/app/lib/echarts.min.js') const templates = await loadTemplate() var nodes = {} Array.from(templates, t => { @@ -691,9 +696,9 @@ function get_position_style (ctx, widget_width, y, node_height) { transformOrigin: '0 0', transform: transform, left: - document.querySelector('.comfy-menu').style.display === 'none' - ? `60px` - : `0`, + document.querySelector('.comfy-menu').style.display === 'none' + ? `60px` + : `0`, top: `0`, cursor: 'pointer', position: 'absolute', @@ -830,21 +835,67 @@ async function fetchReadmeContent (url) { async function startLLM (model) { let res = await start_llama(model) - window._mixlab_llamacpp = res||{ model:[] } + window._mixlab_llamacpp = res || { model: [] } - localStorage.setItem('_mixlab_llama_select', res?.model||'') + localStorage.setItem('_mixlab_llama_select', res?.model || '') - if (document.body.querySelector('#mixlab_chatbot_by_llamacpp')&&window._mixlab_llamacpp?.url) { + if ( + document.body.querySelector('#mixlab_chatbot_by_llamacpp') && + window._mixlab_llamacpp?.url + ) { document.body .querySelector('#mixlab_chatbot_by_llamacpp') .setAttribute('title', window._mixlab_llamacpp.url) } - if (document.body.querySelector('#llm_status_btn')&&window._mixlab_llamacpp) { - document.body.querySelector('#llm_status_btn').innerText = window._mixlab_llamacpp.model + if ( + document.body.querySelector('#llm_status_btn') && + window._mixlab_llamacpp + ) { + document.body.querySelector('#llm_status_btn').innerText = + window._mixlab_llamacpp.model } } -function createModelsModal (models) { +function createInputOfLabel(labelText,key,id){ + const label = document.createElement('p') + label.innerText = labelText + + const input = document.createElement('input') + input.type = 'text' + input.style = `color: var(--input-text); + background-color: var(--comfy-input-bg); + border-radius: 8px; + border-color: var(--border-color); + height: 26px; + padding: 4px 10px; + width: 150px; + margin-left: 12px;` + + input.value = getLocalData(key)["-"] ||Object.values(getLocalData(key))[0] || 'by Mixlab' + + input.addEventListener('change', e => { + e.stopPropagation() + e.preventDefault() + + saveLocalData(key, '-', input.value) + }) + + + const div=document.createElement('div'); + div.style=`display: flex; + justify-content: flex-start; + align-items: baseline;padding: 0 18px;` + + div.addEventListener('click', e => { + e.stopPropagation() + }) + + div.appendChild(label) + div.appendChild(input) + return div +} + +function createModelsModal (models, llmKey) { var div = document.querySelector('#model-modal') || document.createElement('div') div.id = 'model-modal' @@ -910,8 +961,6 @@ function createModelsModal (models) { user-select: none; ` - // headTitleElement.href = 'https://github.com/shadowcz007/comfyui-mixlab-nodes' - // headTitleElement.target = '_blank' const linkIcon = document.createElement('small') linkIcon.textContent = showTextByLanguage('Auto Open', { 'Auto Open': '自动开启' @@ -923,7 +972,7 @@ function createModelsModal (models) { Status: 'OFF' }) statusIcon.id = 'llm_status_btn' - statusIcon.style=`padding: 4px; + statusIcon.style = `padding: 4px; background-color: rgb(102, 255, 108); color: black; font-size: 12px; @@ -939,35 +988,12 @@ function createModelsModal (models) { // startLLM() }) - const n_gpu = document.createElement('input') - n_gpu.type = 'number' - n_gpu.setAttribute('min', -1) - n_gpu.setAttribute('max', 9999) - - n_gpu.style = `color: var(--input-text); - background-color: var(--comfy-input-bg); - border-radius: 8px; - border-color: var(--border-color); - height: 26px; - padding: 4px 10px; - width: 48px; - margin-left: 12px;` - if (localStorage.getItem('_mixlab_llama_n_gpu')) { - n_gpu.value = parseInt(localStorage.getItem('_mixlab_llama_n_gpu')) - } else { - n_gpu.value = -1 - localStorage.setItem('_mixlab_llama_n_gpu', -1) - } - - const n_gpu_p = document.createElement('p') - n_gpu_p.innerText = 'n_gpu_layers' - const batchPageBtn = document.createElement('div') batchPageBtn.style = `display: flex; justify-content: center; align-items: center; font-size: 12px;` - batchPageBtn.innerHTML=`App` const title = document.createElement('p') @@ -983,20 +1009,16 @@ function createModelsModal (models) { font-size: 12px; flex-direction: column; ` left_d.appendChild(title) - // title.appendChild(statusIcon) - // left_d.appendChild(linkIcon) left_d.appendChild(batchPageBtn) headTitleElement.appendChild(left_d) - // headTitleElement.appendChild(n_gpu_div) - //重启 const reStart = document.createElement('small') reStart.textContent = showTextByLanguage('restart', { restart: '重启' }) - reStart.style=`padding: 8px; + reStart.style = `padding: 8px; font-size: 16px; outline: 1px solid; padding-top: 4px; @@ -1029,23 +1051,23 @@ function createModelsModal (models) { }) }) - n_gpu.addEventListener('click', e => { - e.stopPropagation() - localStorage.setItem('_mixlab_llama_n_gpu', n_gpu.value) - }) - modal.appendChild(headTitleElement) // Create modal content area var modalContent = document.createElement('div') modalContent.classList.add('modal-content') + let llmKeyDiv=createInputOfLabel('LLM Key','_mixlab_llm_api_key',"-") + + saveLocalData("_mixlab_llm_api_url","-","https://api.siliconflow.cn/v1") + let llmAPIDiv=createInputOfLabel('LLM API','_mixlab_llm_api_url',"-") + + modalContent.appendChild(llmKeyDiv); + modalContent.appendChild(llmAPIDiv) + var inputForSystemPrompt = document.createElement('textarea') inputForSystemPrompt.className = 'comfy-multiline-input' - inputForSystemPrompt.style = ` height: 260px; - width: 480px; - font-size: 16px; - padding: 18px;` + inputForSystemPrompt.style = `height: 260px;width: 480px;font-size: 16px;padding: 18px;` inputForSystemPrompt.value = localStorage.getItem('_mixlab_system_prompt') inputForSystemPrompt.addEventListener('change', e => { @@ -1057,9 +1079,9 @@ function createModelsModal (models) { e.stopPropagation() }) - // modalContent.appendChild(inputForSystemPrompt) + modalContent.appendChild(inputForSystemPrompt) - if (!window._mixlab_llamacpp||(window._mixlab_llamacpp?.model?.length==0)) { + if (!window._mixlab_llamacpp || window._mixlab_llamacpp?.model?.length == 0) { for (const m of models) { let d = document.createElement('div') d.innerText = `${showTextByLanguage('Run', { @@ -1443,7 +1465,7 @@ app.registerExtension({ .querySelector('#mixlab_chatbot_by_llamacpp') .setAttribute('title', res.url) }) - }else{ + } else { // startLLM('') } @@ -1470,19 +1492,18 @@ app.registerExtension({ LGraphCanvas.prototype.fixTheNode = function (node) { let new_node = LiteGraph.createNode(node.comfyClass) console.log(node) - if(new_node){ + if (new_node) { new_node.pos = [node.pos[0], node.pos[1]] app.canvas.graph.add(new_node, false) copyNodeValues(node, new_node) app.canvas.graph.remove(node) } - } smart_init() LGraphCanvas.prototype.text2text = async function (node) { - // console.log(node) + let widget = node.widgets.filter( w => w.name === 'text' && typeof w.value == 'string' )[0] @@ -1494,10 +1515,12 @@ app.registerExtension({ let userInput = widget.value widget.value = widget.value.trim() widget.value += '\n' - let jsonStr=""; + let jsonStr = '' try { await completion_( - window._mixlab_llamacpp.url + '/v1/chat/completions', + getLocalData('_mixlab_llm_api_key')['-']||Object.values(getLocalData('_mixlab_llm_api_key'))[0], + getLocalData("_mixlab_llm_api_url")['-']||Object.values(getLocalData("_mixlab_llm_api_url"))[0], + [ { role: 'system', @@ -1509,7 +1532,7 @@ app.registerExtension({ t => { // console.log(t) widget.value += t - jsonStr+=t + jsonStr += t } ) } catch (error) { @@ -1533,29 +1556,34 @@ app.registerExtension({ ], controller, t => { - // console.log(t) + console.log(t) widget.value += t - jsonStr+=t + jsonStr += t } ) }) } } - let json=null; - - try { - json=JSON.parse(jsonStr.trim()) - } catch (error) { - json=JSON.parse(jsonStr.trim()+"}") - } - - if(json){ - widget.value = [json.subject,json.content,json.style].join('\n') - }else{ - widget.value = widget.value.trim() - } - + // let json = jsonStr + // widget.value = widget.value.trim()+json + // console.log(jsonStr) + // try { + // json = JSON.parse(jsonStr.trim()) + // } catch (error) { + + // try { + // json = JSON.parse(jsonStr.trim() + '}') + // } catch (error) { + + // } + // } + + // if (json) { + // widget.value = [json.subject, json.content, json.style].join('\n') + // } else { + // widget.value = widget.value.trim() + // } } } @@ -1836,15 +1864,14 @@ app.registerExtension({ ) let text_input = node.inputs?.filter( - inp => inp.name == 'text' && inp.type == 'STRING' + inp => inp.name == 'text' && (inp.type == 'STRING' ) ) - + if ( - text_input && - text_input.length == 0 && + text_widget && text_widget.length == 1 && - window._mixlab_llamacpp && + false && node.type != 'ShowTextForGPT' ) { opts.push({ @@ -1855,19 +1882,19 @@ app.registerExtension({ }) } - if ( - node.imgs && - node.imgs.length > 0 && - window._mixlab_llamacpp && - window._mixlab_llamacpp.chat_format === 'llava-1-5' - ) { - opts.push({ - content: 'Image-to-Text ♾️Mixlab', // with a name - callback: () => { - LGraphCanvas.prototype.image2text(node) - } // and the callback - }) - } + // if ( + // node.imgs && + // node.imgs.length > 0 && + // window._mixlab_llamacpp && + // window._mixlab_llamacpp.chat_format === 'llava-1-5' + // ) { + // opts.push({ + // content: 'Image-to-Text ♾️Mixlab', // with a name + // callback: () => { + // LGraphCanvas.prototype.image2text(node) + // } // and the callback + // }) + // } } return [...opts, null, ...options] // and return the options diff --git a/web/javascript/utils_mixlab.js b/web/javascript/utils_mixlab.js index 39a39ea9..daa5ac9f 100644 --- a/web/javascript/utils_mixlab.js +++ b/web/javascript/utils_mixlab.js @@ -1,49 +1,13 @@ import { app } from '../../../scripts/app.js' import { $el } from '../../../scripts/ui.js' +import { + loadExternalScript, + updateLLMAPIKey, + get_position_style, + getLocalData +} from './common.js' -const getLocalData = key => { - let data = {} - try { - data = JSON.parse(localStorage.getItem(key)) || {} - } catch (error) { - return {} - } - return data -} -function get_position_style (ctx, widget_width, y, node_height) { - const MARGIN = 4 // the margin around the html element - - /* Create a transform that deals with all the scrolling and zooming */ - const elRect = ctx.canvas.getBoundingClientRect() - const transform = new DOMMatrix() - .scaleSelf( - elRect.width / ctx.canvas.width, - elRect.height / ctx.canvas.height - ) - .multiplySelf(ctx.getTransform()) - .translateSelf(MARGIN, MARGIN + y) - - return { - transformOrigin: '0 0', - transform: transform, - left: - document.querySelector('.comfy-menu').style.display === 'none' - ? `60px` - : `0`, - top: `0`, - cursor: 'pointer', - position: 'absolute', - maxWidth: `${widget_width - MARGIN * 2}px`, - // maxHeight: `${node_height - MARGIN * 2}px`, // we're assuming we have the whole height of the node - width: `${widget_width - MARGIN * 2}px`, - // height: `${node_height * 0.3 - MARGIN * 2}px`, - // background: '#EEEEEE', - display: 'flex', - flexDirection: 'column', - // alignItems: 'center', - justifyContent: 'space-around' - } -} +loadExternalScript('/mixlab/app/lib/pickr.min.js') function hexToRGBA (hexColor) { var hex = hexColor.replace('#', '') @@ -125,7 +89,7 @@ app.registerExtension({ nodeType.prototype.onNodeCreated = function () { orig_nodeCreated?.apply(this, arguments) - console.log('Color nodeData', this.div) + // console.log('Color nodeData', this.div) const widget = { type: 'div', @@ -366,7 +330,7 @@ app.registerExtension({ return [128, 32] // a method to compute the current size of the widget }, async serializeValue (nodeId, widgetIndex) { - let data = getLocalData('_mixlab_api_key') + let data = getLocalData('_mixlab_llm_api_key') return data[node.id] || 'by Mixlab' } } @@ -383,13 +347,14 @@ app.registerExtension({ nodeType.prototype.onNodeCreated = function () { orig_nodeCreated?.apply(this, arguments) + const rowHeight = this.rowHeight const widget = { type: 'div', name: 'input_key', draw (ctx, node, widget_width, y, widget_height) { Object.assign( this.div.style, - get_position_style(ctx, widget_width, 24, node.size[1]) + get_position_style(ctx, widget_width, y, node.size[1]) ) } } @@ -417,11 +382,11 @@ app.registerExtension({ // ip.value = placeholder ip.style = `margin-left:8px; - outline: none; - border: none; - padding:12px; - width: 100%; - ` + outline: none; + border: none; + padding:12px; + width: 100%; + ` div.appendChild(ip) @@ -429,12 +394,13 @@ app.registerExtension({ let data = getLocalData(key) data[this.id] = ip.value.trim() localStorage.setItem(key, JSON.stringify(data)) + updateLLMAPIKey(data[this.id]) }) return div } - let inputKey = inputDiv('_mixlab_api_key', 'Key') + let inputKey = inputDiv('_mixlab_llm_api_key', 'Key') widget.div.appendChild(inputKey) @@ -447,6 +413,12 @@ app.registerExtension({ return onRemoved?.() } + // const processMouseWheel=app.canvas.processMouseWheel + // app.canvas.processMouseWheel=()=>{ + // console.log(app.canvas.ds.scale) + // return processMouseWheel?.() + // } + this.serialize_widgets = true //需要保存参数 } } @@ -455,11 +427,13 @@ app.registerExtension({ if (node.type === 'KeyInput') { let widget = node.widgets.filter(w => w.div)[0] - let apiKey = getLocalData('_mixlab_api_key') + let apiKey = getLocalData('_mixlab_llm_api_key') let id = node.id if (widget.div.querySelector('.Key')) widget.div.querySelector('.Key').value = apiKey[id] || 'by Mixlab' + + if (apiKey[id]) updateLLMAPIKey(apiKey[id]) } }, nodeCreated (node, app) { @@ -469,12 +443,14 @@ app.registerExtension({ if (node.type === 'KeyInput') { let widget = node.widgets.filter(w => w.div)[0] - let apiKey = getLocalData('_mixlab_api_key') + let apiKey = getLocalData('_mixlab_llm_api_key') let id = node.id if (widget.div.querySelector('.Key')) widget.div.querySelector('.Key').value = apiKey[id] || 'by Mixlab' + + if (apiKey[id]) updateLLMAPIKey(apiKey[id]) } }, 1000) } diff --git a/workflow/5-gpt-workflow.json b/workflow/5-gpt-workflow.json deleted file mode 100644 index e7867882..00000000 --- a/workflow/5-gpt-workflow.json +++ /dev/null @@ -1,631 +0,0 @@ -{ - "last_node_id": 47, - "last_link_id": 46, - "nodes": [ - { - "id": 27, - "type": "CLIPTextEncode", - "pos": [ - 1961.178268896482, - 527.6060791015625 - ], - "size": { - "0": 422.84503173828125, - "1": 164.31304931640625 - }, - "flags": {}, - "order": 5, - "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 24 - }, - { - "name": "text", - "type": "STRING", - "link": 46, - "widget": { - "name": "text" - } - } - ], - "outputs": [ - { - "name": "CONDITIONING", - "type": "CONDITIONING", - "links": [ - 21 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "CLIPTextEncode" - }, - "widgets_values": [ - "beautiful scenery nature glass bottle landscape, , purple galaxy bottle," - ] - }, - { - "id": 28, - "type": "CLIPTextEncode", - "pos": [ - 1958.7452854980445, - 266 - ], - "size": { - "0": 425.27801513671875, - "1": 180.6060791015625 - }, - "flags": {}, - "order": 3, - "mode": 0, - "inputs": [ - { - "name": "clip", - "type": "CLIP", - "link": 25 - } - ], - "outputs": [ - { - "name": "CONDITIONING", - "type": "CONDITIONING", - "links": [ - 22 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "CLIPTextEncode" - }, - "widgets_values": [ - "text, watermark" - ] - }, - { - "id": 24, - "type": "KSampler", - "pos": [ - 2434.0233006347635, - 80 - ], - "size": { - "0": 315, - "1": 262 - }, - "flags": {}, - "order": 8, - "mode": 0, - "inputs": [ - { - "name": "model", - "type": "MODEL", - "link": 20 - }, - { - "name": "positive", - "type": "CONDITIONING", - "link": 21 - }, - { - "name": "negative", - "type": "CONDITIONING", - "link": 22 - }, - { - "name": "latent_image", - "type": "LATENT", - "link": 23 - } - ], - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 26 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "KSampler" - }, - "widgets_values": [ - 971428736321335, - "randomize", - 15, - 8, - "euler", - "karras", - 1 - ] - }, - { - "id": 29, - "type": "VAEDecode", - "pos": [ - 2799.0233006347635, - 80 - ], - "size": { - "0": 210, - "1": 46 - }, - "flags": { - "collapsed": false - }, - "order": 9, - "mode": 0, - "inputs": [ - { - "name": "samples", - "type": "LATENT", - "link": 26 - }, - { - "name": "vae", - "type": "VAE", - "link": 27 - } - ], - "outputs": [ - { - "name": "IMAGE", - "type": "IMAGE", - "links": [ - 31 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "VAEDecode" - } - }, - { - "id": 26, - "type": "EmptyLatentImage", - "pos": [ - 2069.0233006347635, - 80 - ], - "size": { - "0": 315, - "1": 106 - }, - "flags": {}, - "order": 0, - "mode": 0, - "outputs": [ - { - "name": "LATENT", - "type": "LATENT", - "links": [ - 23 - ], - "slot_index": 0 - } - ], - "properties": { - "Node name for S&R": "EmptyLatentImage" - }, - "widgets_values": [ - 512, - 512, - 1 - ] - }, - { - "id": 25, - "type": "CheckpointLoaderSimple", - "pos": [ - 1593.7452854980445, - 80 - ], - "size": { - "0": 315, - "1": 98 - }, - "flags": {}, - "order": 1, - "mode": 0, - "outputs": [ - { - "name": "MODEL", - "type": "MODEL", - "links": [ - 20 - ], - "slot_index": 0 - }, - { - "name": "CLIP", - "type": "CLIP", - "links": [ - 24, - 25 - ], - "slot_index": 1 - }, - { - "name": "VAE", - "type": "VAE", - "links": [ - 27 - ], - "slot_index": 2 - } - ], - "properties": { - "Node name for S&R": "CheckpointLoaderSimple" - }, - "widgets_values": [ - "deliberate_v2.safetensors" - ] - }, - { - "id": 31, - "type": "PreviewImage", - "pos": [ - 2439, - 408 - ], - "size": { - "0": 563.4671630859375, - "1": 720.8866577148438 - }, - "flags": {}, - "order": 10, - "mode": 0, - "inputs": [ - { - "name": "images", - "type": "IMAGE", - "link": 31 - } - ], - "properties": { - "Node name for S&R": "PreviewImage" - } - }, - { - "id": 44, - "type": "ShowTextForGPT", - "pos": [ - 1171, - 425 - ], - "size": { - "0": 432.46002197265625, - "1": 264.40771484375 - }, - "flags": {}, - "order": 6, - "mode": 0, - "inputs": [ - { - "name": "text", - "type": "STRING", - "link": 44, - "widget": { - "name": "text" - } - } - ], - "outputs": [ - { - "name": "STRING", - "type": "STRING", - "links": null, - "shape": 6 - } - ], - "properties": { - "Node name for S&R": "ShowTextForGPT" - }, - "widgets_values": [ - "[\n {\n \"role\": \"system\",\n \"content\": \"You are ChatGPT, a large language model trained by OpenAI. Answer as concisely as possible.\"\n },\n {\n \"role\": \"user\",\n \"content\": \"\"\n }\n]" - ] - }, - { - "id": 43, - "type": "ShowTextForGPT", - "pos": [ - 1166, - 740 - ], - "size": { - "0": 424.0079650878906, - "1": 430.6391296386719 - }, - "flags": {}, - "order": 7, - "mode": 0, - "inputs": [ - { - "name": "text", - "type": "STRING", - "link": 45, - "widget": { - "name": "text" - } - } - ], - "outputs": [ - { - "name": "STRING", - "type": "STRING", - "links": null, - "shape": 6 - } - ], - "properties": { - "Node name for S&R": "ShowTextForGPT" - }, - "widgets_values": [ - "[\n {\n \"role\": \"user\",\n \"content\": \"\"\n },\n {\n \"role\": \"assistant\",\n \"content\": \"I'm sorry, I'm ChatGLM3-6B, not ChatGPT. I am a language model jointly trained by Tsinghua University KEG Lab and Zhipu AI Company.\"\n }\n]" - ] - }, - { - "id": 45, - "type": "ShowTextForGPT", - "pos": [ - 1092, - 262 - ], - "size": { - "0": 635.8358154296875, - "1": 101.46092224121094 - }, - "flags": {}, - "order": 4, - "mode": 0, - "inputs": [ - { - "name": "text", - "type": "STRING", - "link": 43, - "widget": { - "name": "text" - } - } - ], - "outputs": [ - { - "name": "STRING", - "type": "STRING", - "links": null, - "shape": 6 - } - ], - "properties": { - "Node name for S&R": "ShowTextForGPT" - }, - "widgets_values": [ - "I'm sorry, I'm ChatGLM3-6B, not ChatGPT. I am a language model jointly trained by Tsinghua University KEG Lab and Zhipu AI Company." - ] - }, - { - "id": 47, - "type": "ChatGPTOpenAI", - "pos": [ - 585, - 306 - ], - "size": { - "0": 400, - "1": 342 - }, - "flags": {}, - "order": 2, - "mode": 0, - "outputs": [ - { - "name": "text", - "type": "STRING", - "links": [ - 43, - 46 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "messages", - "type": "STRING", - "links": [ - 44 - ], - "shape": 3, - "slot_index": 1 - }, - { - "name": "session_history", - "type": "STRING", - "links": [ - 45 - ], - "shape": 3, - "slot_index": 2 - } - ], - "properties": { - "Node name for S&R": "ChatGPTOpenAI" - }, - "widgets_values": [ - null, - null, - "", - "You are ChatGPT, a large language model trained by OpenAI. Answer as concisely as possible.", - "gpt-3.5-turbo-16k", - 2220, - "randomize", - 1, - null - ] - } - ], - "links": [ - [ - 2, - 4, - 0, - 5, - 0, - "STRING" - ], - [ - 3, - 6, - 0, - 4, - 0, - "STRING" - ], - [ - 4, - 6, - 1, - 7, - 0, - "JSON" - ], - [ - 8, - 10, - 0, - 11, - 0, - "STRING" - ], - [ - 12, - 10, - 1, - 14, - 0, - "STRING" - ], - [ - 13, - 10, - 1, - 16, - 0, - "JSON" - ], - [ - 20, - 25, - 0, - 24, - 0, - "MODEL" - ], - [ - 21, - 27, - 0, - 24, - 1, - "CONDITIONING" - ], - [ - 22, - 28, - 0, - 24, - 2, - "CONDITIONING" - ], - [ - 23, - 26, - 0, - 24, - 3, - "LATENT" - ], - [ - 24, - 25, - 1, - 27, - 0, - "CLIP" - ], - [ - 25, - 25, - 1, - 28, - 0, - "CLIP" - ], - [ - 26, - 24, - 0, - 29, - 0, - "LATENT" - ], - [ - 27, - 25, - 2, - 29, - 1, - "VAE" - ], - [ - 31, - 29, - 0, - 31, - 0, - "IMAGE" - ], - [ - 43, - 47, - 0, - 45, - 0, - "STRING" - ], - [ - 44, - 47, - 1, - 44, - 0, - "STRING" - ], - [ - 45, - 47, - 2, - 43, - 0, - "STRING" - ], - [ - 46, - 47, - 0, - 27, - 1, - "STRING" - ] - ], - "groups": [], - "config": {}, - "extra": {}, - "version": 0.4 -} \ No newline at end of file diff --git a/workflow/6-gpt-all-workflow.json b/workflow/6-gpt-all-workflow.json deleted file mode 100644 index ffdc2c91..00000000 --- a/workflow/6-gpt-all-workflow.json +++ /dev/null @@ -1,251 +0,0 @@ -{ - "last_node_id": 5, - "last_link_id": 4, - "nodes": [ - { - "id": 4, - "type": "ChatGPTOpenAI", - "pos": [ - -512, - -236 - ], - "size": { - "0": 400, - "1": 342 - }, - "flags": {}, - "order": 0, - "mode": 0, - "outputs": [ - { - "name": "text", - "type": "STRING", - "links": [ - 2 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "messages", - "type": "STRING", - "links": null, - "shape": 3 - }, - { - "name": "session_history", - "type": "STRING", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ChatGPTOpenAI" - }, - "widgets_values": [ - null, - null, - "描述一个科幻的场景", - "You are ChatGPT, a large language model trained by OpenAI. Answer as concisely as possible.", - "gpt-35-turbo", - 6933, - "randomize", - 1, - null - ] - }, - { - "id": 2, - "type": "ChatGPTOpenAI", - "pos": [ - -36, - -234 - ], - "size": { - "0": 400, - "1": 342 - }, - "flags": {}, - "order": 1, - "mode": 0, - "inputs": [ - { - "name": "prompt", - "type": "STRING", - "link": 2, - "widget": { - "name": "prompt" - } - } - ], - "outputs": [ - { - "name": "text", - "type": "STRING", - "links": [ - 3 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "messages", - "type": "STRING", - "links": null, - "shape": 3 - }, - { - "name": "session_history", - "type": "STRING", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ChatGPTOpenAI" - }, - "widgets_values": [ - null, - null, - "", - "增加丰富的细节和光影,摄影技巧,镜头语言,材质肌理", - "gpt-3.5-turbo", - 2836, - "randomize", - 1, - null - ] - }, - { - "id": 5, - "type": "ChatGPTOpenAI", - "pos": [ - -30, - 183 - ], - "size": { - "0": 400, - "1": 342 - }, - "flags": {}, - "order": 2, - "mode": 0, - "inputs": [ - { - "name": "prompt", - "type": "STRING", - "link": 3, - "widget": { - "name": "prompt" - } - } - ], - "outputs": [ - { - "name": "text", - "type": "STRING", - "links": [ - 4 - ], - "shape": 3, - "slot_index": 0 - }, - { - "name": "messages", - "type": "STRING", - "links": null, - "shape": 3 - }, - { - "name": "session_history", - "type": "STRING", - "links": null, - "shape": 3 - } - ], - "properties": { - "Node name for S&R": "ChatGPTOpenAI" - }, - "widgets_values": [ - null, - null, - "", - "翻译成英文,并按照格式输出: 画面、主题、细节、灯光、氛围、艺术家、其他", - "gpt-3.5-turbo", - 1085, - "randomize", - 1, - null - ] - }, - { - "id": 3, - "type": "ShowTextForGPT", - "pos": [ - 447, - -229 - ], - "size": [ - 503.79851499517997, - 356.0560985581077 - ], - "flags": {}, - "order": 3, - "mode": 0, - "inputs": [ - { - "name": "text", - "type": "STRING", - "link": 4, - "widget": { - "name": "text" - } - } - ], - "outputs": [ - { - "name": "STRING", - "type": "STRING", - "links": null, - "shape": 6 - } - ], - "properties": { - "Node name for S&R": "ShowTextForGPT" - }, - "widgets_values": [ - "Picture: The picture is composed of carefully chosen elements, capturing the subject matter in a visually striking way.\n\nTheme: The theme of the photograph could vary, from capturing nature's beauty to showcasing urban landscapes, human emotions, or abstract concepts.\n\nDetails: The photograph captures intricate details, bringing attention to the subject's textures, colors, shapes, and patterns.\n\nLighting: The photographer manipulates lighting, using techniques like natural light, dramatic shadows, or artificial lighting to enhance the mood and atmosphere of the photograph.\n\nAmbiance: The photograph evokes a specific ambiance or mood, whether it's serene, mysterious, joyful, melancholic, or any other emotional response.\n\nArtist: The photographer skillfully crafts the image, demonstrating their artistic vision, technical skills, and creative expression through the composition, framing, and post-processing choices.\n\nOthers: Apart from the elements mentioned above, the photograph may also incorporate other creative techniques like long exposure, multiple exposures, color grading, or unconventional perspectives to create a unique and captivating image.\n\nIn the future, as technology and imagination continue to advance, photography will likely continue to evolve and innovate, offering even more realistic and awe-inspiring visual experiences for humans." - ] - } - ], - "links": [ - [ - 2, - 4, - 0, - 2, - 0, - "STRING" - ], - [ - 3, - 2, - 0, - 5, - 0, - "STRING" - ], - [ - 4, - 5, - 0, - 3, - 0, - "STRING" - ] - ], - "groups": [], - "config": {}, - "extra": {}, - "version": 0.4 -} \ No newline at end of file