From def2cb3b02237fc5a30f919afc3343803a85dd88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E9=9B=AA=E5=B3=B0?= Date: Mon, 15 Apr 2024 17:13:48 +0800 Subject: [PATCH] support rawgithub and hf mirror --- README.md | 3 ++ __init__.py | 6 +-- easyapi/api.py | 49 ++++++++++----------- static/js/easyapi.js | 101 ++++++++++++++++++++++++++++++++++++++++--- 4 files changed, 124 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index df55dc9..2eb4335 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,9 @@ Tips: base64格式字符串比较长,会导致界面卡顿,接口请求带 - 模糊搜索 配置路径:Settings -> [EasyApi] Fuzzy Search ![save api extended](docs/fuzzy_search.png) + - 使用镜像地址(模型自动下载问题) + - 配置路径:Settings -> [EasyApi] Huggingface Mirror + - 配置路径:Settings -> [EasyApi] RawGithub Mirror - 菜单扩展 diff --git a/__init__.py b/__init__.py index 1e6bb03..1994f34 100644 --- a/__init__.py +++ b/__init__.py @@ -2,7 +2,7 @@ import glob import importlib.util import sys import os -from .easyapi import api, logScript +from .easyapi import api, logScript, mirrorUrlApply extension_folder = os.path.dirname(os.path.realpath(__file__)) @@ -13,8 +13,8 @@ pyPath = os.path.join(extension_folder, 'easyapi') # sys.path.append(extension_folder) logScript.log_wrap() -# api.init() - +api.init() +mirrorUrlApply.init() def loadCustomNodes(): files = glob.glob(os.path.join(pyPath, "*Node.py"), recursive=True) diff --git a/easyapi/api.py b/easyapi/api.py index 532aaca..55a36a7 100644 --- a/easyapi/api.py +++ b/easyapi/api.py @@ -1,5 +1,4 @@ import os -import json import folder_paths import nodes @@ -8,6 +7,7 @@ from aiohttp import web import execution from simple_lama_inpainting import SimpleLama from .util import image_to_base64, base64_to_image +from .settings import reset_history_size, get_settings, set_settings extension_folder = os.path.dirname(os.path.realpath(__file__)) @@ -22,28 +22,6 @@ else: os.makedirs(lama_model_dir, exist_ok=True) -def reset_history_size(max_size=execution.MAXIMUM_HISTORY_SIZE, isStart=False): - configDataFilePath = os.path.join(extension_folder, 'config') - if not os.path.exists(configDataFilePath): - os.mkdir(configDataFilePath) - configFile = os.path.join(configDataFilePath, "easyapi.json") - with open(configFile, 'w+', encoding="utf-8") as file: - json.dump({"history_max_size": max_size}, file, indent=2) - else: - configFile = os.path.join(configDataFilePath, "easyapi.json") - if not os.path.exists(configFile): - with open(configFile, 'w+', encoding="utf-8") as file: - json.dump({"history_max_size": max_size}, file, indent=2) - else: - with open(configFile, 'r+', encoding="UTF-8") as file: - data = json.load(file) - if not isStart: - data['history_max_size'] = max_size - - with open(configFile, 'w+', encoding="UTF-8") as file: - json.dump(data, file, indent=2) - - def register_routes(): @PromptServer.instance.routes.post("/easyapi/history/size") async def set_history_size(request): @@ -70,13 +48,30 @@ def register_routes(): @PromptServer.instance.routes.get("/easyapi/history/maxSize") async def get_history_size(request): maxSize = execution.MAXIMUM_HISTORY_SIZE - with open(os.path.join(extension_folder, 'config/easyapi.json'), 'r', encoding="UTF-8") as file: - data = json.load(file) - if data['history_max_size'] is not None: - maxSize = data['history_max_size'] + data = get_settings(file='config/easyapi.json') + if 'history_max_size' in data: + maxSize = data['history_max_size'] return web.json_response({"maxSize": maxSize}) + @PromptServer.instance.routes.post("/easyapi/settings/{id}") + async def set_setting(request): + setting_id = request.match_info.get("id", None) + if not setting_id: + return web.Response(status=400) + json_body = await request.json() + set_settings(setting_id, json_body[setting_id]) + return web.Response(status=200) + + @PromptServer.instance.routes.get("/easyapi/settings/{id}") + async def get_setting(request): + setting_id = request.match_info.get("id", None) + settings = get_settings(file='config/easyapi.json') + if settings and setting_id in settings: + return web.json_response({setting_id: settings[setting_id]}) + + return web.json_response({}) + @PromptServer.instance.routes.post("/easyapi/prompt") async def post_prompt(request): print("got prompt") diff --git a/static/js/easyapi.js b/static/js/easyapi.js index a32c24c..ec4b666 100644 --- a/static/js/easyapi.js +++ b/static/js/easyapi.js @@ -5,9 +5,6 @@ import { debounce } from "./debounce.js" app.registerExtension({ name: "Comfy.EasyApi.Setting", async setup(app) { - const res = await api.fetchApi("/easyapi/history/maxSize") - const jsonData = await res.json() || {}; - const max = jsonData['maxSize'] || 10000 const changeFun = debounce((n, o) => api.fetchApi("/easyapi/history/size", { method: 'POST', headers: { @@ -17,10 +14,10 @@ app.registerExtension({ maxSize: n }) }), 1000, false) - const setting = app.ui.settings.addSetting({ + app.ui.settings.addSetting({ id: "Easyapi.SizeOfHistory", name: "[EasyApi] Maximum History Size", - defaultValue: max, + defaultValue: 10000, type: "slider", attrs: { min: 1, @@ -31,6 +28,100 @@ app.registerExtension({ changeFun.apply(null, [newVal, oldVal]) } }); + const changeFun1 = debounce((n, o) => api.fetchApi("/easyapi/settings/huggingface_mirror", { + method: 'POST', + headers: { + "content-type": "application/json", + }, + body: JSON.stringify({ + huggingface_mirror: n + }) + }), 1000, false) + app.ui.settings.addSetting({ + id: "Easyapi.MirrorSet.huggingface", + name: "[EasyApi] Huggingface Mirror", + tooltip: "Will replace host huggingface.co", + defaultValue: "None", + type: "combo", + options: [ + { + value: "None", + text: "None" + }, + { + value: "hf-mirror.com", + text: "hf-mirror.com" + } + ], + + onChange: (newVal, oldVal) => { + changeFun1.apply(null, [newVal, oldVal]) + } + }); + + const changeFun2 = debounce((n, o) => api.fetchApi("/easyapi/settings/rawgithub_mirror", { + method: 'POST', + headers: { + "content-type": "application/json", + }, + body: JSON.stringify({ + rawgithub_mirror: n + }) + }), 1000, false) + app.ui.settings.addSetting({ + id: "Easyapi.MirrorSet.rawgithub", + name: "[EasyApi] RawGithub Mirror", + defaultValue: "None", + tooltip: "Will replace host raw.githubusercontent.com", + type: "combo", + options: [ + { + value: "None", + text: "None" + }, + { + value: "raw.gitmirror.com", + text: "gitmirror.com" + }, + { + value: "mirror.ghproxy.com/https://raw.githubusercontent.com", + text: "mirror.ghproxy.com" + }, + { + value: "ghproxy.net/https://raw.githubusercontent.com", + text: "ghproxy.net" + }, + { + value: "ghproxy.org/https://raw.githubusercontent.com", + text: "ghproxy.org" + }, + { + value: "gh-proxy.com/https://raw.githubusercontent.com", + text: "gh-proxy.com" + }, + { + value: "mirrors.chenby.cn/https://raw.githubusercontent.com", + text: "mirrors.chenby.cn" + }, + { + value: "521github.com/extdomains/raw.githubusercontent.com", + text: "521github.com" + }, + { + value: "gh.ddlc.top/https://raw.githubusercontent.com", + text: "gh.ddlc.top" + }, + { + value: "github.moeyy.xyz/https://raw.githubusercontent.com", + text: "github.moeyy.xyz" + } + ], + + onChange: (newVal, oldVal) => { + changeFun2.apply(null, [newVal, oldVal]) + } + }); + const ctxMenu = LiteGraph.ContextMenu; const replace = () => { LiteGraph.ContextMenu = function (values, options) {