diff --git a/.gitignore b/.gitignore index 880f47fa..fe03e369 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ __pycache__ *.ckpt *.safetensors *.pth +*.pt *.bin *.patch lena.png diff --git a/build_launcher.py b/build_launcher.py index c10e606a..7337c382 100644 --- a/build_launcher.py +++ b/build_launcher.py @@ -1,5 +1,26 @@ -is_win32_standalone_build = False +import os + +win32_root = os.path.dirname(os.path.dirname(__file__)) +python_embeded_path = os.path.join(win32_root, 'python_embeded') + +is_win32_standalone_build = os.path.exists(python_embeded_path) and os.path.isdir(python_embeded_path) + +win32_cmd = ''' +.\python_embeded\python.exe -s Fooocus\entry_with_update.py {cmds} +pause +''' def build_launcher(): + if not is_win32_standalone_build: + return + + presets = [None, 'anime', 'realistic'] + + for preset in presets: + win32_cmd_preset = win32_cmd.replace('{cmds}', '' if preset is None else f'--preset {preset}') + bat_path = os.path.join(win32_root, 'run.bat' if preset is None else f'run_{preset}.bat') + if not os.path.exists(bat_path): + with open(bat_path, "w", encoding="utf-8") as f: + f.write(win32_cmd_preset) return diff --git a/launch.py b/launch.py index 0486cbd2..9a148c42 100644 --- a/launch.py +++ b/launch.py @@ -8,7 +8,7 @@ from build_launcher import build_launcher from modules.launch_util import is_installed, run, python, run_pip, requirements_met from modules.model_loader import load_file_from_url from modules.path import modelfile_path, lorafile_path, vae_approx_path, fooocus_expansion_path, \ - checkpoint_downloads, embeddings_path, embeddings_downloads + checkpoint_downloads, embeddings_path, embeddings_downloads, lora_downloads REINSTALL_ALL = False @@ -48,11 +48,6 @@ def prepare_environment(): return -lora_filenames = [ - ('sd_xl_offset_example-lora_1.0.safetensors', - 'https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_offset_example-lora_1.0.safetensors') -] - vae_approx_filenames = [ ('xlvaeapp.pth', 'https://huggingface.co/lllyasviel/misc/resolve/main/xlvaeapp.pth'), ('vaeapp_sd15.pth', 'https://huggingface.co/lllyasviel/misc/resolve/main/vaeapp_sd15.pt'), @@ -66,7 +61,7 @@ def download_models(): load_file_from_url(url=url, model_dir=modelfile_path, file_name=file_name) for file_name, url in embeddings_downloads.items(): load_file_from_url(url=url, model_dir=embeddings_path, file_name=file_name) - for file_name, url in lora_filenames: + for file_name, url in lora_downloads.items(): load_file_from_url(url=url, model_dir=lorafile_path, file_name=file_name) for file_name, url in vae_approx_filenames: load_file_from_url(url=url, model_dir=vae_approx_path, file_name=file_name) diff --git a/modules/path.py b/modules/path.py index 584d1fa8..c278d26b 100644 --- a/modules/path.py +++ b/modules/path.py @@ -80,17 +80,17 @@ def get_config_item_or_set_default(key, default_value, validator, disable_empty_ default_base_model_name = get_config_item_or_set_default( key='default_model', default_value='sd_xl_base_1.0_0.9vae.safetensors', - validator=lambda x: isinstance(x, str) and os.path.exists(os.path.join(modelfile_path, x)) + validator=lambda x: isinstance(x, str) ) default_refiner_model_name = get_config_item_or_set_default( key='default_refiner', default_value='sd_xl_refiner_1.0_0.9vae.safetensors', - validator=lambda x: x == 'None' or (isinstance(x, str) and os.path.exists(os.path.join(modelfile_path, x))) + validator=lambda x: isinstance(x, str) ) default_lora_name = get_config_item_or_set_default( key='default_lora', default_value='sd_xl_offset_example-lora_1.0.safetensors', - validator=lambda x: x == 'None' or (isinstance(x, str) and os.path.exists(os.path.join(lorafile_path, x))) + validator=lambda x: isinstance(x, str) ) default_lora_weight = get_config_item_or_set_default( key='default_lora_weight', @@ -138,6 +138,14 @@ checkpoint_downloads = get_config_item_or_set_default( }, validator=lambda x: isinstance(x, dict) and all(isinstance(k, str) and isinstance(v, str) for k, v in x.items()) ) +lora_downloads = get_config_item_or_set_default( + key='lora_downloads', + default_value={ + 'sd_xl_offset_example-lora_1.0.safetensors': + 'https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_offset_example-lora_1.0.safetensors' + }, + validator=lambda x: isinstance(x, dict) and all(isinstance(k, str) and isinstance(v, str) for k, v in x.items()) +) embeddings_downloads = get_config_item_or_set_default( key='embeddings_downloads', default_value={}, diff --git a/modules/sdxl_styles.py b/modules/sdxl_styles.py index 37d9808b..cdbbf784 100644 --- a/modules/sdxl_styles.py +++ b/modules/sdxl_styles.py @@ -6,6 +6,21 @@ styles = [ "prompt": "cinematic still {prompt} . emotional, harmonious, vignette, highly detailed, high budget, bokeh, cinemascope, moody, epic, gorgeous, film grain, grainy", "negative_prompt": "anime, cartoon, graphic, text, painting, crayon, graphite, abstract, glitch, deformed, mutated, ugly, disfigured" }, + { + "name": "Fooocus Anime", + "prompt": "{prompt}, (masterpiece, best quality, ultra-detailed:1.1), illustration, disheveled hair, detailed eyes, perfect composition, moist skin, intricate details, earrings, by wlop", + "negative_prompt": "longbody, lowres, bad anatomy, bad hands, missing fingers, pubic hair,extra digit, fewer digits, cropped, worst quality, low quality" + }, + { + "name": "Fooocus Realistic", + "prompt": "photograph {prompt}, 50mm . cinematic 4k epic detailed 4k epic detailed photograph shot on kodak detailed cinematic hbo dark moody, 35mm photo, grainy, vignette, vintage, Kodachrome, Lomography, stained, highly detailed, found footage", + "negative_prompt": "Brad Pitt, bokeh, depth of field, blurry, cropped, regular face, saturated, contrast, deformed iris, deformed pupils, semi-realistic, cgi, 3d, render, sketch, cartoon, drawing, anime, text, cropped, out of frame, worst quality, low quality, jpeg artifacts, ugly, duplicate, morbid, mutilated, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, dehydrated, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck" + }, + { + "name": "Fooocus Strong Negative", + "prompt": "", + "negative_prompt": "deformed, bad anatomy, disfigured, poorly drawn face, mutated, extra limb, ugly, poorly drawn hands, missing limb, floating limbs, disconnected limbs, disconnected head, malformed hands, long neck, mutated hands and fingers, bad hands, missing fingers, cropped, worst quality, low quality, mutation, poorly drawn, huge calf, bad hands, fused hand, missing hand, disappearing arms, disappearing thigh, disappearing calf, disappearing legs, missing fingers, fused fingers, abnormal eye proportion, Abnormal hands, abnormal legs, abnormal feet, abnormal fingers, drawing, painting, crayon, sketch, graphite, impressionist, noisy, blurry, soft, deformed, ugly, anime, cartoon, graphic, text, painting, crayon, graphite, abstract, glitch" + }, { "name": "sai-3d-model", "prompt": "professional 3d model {prompt} . octane render, highly detailed, volumetric, dramatic lighting", diff --git a/presets/anime.json b/presets/anime.json index a2a3dc9b..8b8a2085 100644 --- a/presets/anime.json +++ b/presets/anime.json @@ -1,6 +1,6 @@ { - "default_model": "sd_xl_base_1.0_0.9vae.safetensors", - "default_refiner": "sd_xl_refiner_1.0_0.9vae.safetensors", + "default_model": "bluePencilXL_v050.safetensors", + "default_refiner": "DreamShaper_8_pruned.safetensors", "default_lora": "sd_xl_offset_example-lora_1.0.safetensors", "default_lora_weight": 0.5, "default_cfg_scale": 7.0, @@ -8,14 +8,23 @@ "default_scheduler": "karras", "default_styles": [ "Fooocus V2", - "Default (Slightly Cinematic)" + "Fooocus Anime", + "SAI Anime", + "SAI Digital Art", + "SAI Enhance", + "SAI Fantasy Art" ], - "default_negative_prompt": "low quality, bad hands, bad eyes, cropped, missing fingers, extra digit", - "default_positive_prompt": "", + "default_negative_prompt": "(embedding:unaestheticXLv31:0.8), low quality, watermark", + "default_positive_prompt": "1girl, ", "checkpoint_downloads": { - "sd_xl_base_1.0_0.9vae.safetensors": "https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0_0.9vae.safetensors", - "sd_xl_refiner_1.0_0.9vae.safetensors": "https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/resolve/main/sd_xl_refiner_1.0_0.9vae.safetensors" + "bluePencilXL_v050.safetensors": "https://huggingface.co/lllyasviel/fav_models/resolve/main/fav/bluePencilXL_v050.safetensors", + "DreamShaper_8_pruned.safetensors": "https://huggingface.co/Lykon/DreamShaper/resolve/main/DreamShaper_8_pruned.safetensors" }, - "embeddings_downloads": {}, - "default_aspect_ratio": "1152*896" + "embeddings_downloads": { + "unaestheticXLv31.safetensors": "https://huggingface.co/lllyasviel/fav_models/resolve/main/fav/unaestheticXLv31.safetensors" + }, + "default_aspect_ratio": "896*1152", + "lora_downloads": { + "sd_xl_offset_example-lora_1.0.safetensors": "https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_offset_example-lora_1.0.safetensors" + } } diff --git a/presets/realistic.json b/presets/realistic.json index a2a3dc9b..5d0c5cf2 100644 --- a/presets/realistic.json +++ b/presets/realistic.json @@ -1,21 +1,24 @@ { - "default_model": "sd_xl_base_1.0_0.9vae.safetensors", - "default_refiner": "sd_xl_refiner_1.0_0.9vae.safetensors", - "default_lora": "sd_xl_offset_example-lora_1.0.safetensors", - "default_lora_weight": 0.5, - "default_cfg_scale": 7.0, + "default_model": "realisticStockPhoto_v10.safetensors", + "default_refiner": "", + "default_lora": "SDXL_FILM_PHOTOGRAPHY_STYLE_BetaV0.4.safetensors", + "default_lora_weight": 0.25, + "default_cfg_scale": 3.0, "default_sampler": "dpmpp_2m_sde_gpu", "default_scheduler": "karras", "default_styles": [ "Fooocus V2", - "Default (Slightly Cinematic)" + "Fooocus Realistic", + "Fooocus Strong Negative" ], - "default_negative_prompt": "low quality, bad hands, bad eyes, cropped, missing fingers, extra digit", + "default_negative_prompt": "unrealistic, saturated, high contrast, big nose, painting, drawing, sketch, cartoon, anime, manga, render, CG, 3d, watermark, signature, label", "default_positive_prompt": "", "checkpoint_downloads": { - "sd_xl_base_1.0_0.9vae.safetensors": "https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0_0.9vae.safetensors", - "sd_xl_refiner_1.0_0.9vae.safetensors": "https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/resolve/main/sd_xl_refiner_1.0_0.9vae.safetensors" + "realisticStockPhoto_v10.safetensors": "https://huggingface.co/lllyasviel/fav_models/resolve/main/fav/realisticStockPhoto_v10.safetensors" }, "embeddings_downloads": {}, - "default_aspect_ratio": "1152*896" + "default_aspect_ratio": "896*1152", + "lora_downloads": { + "SDXL_FILM_PHOTOGRAPHY_STYLE_BetaV0.4.safetensors": "https://huggingface.co/lllyasviel/fav_models/resolve/main/fav/SDXL_FILM_PHOTOGRAPHY_STYLE_BetaV0.4.safetensors" + } } diff --git a/presets/sdxl.json b/presets/sdxl.json index a2a3dc9b..141ca04c 100644 --- a/presets/sdxl.json +++ b/presets/sdxl.json @@ -17,5 +17,8 @@ "sd_xl_refiner_1.0_0.9vae.safetensors": "https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/resolve/main/sd_xl_refiner_1.0_0.9vae.safetensors" }, "embeddings_downloads": {}, - "default_aspect_ratio": "1152*896" + "default_aspect_ratio": "1152*896", + "lora_downloads": { + "sd_xl_offset_example-lora_1.0.safetensors": "https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_offset_example-lora_1.0.safetensors" + } }