From f7180fbaddee039aec1c2f8ef485d8dcb1321778 Mon Sep 17 00:00:00 2001 From: okxlin Date: Tue, 19 Dec 2023 01:05:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0sd-comfyui=E5=88=B0?= =?UTF-8?q?=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/{sd-webui-comfy => sd-comfyui}/README.md | 0 apps/sd-comfyui/data.yml | 20 +++++++ .../latest}/comfy/Dockerfile | 0 .../latest}/comfy/entrypoint.sh | 0 apps/sd-comfyui/latest/data.yml | 52 ++++++++++++++++++ apps/sd-comfyui/latest/docker-compose.yml | 34 ++++++++++++ apps/sd-comfyui/latest/env.sample | 8 +++ .../latest}/scripts/init.sh | 0 .../latest}/scripts/update.sh | 0 apps/sd-comfyui/logo.png | Bin 0 -> 4768 bytes apps/sd-webui-comfy/data.yml | 13 ----- apps/sd-webui-comfy/logo.png | Bin 15712 -> 0 bytes apps/sd-webui-comfy/sd-webui-comfy/data.yml | 46 ---------------- .../sd-webui-comfy/docker-compose.yml | 41 -------------- 14 files changed, 114 insertions(+), 100 deletions(-) rename apps/{sd-webui-comfy => sd-comfyui}/README.md (100%) create mode 100644 apps/sd-comfyui/data.yml rename apps/{sd-webui-comfy/sd-webui-comfy => sd-comfyui/latest}/comfy/Dockerfile (100%) rename apps/{sd-webui-comfy/sd-webui-comfy => sd-comfyui/latest}/comfy/entrypoint.sh (100%) create mode 100644 apps/sd-comfyui/latest/data.yml create mode 100644 apps/sd-comfyui/latest/docker-compose.yml create mode 100644 apps/sd-comfyui/latest/env.sample rename apps/{sd-webui-comfy/sd-webui-comfy => sd-comfyui/latest}/scripts/init.sh (100%) rename apps/{sd-webui-comfy/sd-webui-comfy => sd-comfyui/latest}/scripts/update.sh (100%) create mode 100644 apps/sd-comfyui/logo.png delete mode 100644 apps/sd-webui-comfy/data.yml delete mode 100644 apps/sd-webui-comfy/logo.png delete mode 100644 apps/sd-webui-comfy/sd-webui-comfy/data.yml delete mode 100644 apps/sd-webui-comfy/sd-webui-comfy/docker-compose.yml diff --git a/apps/sd-webui-comfy/README.md b/apps/sd-comfyui/README.md similarity index 100% rename from apps/sd-webui-comfy/README.md rename to apps/sd-comfyui/README.md diff --git a/apps/sd-comfyui/data.yml b/apps/sd-comfyui/data.yml new file mode 100644 index 00000000..dceb81ce --- /dev/null +++ b/apps/sd-comfyui/data.yml @@ -0,0 +1,20 @@ +name: Stable Diffusion ComfyUI +tags: + - 工具 +title: 最强大、模块化的 stable diffusion GUI,具有图形/节点界面 +type: 工具 +description: 最强大、模块化的 stable diffusion GUI,具有图形/节点界面 +additionalProperties: + key: sd-comfyui + name: Stable Diffusion ComfyUI + tags: + - Tool + shortDescZh: 最强大、模块化的 stable diffusion GUI,具有图形/节点界面 + shortDescEn: The most powerful and modular stable diffusion GUI with a graph/nodes interface + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://github.com/thirdscam/SD-WebUI-Docker + github: https://github.com/thirdscam/SD-WebUI-Docker + document: https://github.com/thirdscam/SD-WebUI-Docker diff --git a/apps/sd-webui-comfy/sd-webui-comfy/comfy/Dockerfile b/apps/sd-comfyui/latest/comfy/Dockerfile similarity index 100% rename from apps/sd-webui-comfy/sd-webui-comfy/comfy/Dockerfile rename to apps/sd-comfyui/latest/comfy/Dockerfile diff --git a/apps/sd-webui-comfy/sd-webui-comfy/comfy/entrypoint.sh b/apps/sd-comfyui/latest/comfy/entrypoint.sh similarity index 100% rename from apps/sd-webui-comfy/sd-webui-comfy/comfy/entrypoint.sh rename to apps/sd-comfyui/latest/comfy/entrypoint.sh diff --git a/apps/sd-comfyui/latest/data.yml b/apps/sd-comfyui/latest/data.yml new file mode 100644 index 00000000..e9ee33af --- /dev/null +++ b/apps/sd-comfyui/latest/data.yml @@ -0,0 +1,52 @@ +additionalProperties: + formFields: + - default: 40187 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + - default: '--listen 0.0.0.0 --port 8188' + edit: true + envKey: SD_CONSOLE_CLI_COMFY + labelEn: CLI ARGS for ComfyUI + labelZh: ComfyUI 的 CLI_ARGS 参数 + required: true + type: text + - default: "" + edit: true + envKey: SD_CONSOLE_APT_COMFY + labelEn: Install some package if you want (equivalent to apt-get install -y) + labelZh: 想安装的软件包 (等同 apt-get install -y) + required: false + type: text + - default: "" + edit: true + envKey: SD_CONSOLE_PIP_COMFY + labelEn: Install pip package if you want (equivalent to pip install) + labelZh: 想安装的 pip 包 (等同 pip install) + required: false + type: text + #- default: 0 + # edit: true + # envKey: SD_CONSOLE_DEVICE_IDS + # labelEn: GPU ID + # labelZh: SD 运行指定的 GPU 设备 ID + # required: true + # type: number + - default: ./data/data + edit: true + envKey: DATA_PATH + labelEn: Data storage folder + labelZh: 数据存放文件夹 + required: true + type: text + - default: ./data/output + edit: true + envKey: OUTPUT_PATH + labelEn: Picture output folder + labelZh: 图片输出文件夹 + required: true + type: text diff --git a/apps/sd-comfyui/latest/docker-compose.yml b/apps/sd-comfyui/latest/docker-compose.yml new file mode 100644 index 00000000..e9eeadb6 --- /dev/null +++ b/apps/sd-comfyui/latest/docker-compose.yml @@ -0,0 +1,34 @@ +version: '3' +services: + sd-comfyui: + build: ./comfy + image: sd-comfyui:latest + container_name: ${CONTAINER_NAME} + restart: always + runtime: nvidia + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:8188" + volumes: + - ${DATA_PATH}:/data + - ${OUTPUT_PATH}:/output + environment: + - CLI_ARGS=${SD_CONSOLE_CLI_COMFY} + - APT_ARGS=${SD_CONSOLE_APT_COMFY} + - PIP_ARGS=${SD_CONSOLE_PIP_COMFY} + - NVIDIA_DRIVER_CAPABILITIES=compute,utility + - NVIDIA_VISIBLE_DEVICES=all + # 1Panel会覆盖此设置 + #deploy: + # resources: + # reservations: + # devices: + # - driver: nvidia + # device_ids: ['${SD_CONSOLE_DEVICE_IDS}'] + # capabilities: [gpu,compute,utility] + labels: + createdBy: Apps +networks: + 1panel-network: + external: true diff --git a/apps/sd-comfyui/latest/env.sample b/apps/sd-comfyui/latest/env.sample new file mode 100644 index 00000000..3e9125da --- /dev/null +++ b/apps/sd-comfyui/latest/env.sample @@ -0,0 +1,8 @@ +CONTAINER_NAME="sd-comfyui" +PANEL_APP_PORT_HTTP="40187" +DATA_PATH="./data/data" +OUTPUT_PATH="./data/output" +SD_CONSOLE_CLI_COMFY="--listen 0.0.0.0 --port 8188" +SD_CONSOLE_APT_COMFY="" +SD_CONSOLE_PIP_COMFY="" +SD_CONSOLE_DEVICE_IDS="0" diff --git a/apps/sd-webui-comfy/sd-webui-comfy/scripts/init.sh b/apps/sd-comfyui/latest/scripts/init.sh similarity index 100% rename from apps/sd-webui-comfy/sd-webui-comfy/scripts/init.sh rename to apps/sd-comfyui/latest/scripts/init.sh diff --git a/apps/sd-webui-comfy/sd-webui-comfy/scripts/update.sh b/apps/sd-comfyui/latest/scripts/update.sh similarity index 100% rename from apps/sd-webui-comfy/sd-webui-comfy/scripts/update.sh rename to apps/sd-comfyui/latest/scripts/update.sh diff --git a/apps/sd-comfyui/logo.png b/apps/sd-comfyui/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9cec3e62d1817bf3fe702d0d21ccdd15beb049a2 GIT binary patch literal 4768 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

!}0k@$uIak@e=yjlY=N3BnWaKW~gk*dW)%cD3KH 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 SrZces0000