diff --git a/.gitignore b/.gitignore index 726e000..e63cd45 100644 --- a/.gitignore +++ b/.gitignore @@ -130,3 +130,5 @@ dmypy.json # ignore settings.py file so that user can change it settings.py +model.ckpt +v1-inference.yaml diff --git a/bin/client.sh b/bin/client.sh index e126413..bc80ba6 100755 --- a/bin/client.sh +++ b/bin/client.sh @@ -1 +1 @@ -/home/$USER/miniconda3/envs/ldm/bin/python $SDPATH/src/send.py "$@" +/home/$USER/miniconda3/envs/kritastablediffusion/bin/python ~/Projects/ai/krita-stable-diffusion/krita_stable_diffusion/stablediffusiond/src/send.py "$@" diff --git a/etc/env_vars.sh b/etc/env_vars.sh new file mode 100644 index 0000000..7caa7a1 --- /dev/null +++ b/etc/env_vars.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +export SDPATH="${HOME}/Projects/ai/stablediffusion" +export SDDPATH="${HOME}/Projects/ai/stablediffusion/stablediffusiond" diff --git a/install.sh b/install.sh index 997e0d9..cebcd3c 100755 --- a/install.sh +++ b/install.sh @@ -184,7 +184,7 @@ then sudo sed -i "s/\[USER_HERE\]/$(whoami)/g" /etc/systemd/system/stablediffusiond.service # change PATH_TO_STABLEDIFFUSIOND to current path - sudo sed -i "s|PATH_TO_STABLEDIFFUSIOND|$PWD|g" /etc/systemd/system/stablediffusiond.service + sudo sed -i "s|\[PATH_TO_STABLEDIFFUSIOND\]|$PWD|g" /etc/systemd/system/stablediffusiond.service # enable stablediffusiond.service sudo systemctl enable stablediffusiond.service @@ -214,7 +214,7 @@ then sudo sed -i "s/\[USER_HERE\]/$(whoami)/g" /etc/systemd/system/stablediffusion_responsed.service # change PATH_TO_STABLEDIFFUSIOND to current path - sudo sed -i "s|PATH_TO_STABLEDIFFUSIOND|$PWD|g" /etc/systemd/system/stablediffusiond.service + sudo sed -i "s|\[PATH_TO_STABLEDIFFUSIOND\]|$PWD|g" /etc/systemd/system/stablediffusion_responsed.service # enable stablediffusion_responsed.service sudo systemctl enable stablediffusion_responsed.service diff --git a/settings.default.py b/settings.default.py index ace64e9..744479b 100644 --- a/settings.default.py +++ b/settings.default.py @@ -6,6 +6,9 @@ """ import random +SDPATH = os.environ.get('SDPATH') +HOME = os.environ.get('HOME') + SERVER = { "request_queue": { "name": "RabbitMQ", @@ -27,7 +30,7 @@ SCRIPTS = { 'txt2img': [ ('prompt', ''), - ('outdir', '~/.stablediffusion/txt2img'), + ('outdir', f'{HOME}/.stablediffusion/txt2img'), ('skip_grid', ''), # ('skip_save', ''), ('ddim_steps', 50), @@ -44,8 +47,8 @@ ('n_rows', 0), ('scale', 7.5), # ('from-file', ''), - ('config', 'configs/stable-diffusion/v1-inference.yaml'), - ('ckpt', 'models/ldm/stable-diffusion-v1/model.ckpt'), + ('config', os.path.join(SDPATH, 'configs/stable-diffusion/v1-inference.yaml')), + ('ckpt', os.path.join(SDPATH, 'models/ldm/stable-diffusion-v1/model.ckpt')), ('seed', 42), ('precision', 'autocast'), ], @@ -67,14 +70,14 @@ ('scale', 5.0), ('strength', 0.75), ('from-file', ''), - ('config', 'configs/stable-diffusion/v1-inference.yaml'), - ('ckpt', 'models/ldm/stable-diffusion-v1/model.ckpt'), + ('config', os.path.join(SDPATH, 'configs/stable-diffusion/v1-inference.yaml')), + ('ckpt', os.path.join(SDPATH, 'models/ldm/stable-diffusion-v1/model.ckpt')), ('seed', random.randint(0, 100000)), ('precision', 'autocast'), ], 'inpaint': [ - ('indir', '~/.stablediffusion/inpaint/input'), - ('outdir', '~/.stablediffusion/inpaint'), + ('indir', f'{HOME}/.stablediffusion/inpaint/input'), + ('outdir', f'{HOME}/.stablediffusion/inpaint'), ('steps', 50), ], 'knn2img': [ @@ -92,16 +95,16 @@ ('n_rows', 0), ('scale', 5.0), ('from-file', ''), - ('config', 'configs/retrieval-augmented-diffusion/768x768.yaml'), - ('ckpt', 'models/rdm/rdm768x768/model.ckpt'), + ('config', 'stablediffusion/configs/retrieval-augmented-diffusion/768x768.yaml'), + ('ckpt', '../models/rdm/rdm768x768/model.ckpt'), ('clip_type', 'ViT-L/14'), ('database', 'artbench-surrealism'), ('use_neighbors', False), ('knn', 10), ], 'train_searcher': [ - ('d', 'data/rdm/retrieval_database/openimages'), - ('target_path', 'data/rdm/searchers/openimages'), + ('d', 'stablediffusion/data/rdm/retrieval_database/openimages'), + ('target_path', 'stablediffusion/data/rdm/searchers/openimages'), ('knn', 20), ], } diff --git a/src/response_handler.py b/src/client.py similarity index 97% rename from src/response_handler.py rename to src/client.py index fd61658..2ee9c10 100755 --- a/src/response_handler.py +++ b/src/client.py @@ -55,11 +55,11 @@ def open_socket(self): log.info(f"Connecting stablediffusiond to host {self.host} on port {self.port}") self.soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: + self.soc.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.soc.bind((self.host, self.port)) except socket.error as err: log.error(f"Failed to open a socket at {self.host}:{self.port}") log.error(str(err)) - return log.info(f"Socket opened {self.soc}") def listen_for_connections(self): diff --git a/src/connect.py b/src/connect.py index 2805641..e172035 100644 --- a/src/connect.py +++ b/src/connect.py @@ -2,16 +2,8 @@ Collection of functions to connect to the queue and publish messages. """ -try: - import pika -except ImportError: - print("Unable to import pika. Please install requirements.") - pika = None -try: - from stablediffusiond.settings import SERVER -except ImportError: - print("Unable to import settings file. Please create a settings.py file.") - SERVER = {} +import pika +from settings import SERVER from logger import info, error @@ -21,13 +13,10 @@ def params(queue_system): :param queue_system: :return: queue, host, queue_system: the queue, host and queue system name from the settings file """ - try: - queue_settings = SERVER[queue_system] - host = queue_settings["host"] - queue = queue_settings["queue_name"] - except KeyError: - error(f"Unable to find settings for {queue_system} in settings file") - return None, None, None + print(SERVER) + queue_settings = SERVER[queue_system] + host = queue_settings["host"] + queue = queue_settings["queue_name"] return queue, host, queue_settings["name"] diff --git a/src/logger.py b/src/logger.py index 9cabf48..0e8eca3 100644 --- a/src/logger.py +++ b/src/logger.py @@ -1,6 +1,7 @@ """ Wrapper functions for logging """ +import os import logging as log from datetime import datetime @@ -13,6 +14,11 @@ def logging(): """ obj = log.getLogger() log.basicConfig(level=log.INFO) + path = os.path.dirname(os.path.realpath(__file__)) + log_file = log.FileHandler(f"{path}/../log/stablediffusiond.log") + log_file.setLevel(log.INFO) + log_file.setFormatter(log.Formatter("%(asctime)s %(levelname)s %(message)s")) + obj.addHandler(log_file) return obj diff --git a/src/send.py b/src/send.py index 8a48e0d..334bf48 100755 --- a/src/send.py +++ b/src/send.py @@ -12,6 +12,8 @@ def send(message): :param data: a dictionary with the data to send :return: None """ + print("SEND") + print(message) connection, channel = connect_queue("request_queue") publish_queue(channel, message, "request_queue") disconnect_queue(connection, "request_queue") diff --git a/src/receive.py b/src/server.py similarity index 91% rename from src/receive.py rename to src/server.py index d7baf2f..6602431 100755 --- a/src/receive.py +++ b/src/server.py @@ -6,19 +6,14 @@ import sys import os import json -try: - from classes.txt2img import Txt2Img - from classes.img2img import Img2Img -except ImportError: - print("Unable to import classes. Please install requirements.") - Txt2Img = None - Img2Img = None - -try: - from stablediffusiond.settings import SCRIPTS -except ImportError: - print("Unable to import settings file. Please create a settings.py file.") - SCRIPTS = {} + +from settings import SCRIPTS +# add to python include paths +sys.path.append(os.environ['SDPATH']) +sys.path.append(os.path.join(os.environ['SDPATH'], "src", "taming-transformers")) +from classes.txt2img import Txt2Img +from classes.img2img import Img2Img + from connect import connect_queue, start_consumer, publish_queue, disconnect_queue import logger as log