Skip to content

Commit

Permalink
Merge pull request #28 from paipe-labs/client-node_cog-comfyui
Browse files Browse the repository at this point in the history
client-node_cog-comfyui
  • Loading branch information
vvauijij authored Apr 17, 2024
2 parents 6ab00cf + f218732 commit 61622bf
Show file tree
Hide file tree
Showing 12 changed files with 298 additions and 74 deletions.
54 changes: 0 additions & 54 deletions .github/workflows/clear-cache.yml

This file was deleted.

74 changes: 69 additions & 5 deletions .github/workflows/publish-images.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Publish client-node Docker Images to ghcr.io
name: Publish Images

on:
push:
Expand All @@ -8,8 +8,66 @@ env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}

AIDOCK_COMFYUI_DOCKERFILE: build/aidock-comfyui/client-node.dockerfile
AIDOCK_TAG: -aidock-comfyui
AIDOCK_COMFYUI_IMAGE: ghcr.io/ai-dock/comfyui
AIDOCK_COMFYUI_TAG: latest

COG_COMFYUI_DOCKERFILE: build/cog-comfyui/client-node.dockerfile
COG_TAG: -cog-comfyui
COG_COMFYUI_IMAGE: ghcr.io/paipe-labs/cog-comfyui
COG_COMFYUI_TAG: latest

jobs:
client-node-comfyui:
client-node-aidock-comfyui:
runs-on: ubuntu-latest

# `GITHUB_TOKEN` permissions for the actions in this job
permissions:
contents: read
packages: write

steps:
- name: Free Space
run: |
df -h
sudo rm -rf /usr/share/dotnet
sudo rm -rf /opt/ghc
sudo rm -rf /usr/local/.ghcup
sudo rm -rf /usr/local/share/boost
sudo rm -rf /usr/local/lib/android
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
df -h
- name: Checkout Repository
uses: actions/checkout@v4

- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract Metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}${{ env.AIDOCK_TAG }}

- name: Build and Push Docker Image
uses: docker/build-push-action@v5
with:
context: .
file: ${{ env.AIDOCK_COMFYUI_DOCKERFILE }}
build-args: |
AIDOCK_COMFYUI_IMAGE=${{ env.AIDOCK_COMFYUI_IMAGE }}
AIDOCK_COMFYUI_TAG=${{ env.AIDOCK_COMFYUI_TAG }}
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

client-node-cog-comfyui:
runs-on: ubuntu-latest

# `GITHUB_TOKEN` permissions for the actions in this job
Expand All @@ -28,24 +86,30 @@ jobs:
sudo rm -rf /usr/local/lib/android
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
df -h
- name: Checkout
- name: Checkout Repository
uses: actions/checkout@v4

- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract Metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}${{ env.COG_TAG }}

- name: Build and Push Docker Image
uses: docker/build-push-action@v5
with:
context: .
file: client-node-comfyui.dockerfile
file: ${{ env.COG_COMFYUI_DOCKERFILE }}
build-args: |
COG_COMFYUI_IMAGE=${{ env.COG_COMFYUI_IMAGE }}
COG_COMFYUI_TAG=${{ env.COG_COMFYUI_TAG }}
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
45 changes: 45 additions & 0 deletions build/aidock-comfyui/client-node.dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
ARG AIDOCK_COMFYUI_IMAGE
ARG AIDOCK_COMFYUI_TAG

FROM ${AIDOCK_COMFYUI_IMAGE}:${AIDOCK_COMFYUI_TAG}


################################## install curl & jq ####################################
RUN apt-get update \
&& apt install -y curl \
&& apt install -y jq


############################### install node & npm & yarn ###############################
ENV NODE_VERSION=20.9.0
ENV NVM_DIR=/root/.nvm
ENV PATH="/root/.nvm/versions/node/v${NODE_VERSION}/bin/:${PATH}"

RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
RUN . "$NVM_DIR/nvm.sh" && nvm install ${NODE_VERSION}
RUN . "$NVM_DIR/nvm.sh" && nvm use v${NODE_VERSION}
RUN . "$NVM_DIR/nvm.sh" && nvm alias default v${NODE_VERSION}
RUN npm install -g yarn


###################################### build node #######################################
WORKDIR /genai-node

COPY client-package/package.json .
COPY client-package/yarn.lock .
RUN yarn install

# dirty hack to make node-sd-webui work with our imports,
# remove when we replace library node-sd-webui
RUN jq '. + { "type": "module" }' node_modules/node-sd-webui/package.json > temp.json \
&& mv temp.json node_modules/node-sd-webui/package.json

COPY client-package .
RUN yarn build


################################## run comfyUI & node ###################################
COPY build/aidock-comfyui /aidock-comfyui

ENTRYPOINT /aidock-comfyui/run_comfyui.sh & node public/run.js
CMD -b 'wss://apiv2.paipe.io/' -i 'localhost:8188' -t 'comfyUI'
145 changes: 145 additions & 0 deletions build/aidock-comfyui/default.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
#!/bin/bash

PYTHON_PACKAGES=(
#"opencv-python==4.7.0.72"
)

NODES=(
"https://github.com/ltdrdata/ComfyUI-Manager"
)

CHECKPOINT_MODELS=(
"https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.ckpt"
#"https://huggingface.co/stabilityai/stable-diffusion-2-1/resolve/main/v2-1_768-ema-pruned.ckpt"
#"https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors"
#"https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/resolve/main/sd_xl_refiner_1.0.safetensors"
)

LORA_MODELS=(
#"https://civitai.com/api/download/models/16576"
)

VAE_MODELS=(
"https://huggingface.co/stabilityai/sd-vae-ft-ema-original/resolve/main/vae-ft-ema-560000-ema-pruned.safetensors"
"https://huggingface.co/stabilityai/sd-vae-ft-mse-original/resolve/main/vae-ft-mse-840000-ema-pruned.safetensors"
"https://huggingface.co/stabilityai/sdxl-vae/resolve/main/sdxl_vae.safetensors"
)

ESRGAN_MODELS=(
"https://huggingface.co/ai-forever/Real-ESRGAN/resolve/main/RealESRGAN_x4.pth"
"https://huggingface.co/FacehugmanIII/4x_foolhardy_Remacri/resolve/main/4x_foolhardy_Remacri.pth"
"https://huggingface.co/Akumetsu971/SD_Anime_Futuristic_Armor/resolve/main/4x_NMKD-Siax_200k.pth"
)

CONTROLNET_MODELS=(
"https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/control_canny-fp16.safetensors"
#"https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/control_depth-fp16.safetensors"
"https://huggingface.co/kohya-ss/ControlNet-diff-modules/resolve/main/diff_control_sd15_depth_fp16.safetensors"
#"https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/control_hed-fp16.safetensors"
#"https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/control_mlsd-fp16.safetensors"
#"https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/control_normal-fp16.safetensors"
"https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/control_openpose-fp16.safetensors"
#"https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/control_scribble-fp16.safetensors"
#"https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/control_seg-fp16.safetensors"
"https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/t2iadapter_canny-fp16.safetensors"
#"https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/t2iadapter_color-fp16.safetensors"
#"https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/t2iadapter_depth-fp16.safetensors"
#"https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/t2iadapter_keypose-fp16.safetensors"
"https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/t2iadapter_openpose-fp16.safetensors"
#"https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/t2iadapter_seg-fp16.safetensors"
#"https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/t2iadapter_sketch-fp16.safetensors"
#"https://huggingface.co/webui/ControlNet-modules-safetensors/resolve/main/t2iadapter_style-fp16.safetensors"
)

### DO NOT EDIT BELOW HERE UNLESS YOU KNOW WHAT YOU ARE DOING ###

function provisioning_start() {
DISK_GB_AVAILABLE=$(($(df --output=avail -m "${WORKSPACE}" | tail -n1) / 1000))
DISK_GB_USED=$(($(df --output=used -m "${WORKSPACE}" | tail -n1) / 1000))
DISK_GB_ALLOCATED=$(($DISK_GB_AVAILABLE + $DISK_GB_USED))
provisioning_print_header
provisioning_get_nodes
provisioning_install_python_packages
provisioning_get_models \
"${WORKSPACE}/storage/stable_diffusion/models/ckpt" \
"${CHECKPOINT_MODELS[@]}"
provisioning_get_models \
"${WORKSPACE}/storage/stable_diffusion/models/lora" \
"${LORA_MODELS[@]}"
provisioning_get_models \
"${WORKSPACE}/storage/stable_diffusion/models/controlnet" \
"${CONTROLNET_MODELS[@]}"
provisioning_get_models \
"${WORKSPACE}/storage/stable_diffusion/models/vae" \
"${VAE_MODELS[@]}"
provisioning_get_models \
"${WORKSPACE}/storage/stable_diffusion/models/esrgan" \
"${ESRGAN_MODELS[@]}"
provisioning_print_end
}

function provisioning_get_nodes() {
for repo in "${NODES[@]}"; do
dir="${repo##*/}"
path="/opt/ComfyUI/custom_nodes/${dir}"
requirements="${path}/requirements.txt"
if [[ -d $path ]]; then
if [[ ${AUTO_UPDATE,,} != "false" ]]; then
printf "Updating node: %s...\n" "${repo}"
( cd "$path" && git pull )
if [[ -e $requirements ]]; then
micromamba -n comfyui run ${PIP_INSTALL} -r "$requirements"
fi
fi
else
printf "Downloading node: %s...\n" "${repo}"
git clone "${repo}" "${path}" --recursive
if [[ -e $requirements ]]; then
micromamba -n comfyui run ${PIP_INSTALL} -r "${requirements}"
fi
fi
done
}

function provisioning_install_python_packages() {
if [ ${#PYTHON_PACKAGES[@]} -gt 0 ]; then
micromamba -n comfyui run ${PIP_INSTALL} ${PYTHON_PACKAGES[*]}
fi
}

function provisioning_get_models() {
if [[ -z $2 ]]; then return 1; fi
dir="$1"
mkdir -p "$dir"
shift
if [[ $DISK_GB_ALLOCATED -ge $DISK_GB_REQUIRED ]]; then
arr=("$@")
else
printf "WARNING: Low disk space allocation - Only the first model will be downloaded!\n"
arr=("$1")
fi

printf "Downloading %s model(s) to %s...\n" "${#arr[@]}" "$dir"
for url in "${arr[@]}"; do
printf "Downloading: %s\n" "${url}"
provisioning_download "${url}" "${dir}"
printf "\n"
done
}

function provisioning_print_header() {
if [[ $DISK_GB_ALLOCATED -lt $DISK_GB_REQUIRED ]]; then
printf "WARNING: Your allocated disk size (%sGB) is below the recommended %sGB - Some models will not be downloaded\n" "$DISK_GB_ALLOCATED" "$DISK_GB_REQUIRED"
fi
}

function provisioning_print_end() {
printf "\nProvisioning complete: Web UI will start now\n\n"
}

# Download from $1 URL to $2 file path
function provisioning_download() {
wget -qnc --content-disposition --show-progress -e dotbytes="${3:-4M}" -P "$2" "$1"
}

provisioning_start
12 changes: 12 additions & 0 deletions build/aidock-comfyui/run_comfyui.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/bin/bash

export WEB_ENABLE_AUTH=false

script="/opt/ai-dock/bin/provisioning.sh"
default_script="/genai-node/aidock-comfyui/default.sh"
if [[ -n $PROVISIONING_SCRIPT ]]; then
curl -L -o ${file} ${PROVISIONING_SCRIPT}
else
cp ${default_script} ${file}

init.sh
5 changes: 5 additions & 0 deletions build/aidock-comfyui/test_run_comfyui.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash

export WEB_ENABLE_AUTH=false

init.sh
8 changes: 3 additions & 5 deletions client-node.dockerfile → build/client-node.dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
FROM node:20-alpine3.18


###################################### install jq ######################################
###################################### install jq #######################################
RUN apk update && apk add jq


Expand All @@ -21,7 +21,5 @@ COPY client-package .
RUN yarn build


################################## run comfyUI & node ###################################
ENV WEB_ENABLE_AUTH=false

ENTRYPOINT ["node", "public/run.js"]
####################################### run node ########################################
ENTRYPOINT node public/run.js
Loading

0 comments on commit 61622bf

Please sign in to comment.