2022-09-03 09:08:45 +00:00
import argparse
import os
import sys
2022-10-09 14:58:43 +00:00
import modules . safe
2022-09-03 09:08:45 +00:00
script_path = os . path . dirname ( os . path . dirname ( os . path . realpath ( __file__ ) ) )
2023-01-25 16:15:42 +00:00
# Parse the --data-dir flag first so we can use it as a base for our other argument default values
parser = argparse . ArgumentParser ( )
parser . add_argument ( " --data-dir " , type = str , default = os . path . dirname ( os . path . dirname ( os . path . realpath ( __file__ ) ) ) , help = " base path where all user data is stored " , )
cmd_opts_pre = parser . parse_known_args ( ) [ 0 ]
data_path = cmd_opts_pre . data_dir
models_path = os . path . join ( data_path , " models " )
# data_path = cmd_opts_pre.data
2022-09-03 09:08:45 +00:00
sys . path . insert ( 0 , script_path )
2022-09-26 14:29:50 +00:00
# search for directory of stable diffusion in following places
2022-09-06 07:38:02 +00:00
sd_path = None
2022-11-26 13:10:46 +00:00
possible_sd_paths = [ os . path . join ( script_path , ' repositories/stable-diffusion-stability-ai ' ) , ' . ' , os . path . dirname ( script_path ) ]
2022-09-06 07:38:02 +00:00
for possible_sd_path in possible_sd_paths :
if os . path . exists ( os . path . join ( possible_sd_path , ' ldm/models/diffusion/ddpm.py ' ) ) :
sd_path = os . path . abspath ( possible_sd_path )
2022-10-08 15:49:43 +00:00
break
2022-09-06 07:38:02 +00:00
2022-09-10 21:26:24 +00:00
assert sd_path is not None , " Couldn ' t find Stable Diffusion in any of: " + str ( possible_sd_paths )
2022-09-03 09:08:45 +00:00
path_dirs = [
2022-09-30 05:21:05 +00:00
( sd_path , ' ldm ' , ' Stable Diffusion ' , [ ] ) ,
( os . path . join ( sd_path , ' ../taming-transformers ' ) , ' taming ' , ' Taming Transformers ' , [ ] ) ,
( os . path . join ( sd_path , ' ../CodeFormer ' ) , ' inference_codeformer.py ' , ' CodeFormer ' , [ ] ) ,
( os . path . join ( sd_path , ' ../BLIP ' ) , ' models/blip.py ' , ' BLIP ' , [ ] ) ,
( os . path . join ( sd_path , ' ../k-diffusion ' ) , ' k_diffusion/sampling.py ' , ' k_diffusion ' , [ " atstart " ] ) ,
2022-09-03 09:08:45 +00:00
]
2022-09-07 09:32:28 +00:00
paths = { }
2022-09-30 05:21:05 +00:00
for d , must_exist , what , options in path_dirs :
2022-09-03 09:08:45 +00:00
must_exist_path = os . path . abspath ( os . path . join ( script_path , d , must_exist ) )
if not os . path . exists ( must_exist_path ) :
print ( f " Warning: { what } not found at path { must_exist_path } " , file = sys . stderr )
else :
2022-09-07 09:32:28 +00:00
d = os . path . abspath ( d )
2022-09-30 05:21:05 +00:00
if " atstart " in options :
sys . path . insert ( 0 , d )
else :
sys . path . append ( d )
2022-09-07 09:32:28 +00:00
paths [ what ] = d
2023-01-23 21:24:17 +00:00
class Prioritize :
def __init__ ( self , name ) :
self . name = name
self . path = None
def __enter__ ( self ) :
self . path = sys . path . copy ( )
sys . path = [ paths [ self . name ] ] + sys . path
def __exit__ ( self , exc_type , exc_val , exc_tb ) :
sys . path = self . path
self . path = None