mirror of
https://github.com/lllyasviel/Fooocus.git
synced 2026-08-16 13:13:16 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4945fc9962 | ||
|
|
6db14acf8e | ||
|
|
41e88a4e8d | ||
|
|
4f4d23f4e3 | ||
|
|
9c30961efd |
+1
-1
@@ -1 +1 @@
|
|||||||
version = '2.2.0-rc1'
|
version = '2.2.0'
|
||||||
|
|||||||
+3
-2
@@ -474,6 +474,7 @@ with open(config_example_path, "w", encoding="utf-8") as json_file:
|
|||||||
|
|
||||||
model_filenames = []
|
model_filenames = []
|
||||||
lora_filenames = []
|
lora_filenames = []
|
||||||
|
sdxl_lcm_lora = 'sdxl_lcm_lora.safetensors'
|
||||||
|
|
||||||
|
|
||||||
def get_model_filenames(folder_paths, name_filter=None):
|
def get_model_filenames(folder_paths, name_filter=None):
|
||||||
@@ -533,9 +534,9 @@ def downloading_sdxl_lcm_lora():
|
|||||||
load_file_from_url(
|
load_file_from_url(
|
||||||
url='https://huggingface.co/lllyasviel/misc/resolve/main/sdxl_lcm_lora.safetensors',
|
url='https://huggingface.co/lllyasviel/misc/resolve/main/sdxl_lcm_lora.safetensors',
|
||||||
model_dir=paths_loras[0],
|
model_dir=paths_loras[0],
|
||||||
file_name='sdxl_lcm_lora.safetensors'
|
file_name=sdxl_lcm_lora
|
||||||
)
|
)
|
||||||
return 'sdxl_lcm_lora.safetensors'
|
return sdxl_lcm_lora
|
||||||
|
|
||||||
|
|
||||||
def downloading_controlnet_canny():
|
def downloading_controlnet_canny():
|
||||||
|
|||||||
@@ -379,7 +379,8 @@ class A1111MetadataParser(MetadataParser):
|
|||||||
|
|
||||||
if 'lora_hashes' in data:
|
if 'lora_hashes' in data:
|
||||||
lora_filenames = modules.config.lora_filenames.copy()
|
lora_filenames = modules.config.lora_filenames.copy()
|
||||||
lora_filenames.remove(modules.config.downloading_sdxl_lcm_lora())
|
if modules.config.sdxl_lcm_lora in lora_filenames:
|
||||||
|
lora_filenames.remove(modules.config.sdxl_lcm_lora)
|
||||||
for li, lora in enumerate(data['lora_hashes'].split(', ')):
|
for li, lora in enumerate(data['lora_hashes'].split(', ')):
|
||||||
lora_name, lora_hash, lora_weight = lora.split(': ')
|
lora_name, lora_hash, lora_weight = lora.split(': ')
|
||||||
for filename in lora_filenames:
|
for filename in lora_filenames:
|
||||||
@@ -460,7 +461,8 @@ class FooocusMetadataParser(MetadataParser):
|
|||||||
def parse_json(self, metadata: dict) -> dict:
|
def parse_json(self, metadata: dict) -> dict:
|
||||||
model_filenames = modules.config.model_filenames.copy()
|
model_filenames = modules.config.model_filenames.copy()
|
||||||
lora_filenames = modules.config.lora_filenames.copy()
|
lora_filenames = modules.config.lora_filenames.copy()
|
||||||
lora_filenames.remove(modules.config.downloading_sdxl_lcm_lora())
|
if modules.config.sdxl_lcm_lora in lora_filenames:
|
||||||
|
lora_filenames.remove(modules.config.sdxl_lcm_lora)
|
||||||
|
|
||||||
for key, value in metadata.items():
|
for key, value in metadata.items():
|
||||||
if value in ['', 'None']:
|
if value in ['', 'None']:
|
||||||
|
|||||||
@@ -297,7 +297,7 @@ In both ways the access is unauthenticated by default. You can add basic authent
|
|||||||
|
|
||||||
The below things are already inside the software, and **users do not need to do anything about these**.
|
The below things are already inside the software, and **users do not need to do anything about these**.
|
||||||
|
|
||||||
1. GPT2-based [prompt expansion as a dynamic style "Fooocus V2".](https://github.com/lllyasviel/Fooocus/discussions/117#raw) (similar to Midjourney's hidden pre-processsing and "raw" mode, or the LeonardoAI's Prompt Magic).
|
1. GPT2-based [prompt expansion as a dynamic style "Fooocus V2".](https://github.com/lllyasviel/Fooocus/discussions/117#raw) (similar to Midjourney's hidden pre-processing and "raw" mode, or the LeonardoAI's Prompt Magic).
|
||||||
2. Native refiner swap inside one single k-sampler. The advantage is that the refiner model can now reuse the base model's momentum (or ODE's history parameters) collected from k-sampling to achieve more coherent sampling. In Automatic1111's high-res fix and ComfyUI's node system, the base model and refiner use two independent k-samplers, which means the momentum is largely wasted, and the sampling continuity is broken. Fooocus uses its own advanced k-diffusion sampling that ensures seamless, native, and continuous swap in a refiner setup. (Update Aug 13: Actually, I discussed this with Automatic1111 several days ago, and it seems that the “native refiner swap inside one single k-sampler” is [merged]( https://github.com/AUTOMATIC1111/stable-diffusion-webui/pull/12371) into the dev branch of webui. Great!)
|
2. Native refiner swap inside one single k-sampler. The advantage is that the refiner model can now reuse the base model's momentum (or ODE's history parameters) collected from k-sampling to achieve more coherent sampling. In Automatic1111's high-res fix and ComfyUI's node system, the base model and refiner use two independent k-samplers, which means the momentum is largely wasted, and the sampling continuity is broken. Fooocus uses its own advanced k-diffusion sampling that ensures seamless, native, and continuous swap in a refiner setup. (Update Aug 13: Actually, I discussed this with Automatic1111 several days ago, and it seems that the “native refiner swap inside one single k-sampler” is [merged]( https://github.com/AUTOMATIC1111/stable-diffusion-webui/pull/12371) into the dev branch of webui. Great!)
|
||||||
3. Negative ADM guidance. Because the highest resolution level of XL Base does not have cross attentions, the positive and negative signals for XL's highest resolution level cannot receive enough contrasts during the CFG sampling, causing the results to look a bit plastic or overly smooth in certain cases. Fortunately, since the XL's highest resolution level is still conditioned on image aspect ratios (ADM), we can modify the adm on the positive/negative side to compensate for the lack of CFG contrast in the highest resolution level. (Update Aug 16, the IOS App [Draw Things](https://apps.apple.com/us/app/draw-things-ai-generation/id6444050820) will support Negative ADM Guidance. Great!)
|
3. Negative ADM guidance. Because the highest resolution level of XL Base does not have cross attentions, the positive and negative signals for XL's highest resolution level cannot receive enough contrasts during the CFG sampling, causing the results to look a bit plastic or overly smooth in certain cases. Fortunately, since the XL's highest resolution level is still conditioned on image aspect ratios (ADM), we can modify the adm on the positive/negative side to compensate for the lack of CFG contrast in the highest resolution level. (Update Aug 16, the IOS App [Draw Things](https://apps.apple.com/us/app/draw-things-ai-generation/id6444050820) will support Negative ADM Guidance. Great!)
|
||||||
4. We implemented a carefully tuned variation of Section 5.1 of ["Improving Sample Quality of Diffusion Models Using Self-Attention Guidance"](https://arxiv.org/pdf/2210.00939.pdf). The weight is set to very low, but this is Fooocus's final guarantee to make sure that the XL will never yield an overly smooth or plastic appearance (examples [here](https://github.com/lllyasviel/Fooocus/discussions/117#sharpness)). This can almost eliminate all cases for which XL still occasionally produces overly smooth results, even with negative ADM guidance. (Update 2023 Aug 18, the Gaussian kernel of SAG is changed to an anisotropic kernel for better structure preservation and fewer artifacts.)
|
4. We implemented a carefully tuned variation of Section 5.1 of ["Improving Sample Quality of Diffusion Models Using Self-Attention Guidance"](https://arxiv.org/pdf/2210.00939.pdf). The weight is set to very low, but this is Fooocus's final guarantee to make sure that the XL will never yield an overly smooth or plastic appearance (examples [here](https://github.com/lllyasviel/Fooocus/discussions/117#sharpness)). This can almost eliminate all cases for which XL still occasionally produces overly smooth results, even with negative ADM guidance. (Update 2023 Aug 18, the Gaussian kernel of SAG is changed to an anisotropic kernel for better structure preservation and fewer artifacts.)
|
||||||
|
|||||||
+9
-1
@@ -1,4 +1,12 @@
|
|||||||
# 2.1.865
|
# [2.2.0](https://github.com/lllyasviel/Fooocus/releases/tag/2.2.0)
|
||||||
|
|
||||||
|
* Isolate every image generation to truly allow multi-user usage
|
||||||
|
* Add array support, changes the main prompt when increasing the image number. Syntax: `[[red, green, blue]] flower`
|
||||||
|
* Add optional metadata to images, allowing you to regenerate and modify them later with the same parameters
|
||||||
|
* Now supports native PNG, JPG and WEBP image generation
|
||||||
|
* Add Docker support
|
||||||
|
|
||||||
|
# [2.1.865](https://github.com/lllyasviel/Fooocus/releases/tag/2.1.865)
|
||||||
|
|
||||||
* Various bugfixes
|
* Various bugfixes
|
||||||
* Add authentication to --listen
|
* Add authentication to --listen
|
||||||
|
|||||||
@@ -521,6 +521,7 @@ with shared.gradio_root:
|
|||||||
results += [gr.update(choices=['None'] + modules.config.model_filenames)]
|
results += [gr.update(choices=['None'] + modules.config.model_filenames)]
|
||||||
for i in range(modules.config.default_max_lora_number):
|
for i in range(modules.config.default_max_lora_number):
|
||||||
results += [gr.update(interactive=True), gr.update(choices=['None'] + modules.config.lora_filenames), gr.update()]
|
results += [gr.update(interactive=True), gr.update(choices=['None'] + modules.config.lora_filenames), gr.update()]
|
||||||
|
return results
|
||||||
|
|
||||||
model_refresh.click(model_refresh_clicked, [], [base_model, refiner_model] + lora_ctrls,
|
model_refresh.click(model_refresh_clicked, [], [base_model, refiner_model] + lora_ctrls,
|
||||||
queue=False, show_progress=False)
|
queue=False, show_progress=False)
|
||||||
|
|||||||
Reference in New Issue
Block a user