commit
14bd126391
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,6 +1,5 @@
|
|||||||
venv
|
venv
|
||||||
__pycache__
|
__pycache__
|
||||||
*.txt
|
|
||||||
cudnn_windows
|
cudnn_windows
|
||||||
.vscode
|
.vscode
|
||||||
*.egg-info
|
*.egg-info
|
||||||
@ -9,4 +8,4 @@ wd14_tagger_model
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
locon
|
locon
|
||||||
gui-user.bat
|
gui-user.bat
|
||||||
gui-user.ps1
|
gui-user.ps1
|
@ -118,7 +118,7 @@ When a new release comes out, you can upgrade your repo with the following comma
|
|||||||
upgrade_macos.sh
|
upgrade_macos.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
Once the commands have completed successfully you should be ready to use the new version.
|
Once the commands have completed successfully you should be ready to use the new version. MacOS support is not tested and has been mostly taken from https://gist.github.com/jstayco/9f5733f05b9dc29de95c4056a023d645
|
||||||
|
|
||||||
## Upgrading Windows
|
## Upgrading Windows
|
||||||
|
|
||||||
@ -213,6 +213,9 @@ This will store your a backup file with your current locally installed pip packa
|
|||||||
|
|
||||||
## Change History
|
## Change History
|
||||||
|
|
||||||
|
* 2023/03/26 (v21.3.5)
|
||||||
|
- Fix for https://github.com/bmaltais/kohya_ss/issues/230
|
||||||
|
- Added detection for Google Colab to not bring up the GUI file/folder window on the platform. Instead it will only use the file/folder path provided in the input field.
|
||||||
* 2023/03/25 (v21.3.4)
|
* 2023/03/25 (v21.3.4)
|
||||||
- Added untested support for MacOS base on this gist: https://gist.github.com/jstayco/9f5733f05b9dc29de95c4056a023d645
|
- Added untested support for MacOS base on this gist: https://gist.github.com/jstayco/9f5733f05b9dc29de95c4056a023d645
|
||||||
|
|
||||||
|
13
examples/lucoris extract examples.txt
Normal file
13
examples/lucoris extract examples.txt
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
python tools\lycoris_locon_extract.py --mode quantile --safetensors --linear_ratio 0.9 --conv_ratio 0.9 --device cuda D:/models/v1-5-pruned.ckpt D:/models/cyberrealistic_v12.safetensors "D:/lora/sd1.5/cyberrealistic_v12.safetensors"
|
||||||
|
|
||||||
|
python tools\lycoris_locon_extract.py --mode quantile --safetensors --linear_quantile 0.75 --conv_quantile 0.75 --device cuda D:/models/v1-5-pruned.ckpt "C:\Users\berna\Downloads\deliberate_v2.safetensors" "D:/lora/sd1.5/deliberate_v2.safetensors"
|
||||||
|
|
||||||
|
python tools\lycoris_locon_extract.py --mode fixed --safetensors --linear_dim 512 --conv_dim 512 --device cuda D:/models/v1-5-pruned.ckpt D:/models/cyberrealistic_v12.safetensors "D:/lora/sd1.5/cyberrealistic_v12.safetensors"
|
||||||
|
|
||||||
|
python tools\lycoris_locon_extract.py --use_sparse_bias --sparsity 0.98 --mode quantile --safetensors --linear_quantile 0.75 --conv_quantile 0.75 --device cuda D:/models/v1-5-pruned.ckpt "C:\Users\berna\Downloads\deliberate_v2.safetensors" "D:/lora/sd1.5/deliberate_v2.safetensors"
|
||||||
|
|
||||||
|
python tools\lycoris_locon_extract.py --use_sparse_bias --sparsity 0.98 --mode quantile --safetensors --linear_quantile 0.75 --conv_quantile 0.75 --device cuda D:/models/v1-5-pruned.ckpt "D:/models/test\claire_v1.0ee2-000003.safetensors" "D:/lora/sd1.5/claire_v1.0ee2-000003.safetensors"
|
||||||
|
|
||||||
|
python tools\lycoris_locon_extract.py --use_sparse_bias --sparsity 0.98 --mode quantile --safetensors --linear_quantile 0.5 --conv_quantile 0.5 --device cuda D:/models/v1-5-pruned.ckpt "D:/models/test\claire_v1.0ee2-000003.safetensors" "D:/lora/sd1.5/claire_v1.0ee2-0.5.safetensors"
|
||||||
|
|
||||||
|
python tools\lycoris_locon_extract.py --use_sparse_bias --sparsity 0.98 --mode quantile --safetensors --linear_quantile 0.5 --conv_quantile 0.5 --device cuda D:/models/v1-5-pruned.ckpt "D:/models/test\claire_v1.0f.safetensors" "D:/lora/sd1.5/claire_v1.0f0.5.safetensors"
|
@ -31,6 +31,8 @@ V1_MODELS = [
|
|||||||
# define a list of substrings to search for
|
# define a list of substrings to search for
|
||||||
ALL_PRESET_MODELS = V2_BASE_MODELS + V_PARAMETERIZATION_MODELS + V1_MODELS
|
ALL_PRESET_MODELS = V2_BASE_MODELS + V_PARAMETERIZATION_MODELS + V1_MODELS
|
||||||
|
|
||||||
|
FILE_ENV_EXCLUSION = ['COLAB_GPU', 'RUNPOD_ENVIRONMENT']
|
||||||
|
|
||||||
|
|
||||||
def check_if_model_exist(output_name, output_dir, save_model_as):
|
def check_if_model_exist(output_name, output_dir, save_model_as):
|
||||||
if save_model_as in ['diffusers', 'diffusers_safetendors']:
|
if save_model_as in ['diffusers', 'diffusers_safetendors']:
|
||||||
@ -118,54 +120,58 @@ def get_dir_and_file(file_path):
|
|||||||
def get_file_path(
|
def get_file_path(
|
||||||
file_path='', default_extension='.json', extension_name='Config files'
|
file_path='', default_extension='.json', extension_name='Config files'
|
||||||
):
|
):
|
||||||
current_file_path = file_path
|
if not any(var in os.environ for var in FILE_ENV_EXCLUSION):
|
||||||
# print(f'current file path: {current_file_path}')
|
current_file_path = file_path
|
||||||
|
# print(f'current file path: {current_file_path}')
|
||||||
|
|
||||||
initial_dir, initial_file = get_dir_and_file(file_path)
|
initial_dir, initial_file = get_dir_and_file(file_path)
|
||||||
|
|
||||||
# Create a hidden Tkinter root window
|
# Create a hidden Tkinter root window
|
||||||
root = Tk()
|
root = Tk()
|
||||||
root.wm_attributes('-topmost', 1)
|
root.wm_attributes('-topmost', 1)
|
||||||
root.withdraw()
|
root.withdraw()
|
||||||
|
|
||||||
# Show the open file dialog and get the selected file path
|
# Show the open file dialog and get the selected file path
|
||||||
file_path = filedialog.askopenfilename(
|
file_path = filedialog.askopenfilename(
|
||||||
filetypes=(
|
filetypes=(
|
||||||
(extension_name, f'*{default_extension}'),
|
(extension_name, f'*{default_extension}'),
|
||||||
('All files', '*.*'),
|
('All files', '*.*'),
|
||||||
),
|
),
|
||||||
defaultextension=default_extension,
|
defaultextension=default_extension,
|
||||||
initialfile=initial_file,
|
initialfile=initial_file,
|
||||||
initialdir=initial_dir,
|
initialdir=initial_dir,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Destroy the hidden root window
|
# Destroy the hidden root window
|
||||||
root.destroy()
|
root.destroy()
|
||||||
|
|
||||||
# If no file is selected, use the current file path
|
# If no file is selected, use the current file path
|
||||||
if not file_path:
|
if not file_path:
|
||||||
file_path = current_file_path
|
file_path = current_file_path
|
||||||
|
current_file_path = file_path
|
||||||
|
# print(f'current file path: {current_file_path}')
|
||||||
|
|
||||||
return file_path
|
return file_path
|
||||||
|
|
||||||
|
|
||||||
def get_any_file_path(file_path=''):
|
def get_any_file_path(file_path=''):
|
||||||
current_file_path = file_path
|
if not any(var in os.environ for var in FILE_ENV_EXCLUSION):
|
||||||
# print(f'current file path: {current_file_path}')
|
current_file_path = file_path
|
||||||
|
# print(f'current file path: {current_file_path}')
|
||||||
|
|
||||||
initial_dir, initial_file = get_dir_and_file(file_path)
|
initial_dir, initial_file = get_dir_and_file(file_path)
|
||||||
|
|
||||||
root = Tk()
|
root = Tk()
|
||||||
root.wm_attributes('-topmost', 1)
|
root.wm_attributes('-topmost', 1)
|
||||||
root.withdraw()
|
root.withdraw()
|
||||||
file_path = filedialog.askopenfilename(
|
file_path = filedialog.askopenfilename(
|
||||||
initialdir=initial_dir,
|
initialdir=initial_dir,
|
||||||
initialfile=initial_file,
|
initialfile=initial_file,
|
||||||
)
|
)
|
||||||
root.destroy()
|
root.destroy()
|
||||||
|
|
||||||
if file_path == '':
|
if file_path == '':
|
||||||
file_path = current_file_path
|
file_path = current_file_path
|
||||||
|
|
||||||
return file_path
|
return file_path
|
||||||
|
|
||||||
@ -191,18 +197,19 @@ def remove_doublequote(file_path):
|
|||||||
|
|
||||||
|
|
||||||
def get_folder_path(folder_path=''):
|
def get_folder_path(folder_path=''):
|
||||||
current_folder_path = folder_path
|
if not any(var in os.environ for var in FILE_ENV_EXCLUSION):
|
||||||
|
current_folder_path = folder_path
|
||||||
|
|
||||||
initial_dir, initial_file = get_dir_and_file(folder_path)
|
initial_dir, initial_file = get_dir_and_file(folder_path)
|
||||||
|
|
||||||
root = Tk()
|
root = Tk()
|
||||||
root.wm_attributes('-topmost', 1)
|
root.wm_attributes('-topmost', 1)
|
||||||
root.withdraw()
|
root.withdraw()
|
||||||
folder_path = filedialog.askdirectory(initialdir=initial_dir)
|
folder_path = filedialog.askdirectory(initialdir=initial_dir)
|
||||||
root.destroy()
|
root.destroy()
|
||||||
|
|
||||||
if folder_path == '':
|
if folder_path == '':
|
||||||
folder_path = current_folder_path
|
folder_path = current_folder_path
|
||||||
|
|
||||||
return folder_path
|
return folder_path
|
||||||
|
|
||||||
@ -210,34 +217,35 @@ def get_folder_path(folder_path=''):
|
|||||||
def get_saveasfile_path(
|
def get_saveasfile_path(
|
||||||
file_path='', defaultextension='.json', extension_name='Config files'
|
file_path='', defaultextension='.json', extension_name='Config files'
|
||||||
):
|
):
|
||||||
current_file_path = file_path
|
if not any(var in os.environ for var in FILE_ENV_EXCLUSION):
|
||||||
# print(f'current file path: {current_file_path}')
|
current_file_path = file_path
|
||||||
|
# print(f'current file path: {current_file_path}')
|
||||||
|
|
||||||
initial_dir, initial_file = get_dir_and_file(file_path)
|
initial_dir, initial_file = get_dir_and_file(file_path)
|
||||||
|
|
||||||
root = Tk()
|
root = Tk()
|
||||||
root.wm_attributes('-topmost', 1)
|
root.wm_attributes('-topmost', 1)
|
||||||
root.withdraw()
|
root.withdraw()
|
||||||
save_file_path = filedialog.asksaveasfile(
|
save_file_path = filedialog.asksaveasfile(
|
||||||
filetypes=(
|
filetypes=(
|
||||||
(f'{extension_name}', f'{defaultextension}'),
|
(f'{extension_name}', f'{defaultextension}'),
|
||||||
('All files', '*'),
|
('All files', '*'),
|
||||||
),
|
),
|
||||||
defaultextension=defaultextension,
|
defaultextension=defaultextension,
|
||||||
initialdir=initial_dir,
|
initialdir=initial_dir,
|
||||||
initialfile=initial_file,
|
initialfile=initial_file,
|
||||||
)
|
)
|
||||||
root.destroy()
|
root.destroy()
|
||||||
|
|
||||||
# print(save_file_path)
|
# print(save_file_path)
|
||||||
|
|
||||||
if save_file_path == None:
|
if save_file_path == None:
|
||||||
file_path = current_file_path
|
file_path = current_file_path
|
||||||
else:
|
else:
|
||||||
print(save_file_path.name)
|
print(save_file_path.name)
|
||||||
file_path = save_file_path.name
|
file_path = save_file_path.name
|
||||||
|
|
||||||
# print(file_path)
|
# print(file_path)
|
||||||
|
|
||||||
return file_path
|
return file_path
|
||||||
|
|
||||||
@ -245,27 +253,28 @@ def get_saveasfile_path(
|
|||||||
def get_saveasfilename_path(
|
def get_saveasfilename_path(
|
||||||
file_path='', extensions='*', extension_name='Config files'
|
file_path='', extensions='*', extension_name='Config files'
|
||||||
):
|
):
|
||||||
current_file_path = file_path
|
if not any(var in os.environ for var in FILE_ENV_EXCLUSION):
|
||||||
# print(f'current file path: {current_file_path}')
|
current_file_path = file_path
|
||||||
|
# print(f'current file path: {current_file_path}')
|
||||||
|
|
||||||
initial_dir, initial_file = get_dir_and_file(file_path)
|
initial_dir, initial_file = get_dir_and_file(file_path)
|
||||||
|
|
||||||
root = Tk()
|
root = Tk()
|
||||||
root.wm_attributes('-topmost', 1)
|
root.wm_attributes('-topmost', 1)
|
||||||
root.withdraw()
|
root.withdraw()
|
||||||
save_file_path = filedialog.asksaveasfilename(
|
save_file_path = filedialog.asksaveasfilename(
|
||||||
filetypes=((f'{extension_name}', f'{extensions}'), ('All files', '*')),
|
filetypes=((f'{extension_name}', f'{extensions}'), ('All files', '*')),
|
||||||
defaultextension=extensions,
|
defaultextension=extensions,
|
||||||
initialdir=initial_dir,
|
initialdir=initial_dir,
|
||||||
initialfile=initial_file,
|
initialfile=initial_file,
|
||||||
)
|
)
|
||||||
root.destroy()
|
root.destroy()
|
||||||
|
|
||||||
if save_file_path == '':
|
if save_file_path == '':
|
||||||
file_path = current_file_path
|
file_path = current_file_path
|
||||||
else:
|
else:
|
||||||
# print(save_file_path)
|
# print(save_file_path)
|
||||||
file_path = save_file_path
|
file_path = save_file_path
|
||||||
|
|
||||||
return file_path
|
return file_path
|
||||||
|
|
||||||
@ -316,33 +325,6 @@ def add_pre_postfix(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# def add_pre_postfix(
|
|
||||||
# folder='', prefix='', postfix='', caption_file_ext='.caption'
|
|
||||||
# ):
|
|
||||||
# if not has_ext_files(folder, caption_file_ext):
|
|
||||||
# msgbox(
|
|
||||||
# f'No files with extension {caption_file_ext} were found in {folder}...'
|
|
||||||
# )
|
|
||||||
# return
|
|
||||||
|
|
||||||
# if prefix == '' and postfix == '':
|
|
||||||
# return
|
|
||||||
|
|
||||||
# files = [f for f in os.listdir(folder) if f.endswith(caption_file_ext)]
|
|
||||||
# if not prefix == '':
|
|
||||||
# prefix = f'{prefix} '
|
|
||||||
# if not postfix == '':
|
|
||||||
# postfix = f' {postfix}'
|
|
||||||
|
|
||||||
# for file in files:
|
|
||||||
# with open(os.path.join(folder, file), 'r+') as f:
|
|
||||||
# content = f.read()
|
|
||||||
# content = content.rstrip()
|
|
||||||
# f.seek(0, 0)
|
|
||||||
# f.write(f'{prefix} {content} {postfix}')
|
|
||||||
# f.close()
|
|
||||||
|
|
||||||
|
|
||||||
def has_ext_files(folder_path: str, file_extension: str) -> bool:
|
def has_ext_files(folder_path: str, file_extension: str) -> bool:
|
||||||
"""
|
"""
|
||||||
Check if there are any files with the specified extension in the given folder.
|
Check if there are any files with the specified extension in the given folder.
|
||||||
@ -402,28 +384,6 @@ def find_replace(
|
|||||||
f.write(content)
|
f.write(content)
|
||||||
|
|
||||||
|
|
||||||
# def find_replace(folder='', caption_file_ext='.caption', find='', replace=''):
|
|
||||||
# print('Running caption find/replace')
|
|
||||||
# if not has_ext_files(folder, caption_file_ext):
|
|
||||||
# msgbox(
|
|
||||||
# f'No files with extension {caption_file_ext} were found in {folder}...'
|
|
||||||
# )
|
|
||||||
# return
|
|
||||||
|
|
||||||
# if find == '':
|
|
||||||
# return
|
|
||||||
|
|
||||||
# files = [f for f in os.listdir(folder) if f.endswith(caption_file_ext)]
|
|
||||||
# for file in files:
|
|
||||||
# with open(os.path.join(folder, file), 'r', errors='ignore') as f:
|
|
||||||
# content = f.read()
|
|
||||||
# f.close
|
|
||||||
# content = content.replace(find, replace)
|
|
||||||
# with open(os.path.join(folder, file), 'w') as f:
|
|
||||||
# f.write(content)
|
|
||||||
# f.close()
|
|
||||||
|
|
||||||
|
|
||||||
def color_aug_changed(color_aug):
|
def color_aug_changed(color_aug):
|
||||||
if color_aug:
|
if color_aug:
|
||||||
msgbox(
|
msgbox(
|
||||||
|
@ -1103,6 +1103,8 @@ def UI(**kwargs):
|
|||||||
launch_kwargs['server_port'] = kwargs.get('server_port', 0)
|
launch_kwargs['server_port'] = kwargs.get('server_port', 0)
|
||||||
if kwargs.get('inbrowser', False):
|
if kwargs.get('inbrowser', False):
|
||||||
launch_kwargs['inbrowser'] = kwargs.get('inbrowser', False)
|
launch_kwargs['inbrowser'] = kwargs.get('inbrowser', False)
|
||||||
|
if kwargs.get('listen', True):
|
||||||
|
launch_kwargs['server_name'] = "0.0.0.0"
|
||||||
print(launch_kwargs)
|
print(launch_kwargs)
|
||||||
interface.launch(**launch_kwargs)
|
interface.launch(**launch_kwargs)
|
||||||
|
|
||||||
@ -1125,6 +1127,9 @@ if __name__ == '__main__':
|
|||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--inbrowser', action='store_true', help='Open in browser'
|
'--inbrowser', action='store_true', help='Open in browser'
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--listen', action='store_true', help='Launch gradio with server name 0.0.0.0, allowing LAN access'
|
||||||
|
)
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ if command -v python3.10 >/dev/null; then
|
|||||||
pip install torch==2.0.0 torchvision==0.15.1 -f https://download.pytorch.org/whl/cpu/torch_stable.html
|
pip install torch==2.0.0 torchvision==0.15.1 -f https://download.pytorch.org/whl/cpu/torch_stable.html
|
||||||
python -m pip install --use-pep517 --upgrade -r requirements_macos.txt
|
python -m pip install --use-pep517 --upgrade -r requirements_macos.txt
|
||||||
accelerate config
|
accelerate config
|
||||||
echo -e "Setup finished! Run ./gui.sh to start."
|
echo -e "Setup finished! Run ./gui_macos.sh to start."
|
||||||
else
|
else
|
||||||
echo "Python not found. Please ensure you install Python."
|
echo "Python not found. Please ensure you install Python."
|
||||||
echo "The brew command for Python 3.10 is: brew install python@3.10"
|
echo "The brew command for Python 3.10 is: brew install python@3.10"
|
||||||
|
32
requirements_macos.txt
Normal file
32
requirements_macos.txt
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
accelerate==0.15.0
|
||||||
|
albumentations==1.3.0
|
||||||
|
altair==4.2.2
|
||||||
|
bitsandbytes==0.35.0
|
||||||
|
dadaptation==1.5
|
||||||
|
diffusers[torch]==0.10.2
|
||||||
|
easygui==0.98.3
|
||||||
|
einops==0.6.0
|
||||||
|
ftfy==6.1.1
|
||||||
|
gradio==3.19.1; sys_platform != 'darwin'
|
||||||
|
gradio==3.23.0; sys_platform == 'darwin'
|
||||||
|
lion-pytorch==0.0.6
|
||||||
|
opencv-python==4.7.0.68
|
||||||
|
pytorch-lightning==1.9.0
|
||||||
|
safetensors==0.2.6
|
||||||
|
tensorboard==2.10.1
|
||||||
|
tk==0.1.0
|
||||||
|
toml==0.10.2
|
||||||
|
transformers==4.26.0
|
||||||
|
voluptuous==0.13.1
|
||||||
|
# for BLIP captioning
|
||||||
|
fairscale==0.4.13
|
||||||
|
requests==2.28.2
|
||||||
|
timm==0.6.12
|
||||||
|
# tensorflow<2.11
|
||||||
|
huggingface-hub==0.12.0; sys_platform != 'darwin'
|
||||||
|
huggingface-hub==0.13.0; sys_platform == 'darwin'
|
||||||
|
tensorflow==2.10.1; sys_platform != 'darwin'
|
||||||
|
# For locon support
|
||||||
|
lycoris_lora==0.1.2
|
||||||
|
# for kohya_ss library
|
||||||
|
.
|
Loading…
Reference in New Issue
Block a user