Hendrik Langer
2 years ago
3 changed files with 93 additions and 0 deletions
@ -0,0 +1,37 @@ |
|||||
|
# https://blog.runpod.io/custom-models-with-serverless-and-automatic-stable-diffusion/ |
||||
|
FROM runpod/stable-diffusion:web-automatic-base-4.0.0 |
||||
|
|
||||
|
SHELL ["/bin/bash", "-c"] |
||||
|
|
||||
|
ENV PATH="${PATH}:/workspace/stable-diffusion-webui/venv/bin" |
||||
|
|
||||
|
WORKDIR /workspace |
||||
|
|
||||
|
# PFG: https://civitai.com/api/download/models/1316 |
||||
|
# Hassanblend: https://civitai.com/api/download/models/4635 |
||||
|
# Deliberate v2: https://civitai.com/api/download/models/15236 |
||||
|
|
||||
|
RUN wget -O /workspace/stable-diffusion-webui/models/Stable-diffusion/model.safetensors https://civitai.com/api/download/models/4635 |
||||
|
## Extra downloads (for Hassanblend) |
||||
|
RUN wget -O /workspace/stable-diffusion-webui/models/VAE/vae-ft-mse-840000-ema-pruned.safetensors https://huggingface.co/stabilityai/sd-vae-ft-mse-original/resolve/main/vae-ft-mse-840000-ema-pruned.safetensors |
||||
|
|
||||
|
RUN mkdir /workspace/stable-diffusion-webui/models/Codeformer/ && \ |
||||
|
wget -O /workspace/stable-diffusion-webui/models/Codeformer/codeformer-v0.1.0.pth https://github.com/sczhou/CodeFormer/releases/download/v0.1.0/codeformer.pth && \ |
||||
|
wget -O /workspace/stable-diffusion-webui/repositories/CodeFormer/weights/facelib/detection_Resnet50_Final.pth https://github.com/xinntao/facexlib/releases/download/v0.1.0/detection_Resnet50_Final.pth && \ |
||||
|
wget -O /workspace/stable-diffusion-webui/repositories/CodeFormer/weights/facelib/parsing_parsenet.pth https://github.com/sczhou/CodeFormer/releases/download/v0.1.0/parsing_parsenet.pth && \ |
||||
|
mkdir /workspace/stable-diffusion-webui/models/GFPGAN/ && \ |
||||
|
wget -O /workspace/stable-diffusion-webui/models/GFPGAN/GFPGANv1.4.pth https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.4.pth && \ |
||||
|
mkdir /workspace/stable-diffusion-webui/models/RealESRGAN/ && \ |
||||
|
wget -O /workspace/stable-diffusion-webui/models/RealESRGAN/RealESRGAN_x4plus.pth https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth && \ |
||||
|
mkdir /workspace/stable-diffusion-webui/models/ESRGAN/ && \ |
||||
|
wget -O /workspace/stable-diffusion-webui/models/ESRGAN/ESRGAN.pth https://github.com/cszn/KAIR/releases/download/v1.0/ESRGAN.pth && \ |
||||
|
# mkdir /workspace/stable-diffusion-webui/models/Stable-diffusion/tokenizer/ && \ |
||||
|
# wget -O /workspace/stable-diffusion-webui/models/Stable-diffusion/tokenizer/vocab.json https://huggingface.co/runwayml/stable-diffusion-v1-5/raw/main/tokenizer/vocab.json && \ |
||||
|
git clone --depth 1 https://github.com/Coyote-A/ultimate-upscale-for-automatic1111 /workspace/stable-diffusion-webui/extensions/ultimate-upscale-for-automatic1111 |
||||
|
RUN pip install runpod |
||||
|
|
||||
|
ADD handler.py /workspace/ |
||||
|
ADD start.sh /workspace/ |
||||
|
RUN chmod +x /workspace/start.sh |
||||
|
|
||||
|
CMD [ "/workspace/start.sh" ] |
@ -0,0 +1,45 @@ |
|||||
|
import runpod |
||||
|
import subprocess |
||||
|
import requests |
||||
|
import time |
||||
|
|
||||
|
def check_api_availability(host): |
||||
|
while True: |
||||
|
try: |
||||
|
response = requests.get(host) |
||||
|
return |
||||
|
except requests.exceptions.RequestException as e: |
||||
|
print(f"API is not available, retrying in 200ms... ({e})") |
||||
|
except Exception as e: |
||||
|
print('something went wrong') |
||||
|
time.sleep(200/1000) |
||||
|
|
||||
|
check_api_availability("http://127.0.0.1:3000/sdapi/v1/txt2img") |
||||
|
|
||||
|
print('run handler') |
||||
|
|
||||
|
def handler(event): |
||||
|
''' |
||||
|
This is the handler function that will be called by the serverless. |
||||
|
''' |
||||
|
print('got event') |
||||
|
print(event) |
||||
|
|
||||
|
cmd = 'txt2img' |
||||
|
if 'cmd' in event: |
||||
|
cmd = event["cmd"] |
||||
|
if 'api_endpoint' in event["input"]: |
||||
|
cmd = event["input"]["api_endpoint"] |
||||
|
del event["input"]["api_endpoint"] |
||||
|
response = requests.post(url=f'http://127.0.0.1:3000/sdapi/v1/{cmd}', json=event["input"]) |
||||
|
|
||||
|
json = response.json() |
||||
|
# do the things |
||||
|
|
||||
|
print(json) |
||||
|
|
||||
|
# return the output that you want to be returned like pre-signed URLs to output artifacts |
||||
|
return json |
||||
|
|
||||
|
|
||||
|
runpod.serverless.start({"handler": handler}) |
@ -0,0 +1,11 @@ |
|||||
|
#!/bin/bash |
||||
|
echo "Container Started" |
||||
|
export PYTHONUNBUFFERED=1 |
||||
|
source /workspace/stable-diffusion-webui/venv/bin/activate |
||||
|
cd /workspace/stable-diffusion-webui |
||||
|
echo "starting api" |
||||
|
python webui.py --port 3000 --nowebui --api --xformers --ckpt /workspace/stable-diffusion-webui/models/Stable-diffusion/model.safetensors & |
||||
|
|
||||
|
echo "starting worker" |
||||
|
cd /workspace |
||||
|
python -u handler.py |
Loading…
Reference in new issue