From 2b1aaf4ee72961c72ea8265652331cc35985ae5d Mon Sep 17 00:00:00 2001 From: Lincoln Stein Date: Sat, 8 Oct 2022 11:37:23 -0400 Subject: [PATCH] rename all modules from ldm.dream to ldm.invoke - scripts and documentation updated to match - ran preflight checks on both web and CLI and seems to be working --- backend/invoke_ai_web_server.py | 8 ++-- backend/modules/create_cmd_parser.py | 2 +- backend/modules/parameters.py | 2 +- backend/server.py | 12 +++--- ldm/dream/generator/__init__.py | 4 -- ldm/dream/restoration/__init__.py | 4 -- ldm/generate.py | 38 +++++++++---------- ldm/{dream => invoke}/args.py | 6 +-- ldm/{dream => invoke}/conditioning.py | 0 ldm/{dream => invoke}/devices.py | 0 ldm/invoke/generator/__init__.py | 4 ++ ldm/{dream => invoke}/generator/base.py | 4 +- ldm/{dream => invoke}/generator/embiggen.py | 12 +++--- ldm/{dream => invoke}/generator/img2img.py | 6 +-- ldm/{dream => invoke}/generator/inpaint.py | 6 +-- ldm/{dream => invoke}/generator/txt2img.py | 4 +- .../generator/txt2img2img.py | 4 +- ldm/{dream => invoke}/image_util.py | 0 ldm/{dream => invoke}/log.py | 0 ldm/{dream => invoke}/pngwriter.py | 0 ldm/{dream => invoke}/readline.py | 12 +++--- ldm/invoke/restoration/__init__.py | 4 ++ ldm/{dream => invoke}/restoration/base.py | 6 +-- .../restoration/codeformer.py | 6 +-- .../restoration/codeformer/weights/README | 0 .../restoration/codeformer_arch.py | 2 +- ldm/{dream => invoke}/restoration/gfpgan.py | 0 ldm/{dream => invoke}/restoration/outcrop.py | 0 ldm/{dream => invoke}/restoration/outpaint.py | 0 .../restoration/realesrgan.py | 0 .../restoration/vqgan_arch.py | 0 ldm/{dream => invoke}/server.py | 4 +- ldm/models/diffusion/ddim.py | 2 +- ldm/models/diffusion/ksampler.py | 2 +- ldm/models/diffusion/plms.py | 2 +- ldm/models/diffusion/sampler.py | 2 +- ldm/modules/encoders/modules.py | 2 +- notebooks/notebook_helpers.py | 2 +- scripts/images2prompt.py | 4 +- scripts/invoke.py | 27 +++++++------ scripts/orig_scripts/img2img.py | 2 +- scripts/orig_scripts/inpaint.py | 2 +- scripts/orig_scripts/txt2img.py | 2 +- scripts/preload_models.py | 2 +- scripts/sd-metadata.py | 4 +- server/application.py | 2 +- server/services.py | 8 ++-- 47 files changed, 108 insertions(+), 107 deletions(-) delete mode 100644 ldm/dream/generator/__init__.py delete mode 100644 ldm/dream/restoration/__init__.py rename ldm/{dream => invoke}/args.py (99%) rename ldm/{dream => invoke}/conditioning.py (100%) rename ldm/{dream => invoke}/devices.py (100%) create mode 100644 ldm/invoke/generator/__init__.py rename ldm/{dream => invoke}/generator/base.py (98%) rename ldm/{dream => invoke}/generator/embiggen.py (98%) rename ldm/{dream => invoke}/generator/img2img.py (93%) rename ldm/{dream => invoke}/generator/inpaint.py (93%) rename ldm/{dream => invoke}/generator/txt2img.py (96%) rename ldm/{dream => invoke}/generator/txt2img2img.py (97%) rename ldm/{dream => invoke}/image_util.py (100%) rename ldm/{dream => invoke}/log.py (100%) rename ldm/{dream => invoke}/pngwriter.py (100%) rename ldm/{dream => invoke}/readline.py (97%) create mode 100644 ldm/invoke/restoration/__init__.py rename ldm/{dream => invoke}/restoration/base.py (85%) rename ldm/{dream => invoke}/restoration/codeformer.py (93%) rename ldm/{dream => invoke}/restoration/codeformer/weights/README (100%) rename ldm/{dream => invoke}/restoration/codeformer_arch.py (99%) rename ldm/{dream => invoke}/restoration/gfpgan.py (100%) rename ldm/{dream => invoke}/restoration/outcrop.py (100%) rename ldm/{dream => invoke}/restoration/outpaint.py (100%) rename ldm/{dream => invoke}/restoration/realesrgan.py (100%) rename ldm/{dream => invoke}/restoration/vqgan_arch.py (100%) rename ldm/{dream => invoke}/server.py (99%) diff --git a/backend/invoke_ai_web_server.py b/backend/invoke_ai_web_server.py index dced69f72f..fb1741e6c9 100644 --- a/backend/invoke_ai_web_server.py +++ b/backend/invoke_ai_web_server.py @@ -12,9 +12,9 @@ from PIL import Image from uuid import uuid4 from threading import Event -from ldm.dream.args import Args, APP_ID, APP_VERSION, calculate_init_img_hash -from ldm.dream.pngwriter import PngWriter, retrieve_metadata -from ldm.dream.conditioning import split_weighted_subprompts +from ldm.invoke.args import Args, APP_ID, APP_VERSION, calculate_init_img_hash +from ldm.invoke.pngwriter import PngWriter, retrieve_metadata +from ldm.invoke.conditioning import split_weighted_subprompts from backend.modules.parameters import parameters_to_command @@ -157,7 +157,7 @@ class InvokeAIWebServer: self.init_image_path = os.path.join(self.result_path, 'init-images/') self.mask_image_path = os.path.join(self.result_path, 'mask-images/') # txt log - self.log_path = os.path.join(self.result_path, 'dream_log.txt') + self.log_path = os.path.join(self.result_path, 'invoke_log.txt') # make all output paths [ os.makedirs(path, exist_ok=True) diff --git a/backend/modules/create_cmd_parser.py b/backend/modules/create_cmd_parser.py index a82f2a80f5..919caeda91 100644 --- a/backend/modules/create_cmd_parser.py +++ b/backend/modules/create_cmd_parser.py @@ -1,6 +1,6 @@ import argparse import os -from ldm.dream.args import PRECISION_CHOICES +from ldm.invoke.args import PRECISION_CHOICES def create_cmd_parser(): diff --git a/backend/modules/parameters.py b/backend/modules/parameters.py index d15167e792..0fae7ef729 100644 --- a/backend/modules/parameters.py +++ b/backend/modules/parameters.py @@ -15,7 +15,7 @@ SAMPLER_CHOICES = [ def parameters_to_command(params): """ - Converts dict of parameters into a `dream.py` REPL command. + Converts dict of parameters into a `invoke.py` REPL command. """ switches = list() diff --git a/backend/server.py b/backend/server.py index d0977b9dc3..cc0996dc66 100644 --- a/backend/server.py +++ b/backend/server.py @@ -30,10 +30,10 @@ from send2trash import send2trash from ldm.generate import Generate -from ldm.dream.restoration import Restoration -from ldm.dream.pngwriter import PngWriter, retrieve_metadata -from ldm.dream.args import APP_ID, APP_VERSION, calculate_init_img_hash -from ldm.dream.conditioning import split_weighted_subprompts +from ldm.invoke.restoration import Restoration +from ldm.invoke.pngwriter import PngWriter, retrieve_metadata +from ldm.invoke.args import APP_ID, APP_VERSION, calculate_init_img_hash +from ldm.invoke.conditioning import split_weighted_subprompts from modules.parameters import parameters_to_command @@ -125,7 +125,7 @@ class CanceledException(Exception): try: gfpgan, codeformer, esrgan = None, None, None - from ldm.dream.restoration.base import Restoration + from ldm.invoke.restoration.base import Restoration restoration = Restoration() gfpgan, codeformer = restoration.load_face_restore_models() @@ -164,7 +164,7 @@ init_image_path = os.path.join(result_path, "init-images/") mask_image_path = os.path.join(result_path, "mask-images/") # txt log -log_path = os.path.join(result_path, "dream_log.txt") +log_path = os.path.join(result_path, "invoke_log.txt") # make all output paths [ diff --git a/ldm/dream/generator/__init__.py b/ldm/dream/generator/__init__.py deleted file mode 100644 index b48e6e19c8..0000000000 --- a/ldm/dream/generator/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -''' -Initialization file for the ldm.dream.generator package -''' -from .base import Generator diff --git a/ldm/dream/restoration/__init__.py b/ldm/dream/restoration/__init__.py deleted file mode 100644 index 0b8a14bc88..0000000000 --- a/ldm/dream/restoration/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -''' -Initialization file for the ldm.dream.restoration package -''' -from .base import Restoration diff --git a/ldm/generate.py b/ldm/generate.py index 3f7945c3d3..5f3427f38f 100644 --- a/ldm/generate.py +++ b/ldm/generate.py @@ -19,7 +19,7 @@ import cv2 import skimage from omegaconf import OmegaConf -from ldm.dream.generator.base import downsampling +from ldm.invoke.generator.base import downsampling from PIL import Image, ImageOps from torch import nn from pytorch_lightning import seed_everything, logging @@ -28,13 +28,11 @@ from ldm.util import instantiate_from_config from ldm.models.diffusion.ddim import DDIMSampler from ldm.models.diffusion.plms import PLMSSampler from ldm.models.diffusion.ksampler import KSampler -from ldm.dream.pngwriter import PngWriter -from ldm.dream.args import metadata_from_png -from ldm.dream.image_util import InitImageResizer -from ldm.dream.devices import choose_torch_device, choose_precision -from ldm.dream.conditioning import get_uc_and_c - - +from ldm.invoke.pngwriter import PngWriter +from ldm.invoke.args import metadata_from_png +from ldm.invoke.image_util import InitImageResizer +from ldm.invoke.devices import choose_torch_device, choose_precision +from ldm.invoke.conditioning import get_uc_and_c def fix_func(orig): if hasattr(torch.backends, 'mps') and torch.backends.mps.is_available(): @@ -297,9 +295,9 @@ class Generate: def process_image(image,seed): image.save(f{'images/seed.png'}) - The callback used by the prompt2png() can be found in ldm/dream_util.py. It contains code - to create the requested output directory, select a unique informative name for each image, and - write the prompt into the PNG metadata. + The code used to save images to a directory can be found in ldm/invoke/pngwriter.py. + It contains code to create the requested output directory, select a unique informative + name for each image, and write the prompt into the PNG metadata. """ # TODO: convert this into a getattr() loop steps = steps or self.steps @@ -524,7 +522,7 @@ class Generate: ) elif tool == 'outcrop': - from ldm.dream.restoration.outcrop import Outcrop + from ldm.invoke.restoration.outcrop import Outcrop extend_instructions = {} for direction,pixels in _pairwise(opt.outcrop): extend_instructions[direction]=int(pixels) @@ -561,7 +559,7 @@ class Generate: image_callback = callback, ) elif tool == 'outpaint': - from ldm.dream.restoration.outpaint import Outpaint + from ldm.invoke.restoration.outpaint import Outpaint restorer = Outpaint(image,self) return restorer.process( opt, @@ -620,39 +618,39 @@ class Generate: def _make_base(self): if not self.generators.get('base'): - from ldm.dream.generator import Generator + from ldm.invoke.generator import Generator self.generators['base'] = Generator(self.model, self.precision) return self.generators['base'] def _make_img2img(self): if not self.generators.get('img2img'): - from ldm.dream.generator.img2img import Img2Img + from ldm.invoke.generator.img2img import Img2Img self.generators['img2img'] = Img2Img(self.model, self.precision) return self.generators['img2img'] def _make_embiggen(self): if not self.generators.get('embiggen'): - from ldm.dream.generator.embiggen import Embiggen + from ldm.invoke.generator.embiggen import Embiggen self.generators['embiggen'] = Embiggen(self.model, self.precision) return self.generators['embiggen'] def _make_txt2img(self): if not self.generators.get('txt2img'): - from ldm.dream.generator.txt2img import Txt2Img + from ldm.invoke.generator.txt2img import Txt2Img self.generators['txt2img'] = Txt2Img(self.model, self.precision) self.generators['txt2img'].free_gpu_mem = self.free_gpu_mem return self.generators['txt2img'] def _make_txt2img2img(self): if not self.generators.get('txt2img2'): - from ldm.dream.generator.txt2img2img import Txt2Img2Img + from ldm.invoke.generator.txt2img2img import Txt2Img2Img self.generators['txt2img2'] = Txt2Img2Img(self.model, self.precision) self.generators['txt2img2'].free_gpu_mem = self.free_gpu_mem return self.generators['txt2img2'] def _make_inpaint(self): if not self.generators.get('inpaint'): - from ldm.dream.generator.inpaint import Inpaint + from ldm.invoke.generator.inpaint import Inpaint self.generators['inpaint'] = Inpaint(self.model, self.precision) return self.generators['inpaint'] @@ -783,7 +781,7 @@ class Generate: print(msg) - # Be warned: config is the path to the model config file, not the dream conf file! + # Be warned: config is the path to the model config file, not the invoke conf file! # Also note that we can get config and weights from self, so why do we need to # pass them as args? def _load_model_from_config(self, config, weights): diff --git a/ldm/dream/args.py b/ldm/invoke/args.py similarity index 99% rename from ldm/dream/args.py rename to ldm/invoke/args.py index 6121aa6445..83031a833e 100644 --- a/ldm/dream/args.py +++ b/ldm/invoke/args.py @@ -90,8 +90,8 @@ import re import copy import base64 import functools -import ldm.dream.pngwriter -from ldm.dream.conditioning import split_weighted_subprompts +import ldm.invoke.pngwriter +from ldm.invoke.conditioning import split_weighted_subprompts SAMPLER_CHOICES = [ 'ddim', @@ -811,7 +811,7 @@ def metadata_from_png(png_file_path) -> Args: an Args object containing the image metadata. Note that this returns a single Args object, not multiple. ''' - meta = ldm.dream.pngwriter.retrieve_metadata(png_file_path) + meta = ldm.invoke.pngwriter.retrieve_metadata(png_file_path) if 'sd-metadata' in meta and len(meta['sd-metadata'])>0 : return metadata_loads(meta)[0] else: diff --git a/ldm/dream/conditioning.py b/ldm/invoke/conditioning.py similarity index 100% rename from ldm/dream/conditioning.py rename to ldm/invoke/conditioning.py diff --git a/ldm/dream/devices.py b/ldm/invoke/devices.py similarity index 100% rename from ldm/dream/devices.py rename to ldm/invoke/devices.py diff --git a/ldm/invoke/generator/__init__.py b/ldm/invoke/generator/__init__.py new file mode 100644 index 0000000000..2fa5573c84 --- /dev/null +++ b/ldm/invoke/generator/__init__.py @@ -0,0 +1,4 @@ +''' +Initialization file for the ldm.invoke.generator package +''' +from .base import Generator diff --git a/ldm/dream/generator/base.py b/ldm/invoke/generator/base.py similarity index 98% rename from ldm/dream/generator/base.py rename to ldm/invoke/generator/base.py index 5f88c02c4e..2aa0caf5f9 100644 --- a/ldm/dream/generator/base.py +++ b/ldm/invoke/generator/base.py @@ -1,5 +1,5 @@ ''' -Base class for ldm.dream.generator.* +Base class for ldm.invoke.generator.* including img2img, txt2img, and inpaint ''' import torch @@ -9,7 +9,7 @@ from tqdm import tqdm, trange from PIL import Image from einops import rearrange, repeat from pytorch_lightning import seed_everything -from ldm.dream.devices import choose_autocast +from ldm.invoke.devices import choose_autocast from ldm.util import rand_perlin_2d downsampling = 8 diff --git a/ldm/dream/generator/embiggen.py b/ldm/invoke/generator/embiggen.py similarity index 98% rename from ldm/dream/generator/embiggen.py rename to ldm/invoke/generator/embiggen.py index 079b7dd9aa..53fbde68cf 100644 --- a/ldm/dream/generator/embiggen.py +++ b/ldm/invoke/generator/embiggen.py @@ -1,15 +1,15 @@ ''' -ldm.dream.generator.embiggen descends from ldm.dream.generator -and generates with ldm.dream.generator.img2img +ldm.invoke.generator.embiggen descends from ldm.invoke.generator +and generates with ldm.invoke.generator.img2img ''' import torch import numpy as np from tqdm import trange from PIL import Image -from ldm.dream.generator.base import Generator -from ldm.dream.generator.img2img import Img2Img -from ldm.dream.devices import choose_autocast +from ldm.invoke.generator.base import Generator +from ldm.invoke.generator.img2img import Img2Img +from ldm.invoke.devices import choose_autocast from ldm.models.diffusion.ddim import DDIMSampler class Embiggen(Generator): @@ -107,7 +107,7 @@ class Embiggen(Generator): initsuperwidth = round(initsuperwidth*embiggen[0]) initsuperheight = round(initsuperheight*embiggen[0]) if embiggen[1] > 0: # No point in ESRGAN upscaling if strength is set zero - from ldm.dream.restoration.realesrgan import ESRGAN + from ldm.invoke.restoration.realesrgan import ESRGAN esrgan = ESRGAN() print( f'>> ESRGAN upscaling init image prior to cutting with Embiggen with strength {embiggen[1]}') diff --git a/ldm/dream/generator/img2img.py b/ldm/invoke/generator/img2img.py similarity index 93% rename from ldm/dream/generator/img2img.py rename to ldm/invoke/generator/img2img.py index 27425a2b6b..7fde1a94cf 100644 --- a/ldm/dream/generator/img2img.py +++ b/ldm/invoke/generator/img2img.py @@ -1,11 +1,11 @@ ''' -ldm.dream.generator.img2img descends from ldm.dream.generator +ldm.invoke.generator.img2img descends from ldm.invoke.generator ''' import torch import numpy as np -from ldm.dream.devices import choose_autocast -from ldm.dream.generator.base import Generator +from ldm.invoke.devices import choose_autocast +from ldm.invoke.generator.base import Generator from ldm.models.diffusion.ddim import DDIMSampler class Img2Img(Generator): diff --git a/ldm/dream/generator/inpaint.py b/ldm/invoke/generator/inpaint.py similarity index 93% rename from ldm/dream/generator/inpaint.py rename to ldm/invoke/generator/inpaint.py index f5d0b38ba6..3ab1456564 100644 --- a/ldm/dream/generator/inpaint.py +++ b/ldm/invoke/generator/inpaint.py @@ -1,12 +1,12 @@ ''' -ldm.dream.generator.inpaint descends from ldm.dream.generator +ldm.invoke.generator.inpaint descends from ldm.invoke.generator ''' import torch import numpy as np from einops import rearrange, repeat -from ldm.dream.devices import choose_autocast -from ldm.dream.generator.img2img import Img2Img +from ldm.invoke.devices import choose_autocast +from ldm.invoke.generator.img2img import Img2Img from ldm.models.diffusion.ddim import DDIMSampler from ldm.models.diffusion.ksampler import KSampler diff --git a/ldm/dream/generator/txt2img.py b/ldm/invoke/generator/txt2img.py similarity index 96% rename from ldm/dream/generator/txt2img.py rename to ldm/invoke/generator/txt2img.py index b702edc92d..3502de9be9 100644 --- a/ldm/dream/generator/txt2img.py +++ b/ldm/invoke/generator/txt2img.py @@ -1,10 +1,10 @@ ''' -ldm.dream.generator.txt2img inherits from ldm.dream.generator +ldm.invoke.generator.txt2img inherits from ldm.invoke.generator ''' import torch import numpy as np -from ldm.dream.generator.base import Generator +from ldm.invoke.generator.base import Generator class Txt2Img(Generator): def __init__(self, model, precision): diff --git a/ldm/dream/generator/txt2img2img.py b/ldm/invoke/generator/txt2img2img.py similarity index 97% rename from ldm/dream/generator/txt2img2img.py rename to ldm/invoke/generator/txt2img2img.py index 91e5801eda..945ebadd90 100644 --- a/ldm/dream/generator/txt2img2img.py +++ b/ldm/invoke/generator/txt2img2img.py @@ -1,11 +1,11 @@ ''' -ldm.dream.generator.txt2img inherits from ldm.dream.generator +ldm.invoke.generator.txt2img inherits from ldm.invoke.generator ''' import torch import numpy as np import math -from ldm.dream.generator.base import Generator +from ldm.invoke.generator.base import Generator from ldm.models.diffusion.ddim import DDIMSampler diff --git a/ldm/dream/image_util.py b/ldm/invoke/image_util.py similarity index 100% rename from ldm/dream/image_util.py rename to ldm/invoke/image_util.py diff --git a/ldm/dream/log.py b/ldm/invoke/log.py similarity index 100% rename from ldm/dream/log.py rename to ldm/invoke/log.py diff --git a/ldm/dream/pngwriter.py b/ldm/invoke/pngwriter.py similarity index 100% rename from ldm/dream/pngwriter.py rename to ldm/invoke/pngwriter.py diff --git a/ldm/dream/readline.py b/ldm/invoke/readline.py similarity index 97% rename from ldm/dream/readline.py rename to ldm/invoke/readline.py index 037f739478..73664ef82c 100644 --- a/ldm/dream/readline.py +++ b/ldm/invoke/readline.py @@ -1,17 +1,17 @@ """ -Readline helper functions for dream.py (linux and mac only). +Readline helper functions for invoke.py. You may import the global singleton `completer` to get access to the completer object itself. This is useful when you want to autocomplete seeds: - from ldm.dream.readline import completer + from ldm.invoke.readline import completer completer.add_seed(18247566) completer.add_seed(9281839) """ import os import re import atexit -from ldm.dream.args import Args +from ldm.invoke.args import Args # ---------------readline utilities--------------------- try: @@ -20,7 +20,7 @@ try: except (ImportError,ModuleNotFoundError): readline_available = False -IMG_EXTENSIONS = ('.png','.jpg','.jpeg') +IMG_EXTENSIONS = ('.png','.jpg','.jpeg','.PNG','.JPG','.JPEG','.gif','.GIF') COMMANDS = ( '--steps','-s', '--seed','-S', @@ -74,7 +74,7 @@ class Completer(object): def complete(self, text, state): ''' - Completes dream command line. + Completes invoke command line. BUG: it doesn't correctly complete files that have spaces in the name. ''' buffer = readline.get_line_buffer() @@ -287,7 +287,7 @@ def get_completer(opt:Args)->Completer: readline.parse_and_bind('set skip-completed-text on') readline.parse_and_bind('set show-all-if-ambiguous on') - histfile = os.path.join(os.path.expanduser(opt.outdir), '.dream_history') + histfile = os.path.join(os.path.expanduser(opt.outdir), '.invoke_history') try: readline.read_history_file(histfile) readline.set_history_length(1000) diff --git a/ldm/invoke/restoration/__init__.py b/ldm/invoke/restoration/__init__.py new file mode 100644 index 0000000000..e784ea52b8 --- /dev/null +++ b/ldm/invoke/restoration/__init__.py @@ -0,0 +1,4 @@ +''' +Initialization file for the ldm.invoke.restoration package +''' +from .base import Restoration diff --git a/ldm/dream/restoration/base.py b/ldm/invoke/restoration/base.py similarity index 85% rename from ldm/dream/restoration/base.py rename to ldm/invoke/restoration/base.py index 2605c4ac4b..647b49e77e 100644 --- a/ldm/dream/restoration/base.py +++ b/ldm/invoke/restoration/base.py @@ -23,16 +23,16 @@ class Restoration(): # Face Restore Models def load_gfpgan(self, gfpgan_dir, gfpgan_model_path): - from ldm.dream.restoration.gfpgan import GFPGAN + from ldm.invoke.restoration.gfpgan import GFPGAN return GFPGAN(gfpgan_dir, gfpgan_model_path) def load_codeformer(self): - from ldm.dream.restoration.codeformer import CodeFormerRestoration + from ldm.invoke.restoration.codeformer import CodeFormerRestoration return CodeFormerRestoration() # Upscale Models def load_esrgan(self, esrgan_bg_tile=400): - from ldm.dream.restoration.realesrgan import ESRGAN + from ldm.invoke.restoration.realesrgan import ESRGAN esrgan = ESRGAN(esrgan_bg_tile) print('>> ESRGAN Initialized') return esrgan; diff --git a/ldm/dream/restoration/codeformer.py b/ldm/invoke/restoration/codeformer.py similarity index 93% rename from ldm/dream/restoration/codeformer.py rename to ldm/invoke/restoration/codeformer.py index 78648865aa..0d13ae0a36 100644 --- a/ldm/dream/restoration/codeformer.py +++ b/ldm/invoke/restoration/codeformer.py @@ -8,7 +8,7 @@ pretrained_model_url = 'https://github.com/sczhou/CodeFormer/releases/download/v class CodeFormerRestoration(): def __init__(self, - codeformer_dir='ldm/dream/restoration/codeformer', + codeformer_dir='ldm/invoke/restoration/codeformer', codeformer_model_path='weights/codeformer.pth') -> None: self.model_path = os.path.join(codeformer_dir, codeformer_model_path) self.codeformer_model_exists = os.path.isfile(self.model_path) @@ -27,7 +27,7 @@ class CodeFormerRestoration(): from basicsr.utils.download_util import load_file_from_url from basicsr.utils import img2tensor, tensor2img from facexlib.utils.face_restoration_helper import FaceRestoreHelper - from ldm.dream.restoration.codeformer_arch import CodeFormer + from ldm.invoke.restoration.codeformer_arch import CodeFormer from torchvision.transforms.functional import normalize from PIL import Image @@ -35,7 +35,7 @@ class CodeFormerRestoration(): cf = cf_class(dim_embd=512, codebook_size=1024, n_head=8, n_layers=9, connect_list=['32', '64', '128', '256']).to(device) - checkpoint_path = load_file_from_url(url=pretrained_model_url, model_dir=os.path.abspath('ldm/dream/restoration/codeformer/weights'), progress=True) + checkpoint_path = load_file_from_url(url=pretrained_model_url, model_dir=os.path.abspath('ldm/invoke/restoration/codeformer/weights'), progress=True) checkpoint = torch.load(checkpoint_path)['params_ema'] cf.load_state_dict(checkpoint) cf.eval() diff --git a/ldm/dream/restoration/codeformer/weights/README b/ldm/invoke/restoration/codeformer/weights/README similarity index 100% rename from ldm/dream/restoration/codeformer/weights/README rename to ldm/invoke/restoration/codeformer/weights/README diff --git a/ldm/dream/restoration/codeformer_arch.py b/ldm/invoke/restoration/codeformer_arch.py similarity index 99% rename from ldm/dream/restoration/codeformer_arch.py rename to ldm/invoke/restoration/codeformer_arch.py index cf6c5c91be..b23872b18f 100644 --- a/ldm/dream/restoration/codeformer_arch.py +++ b/ldm/invoke/restoration/codeformer_arch.py @@ -5,7 +5,7 @@ from torch import nn, Tensor import torch.nn.functional as F from typing import Optional, List -from ldm.dream.restoration.vqgan_arch import * +from ldm.invoke.restoration.vqgan_arch import * from basicsr.utils import get_root_logger from basicsr.utils.registry import ARCH_REGISTRY diff --git a/ldm/dream/restoration/gfpgan.py b/ldm/invoke/restoration/gfpgan.py similarity index 100% rename from ldm/dream/restoration/gfpgan.py rename to ldm/invoke/restoration/gfpgan.py diff --git a/ldm/dream/restoration/outcrop.py b/ldm/invoke/restoration/outcrop.py similarity index 100% rename from ldm/dream/restoration/outcrop.py rename to ldm/invoke/restoration/outcrop.py diff --git a/ldm/dream/restoration/outpaint.py b/ldm/invoke/restoration/outpaint.py similarity index 100% rename from ldm/dream/restoration/outpaint.py rename to ldm/invoke/restoration/outpaint.py diff --git a/ldm/dream/restoration/realesrgan.py b/ldm/invoke/restoration/realesrgan.py similarity index 100% rename from ldm/dream/restoration/realesrgan.py rename to ldm/invoke/restoration/realesrgan.py diff --git a/ldm/dream/restoration/vqgan_arch.py b/ldm/invoke/restoration/vqgan_arch.py similarity index 100% rename from ldm/dream/restoration/vqgan_arch.py rename to ldm/invoke/restoration/vqgan_arch.py diff --git a/ldm/dream/server.py b/ldm/invoke/server.py similarity index 99% rename from ldm/dream/server.py rename to ldm/invoke/server.py index 46002a9b27..4eef1ddd56 100644 --- a/ldm/dream/server.py +++ b/ldm/invoke/server.py @@ -4,9 +4,9 @@ import copy import base64 import mimetypes import os -from ldm.dream.args import Args, metadata_dumps +from ldm.invoke.args import Args, metadata_dumps from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer -from ldm.dream.pngwriter import PngWriter +from ldm.invoke.pngwriter import PngWriter from threading import Event def build_opt(post_data, seed, gfpgan_model_exists): diff --git a/ldm/models/diffusion/ddim.py b/ldm/models/diffusion/ddim.py index 7aca381c74..f5dada8627 100644 --- a/ldm/models/diffusion/ddim.py +++ b/ldm/models/diffusion/ddim.py @@ -4,7 +4,7 @@ import torch import numpy as np from tqdm import tqdm from functools import partial -from ldm.dream.devices import choose_torch_device +from ldm.invoke.devices import choose_torch_device from ldm.models.diffusion.sampler import Sampler from ldm.modules.diffusionmodules.util import noise_like diff --git a/ldm/models/diffusion/ksampler.py b/ldm/models/diffusion/ksampler.py index 6b78f8a5b0..a947296f9e 100644 --- a/ldm/models/diffusion/ksampler.py +++ b/ldm/models/diffusion/ksampler.py @@ -2,7 +2,7 @@ import k_diffusion as K import torch import torch.nn as nn -from ldm.dream.devices import choose_torch_device +from ldm.invoke.devices import choose_torch_device from ldm.models.diffusion.sampler import Sampler from ldm.util import rand_perlin_2d from ldm.modules.diffusionmodules.util import ( diff --git a/ldm/models/diffusion/plms.py b/ldm/models/diffusion/plms.py index 870d8739ec..9e722eb932 100644 --- a/ldm/models/diffusion/plms.py +++ b/ldm/models/diffusion/plms.py @@ -4,7 +4,7 @@ import torch import numpy as np from tqdm import tqdm from functools import partial -from ldm.dream.devices import choose_torch_device +from ldm.invoke.devices import choose_torch_device from ldm.models.diffusion.sampler import Sampler from ldm.modules.diffusionmodules.util import noise_like diff --git a/ldm/models/diffusion/sampler.py b/ldm/models/diffusion/sampler.py index 3056cbb6b8..8b19f894e5 100644 --- a/ldm/models/diffusion/sampler.py +++ b/ldm/models/diffusion/sampler.py @@ -8,7 +8,7 @@ import torch import numpy as np from tqdm import tqdm from functools import partial -from ldm.dream.devices import choose_torch_device +from ldm.invoke.devices import choose_torch_device from ldm.modules.diffusionmodules.util import ( make_ddim_sampling_parameters, diff --git a/ldm/modules/encoders/modules.py b/ldm/modules/encoders/modules.py index 3357ee6c9e..426fccced3 100644 --- a/ldm/modules/encoders/modules.py +++ b/ldm/modules/encoders/modules.py @@ -5,7 +5,7 @@ import clip from einops import rearrange, repeat from transformers import CLIPTokenizer, CLIPTextModel import kornia -from ldm.dream.devices import choose_torch_device +from ldm.invoke.devices import choose_torch_device from ldm.modules.x_transformer import ( Encoder, diff --git a/notebooks/notebook_helpers.py b/notebooks/notebook_helpers.py index 2c4fe70d62..663b212ac5 100644 --- a/notebooks/notebook_helpers.py +++ b/notebooks/notebook_helpers.py @@ -14,7 +14,7 @@ from ldm.models.diffusion.ddim import DDIMSampler from ldm.util import ismap import time from omegaconf import OmegaConf -from ldm.dream.devices import choose_torch_device +from ldm.invoke.devices import choose_torch_device def download_models(mode): diff --git a/scripts/images2prompt.py b/scripts/images2prompt.py index c23eee0f75..70312b1c90 100755 --- a/scripts/images2prompt.py +++ b/scripts/images2prompt.py @@ -1,12 +1,12 @@ #!/usr/bin/env python3 -'''This script reads the "Dream" Stable Diffusion prompt embedded in files generated by dream.py''' +'''This script reads the "Invoke" Stable Diffusion prompt embedded in files generated by invoke.py''' import sys from PIL import Image,PngImagePlugin if len(sys.argv) < 2: print("Usage: file2prompt.py ...") - print("This script opens up the indicated dream.py-generated PNG file(s) and prints out the prompt used to generate them.") + print("This script opens up the indicated invoke.py-generated PNG file(s) and prints out the prompt used to generate them.") exit(-1) filenames = sys.argv[1:] diff --git a/scripts/invoke.py b/scripts/invoke.py index 90febb98ca..100ab2413b 100644 --- a/scripts/invoke.py +++ b/scripts/invoke.py @@ -10,11 +10,11 @@ import warnings import time import traceback sys.path.append('.') # corrects a weird problem on Macs -from ldm.dream.readline import get_completer -from ldm.dream.args import Args, metadata_dumps, metadata_from_png, dream_cmd_from_png -from ldm.dream.pngwriter import PngWriter, retrieve_metadata, write_metadata -from ldm.dream.image_util import make_grid -from ldm.dream.log import write_log +from ldm.invoke.readline import get_completer +from ldm.invoke.args import Args, metadata_dumps, metadata_from_png, dream_cmd_from_png +from ldm.invoke.pngwriter import PngWriter, retrieve_metadata, write_metadata +from ldm.invoke.image_util import make_grid +from ldm.invoke.log import write_log from omegaconf import OmegaConf from backend.invoke_ai_web_server import InvokeAIWebServer @@ -45,7 +45,7 @@ def main(): try: gfpgan, codeformer, esrgan = None, None, None if opt.restore or opt.esrgan: - from ldm.dream.restoration import Restoration + from ldm.invoke.restoration import Restoration restoration = Restoration() if opt.restore: gfpgan, codeformer = restoration.load_face_restore_models(opt.gfpgan_dir, opt.gfpgan_model_path) @@ -256,7 +256,7 @@ def main_loop(gen, opt, infile): if opt.with_variations is not None: opt.with_variations = split_variations(opt.with_variations) - if opt.prompt_as_dir: + if opt.prompt_as_dir and operation == 'generate': # sanitize the prompt to a valid folder name subdir = path_filter.sub('_', opt.prompt)[:name_max].rstrip(' .') @@ -275,6 +275,12 @@ def main_loop(gen, opt, infile): os.makedirs(opt.outdir) current_outdir = opt.outdir + # write out the history at this point + if operation == 'postprocess': + completer.add_history(f'!fix {command}') + else: + completer.add_history(command) + # Here is where the images are actually generated! last_results = [] try: @@ -380,13 +386,9 @@ def main_loop(gen, opt, infile): continue print('Outputs:') - log_path = os.path.join(current_outdir, 'dream_log') + log_path = os.path.join(current_outdir, 'invoke_log') output_cntr = write_log(results, log_path ,('txt', 'md'), output_cntr) print() - if operation == 'postprocess': - completer.add_history(f'!fix {command}') - else: - completer.add_history(command) print('goodbye!') @@ -422,6 +424,7 @@ def do_postprocess (gen, opt, callback): opt = opt, ) except OSError: + print(traceback.format_exc(), file=sys.stderr) print(f'** {file_path}: file could not be read') return except (KeyError, AttributeError): diff --git a/scripts/orig_scripts/img2img.py b/scripts/orig_scripts/img2img.py index fcd0b8cdfa..9f74f25bf2 100644 --- a/scripts/orig_scripts/img2img.py +++ b/scripts/orig_scripts/img2img.py @@ -18,7 +18,7 @@ from pytorch_lightning import seed_everything from ldm.util import instantiate_from_config from ldm.models.diffusion.ddim import DDIMSampler from ldm.models.diffusion.plms import PLMSSampler -from ldm.dream.devices import choose_torch_device +from ldm.invoke.devices import choose_torch_device def chunk(it, size): diff --git a/scripts/orig_scripts/inpaint.py b/scripts/orig_scripts/inpaint.py index 87b0e98d96..b8245db322 100644 --- a/scripts/orig_scripts/inpaint.py +++ b/scripts/orig_scripts/inpaint.py @@ -6,7 +6,7 @@ import numpy as np import torch from main import instantiate_from_config from ldm.models.diffusion.ddim import DDIMSampler -from ldm.dream.devices import choose_torch_device +from ldm.invoke.devices import choose_torch_device def make_batch(image, mask, device): image = np.array(Image.open(image).convert("RGB")) diff --git a/scripts/orig_scripts/txt2img.py b/scripts/orig_scripts/txt2img.py index 6c43e73b93..0d350d2c73 100644 --- a/scripts/orig_scripts/txt2img.py +++ b/scripts/orig_scripts/txt2img.py @@ -18,7 +18,7 @@ import torch.nn as nn from ldm.util import instantiate_from_config from ldm.models.diffusion.ddim import DDIMSampler from ldm.models.diffusion.plms import PLMSSampler -from ldm.dream.devices import choose_torch_device +from ldm.invoke.devices import choose_torch_device def chunk(it, size): it = iter(it) diff --git a/scripts/preload_models.py b/scripts/preload_models.py index 2435799393..db484517db 100644 --- a/scripts/preload_models.py +++ b/scripts/preload_models.py @@ -97,7 +97,7 @@ print('preloading CodeFormer model file...',end='') try: import urllib.request model_url = 'https://github.com/sczhou/CodeFormer/releases/download/v0.1.0/codeformer.pth' - model_dest = 'ldm/dream/restoration/codeformer/weights/codeformer.pth' + model_dest = 'ldm/invoke/restoration/codeformer/weights/codeformer.pth' if not os.path.exists(model_dest): print('Downloading codeformer model file...') os.makedirs(os.path.dirname(model_dest), exist_ok=True) diff --git a/scripts/sd-metadata.py b/scripts/sd-metadata.py index 02d5002d60..6a94fd6115 100755 --- a/scripts/sd-metadata.py +++ b/scripts/sd-metadata.py @@ -2,11 +2,11 @@ import sys import json -from ldm.dream.pngwriter import retrieve_metadata +from ldm.invoke.pngwriter import retrieve_metadata if len(sys.argv) < 2: print("Usage: file2prompt.py ...") - print("This script opens up the indicated dream.py-generated PNG file(s) and prints out their metadata.") + print("This script opens up the indicated invoke.py-generated PNG file(s) and prints out their metadata.") exit(-1) filenames = sys.argv[1:] diff --git a/server/application.py b/server/application.py index 58725637a7..a48ee5488d 100644 --- a/server/application.py +++ b/server/application.py @@ -10,7 +10,7 @@ from flask_cors import CORS from flask_socketio import SocketIO from omegaconf import OmegaConf from dependency_injector.wiring import inject, Provide -from ldm.dream.args import Args +from ldm.invoke.args import Args from server import views from server.containers import Container from server.services import GeneratorService, SignalService diff --git a/server/services.py b/server/services.py index 93bbe1d240..19b2360a37 100644 --- a/server/services.py +++ b/server/services.py @@ -12,12 +12,12 @@ import shlex from threading import Thread import time from flask_socketio import SocketIO, join_room, leave_room -from ldm.dream.args import Args -from ldm.dream.generator import embiggen +from ldm.invoke.args import Args +from ldm.invoke.generator import embiggen from PIL import Image -from ldm.dream.pngwriter import PngWriter -from ldm.dream.server import CanceledException +from ldm.invoke.pngwriter import PngWriter +from ldm.invoke.server import CanceledException from ldm.generate import Generate from server.models import DreamResult, JobRequest, PaginatedItems, ProgressType, Signal