mirror of
https://github.com/lllyasviel/Fooocus.git
synced 2026-08-16 13:13:16 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c0e11c3451 | ||
|
|
eb0b4d51ef | ||
|
|
cce73d28b4 | ||
|
|
2f6ebbf876 | ||
|
|
ad158450e3 | ||
|
|
48b1324a26 | ||
|
|
986ab451cf | ||
|
|
7b5bced6c2 | ||
|
|
1f9a072d66 | ||
|
|
b0df0d57f6 | ||
|
|
81107298a8 | ||
|
|
f7bb578a14 | ||
|
|
f308489440 | ||
|
|
7a6b46f363 |
+1
-1
@@ -1 +1 @@
|
|||||||
version = '2.1.851'
|
version = '2.1.856'
|
||||||
|
|||||||
+11
-8
@@ -34,6 +34,7 @@ def worker():
|
|||||||
import modules.advanced_parameters as advanced_parameters
|
import modules.advanced_parameters as advanced_parameters
|
||||||
import extras.ip_adapter as ip_adapter
|
import extras.ip_adapter as ip_adapter
|
||||||
import extras.face_crop
|
import extras.face_crop
|
||||||
|
import fooocus_version
|
||||||
|
|
||||||
from modules.sdxl_styles import apply_style, apply_wildcards, fooocus_expansion
|
from modules.sdxl_styles import apply_style, apply_wildcards, fooocus_expansion
|
||||||
from modules.private_logger import log
|
from modules.private_logger import log
|
||||||
@@ -276,9 +277,10 @@ def worker():
|
|||||||
inpaint_image = HWC3(inpaint_image)
|
inpaint_image = HWC3(inpaint_image)
|
||||||
if isinstance(inpaint_image, np.ndarray) and isinstance(inpaint_mask, np.ndarray) \
|
if isinstance(inpaint_image, np.ndarray) and isinstance(inpaint_mask, np.ndarray) \
|
||||||
and (np.any(inpaint_mask > 127) or len(outpaint_selections) > 0):
|
and (np.any(inpaint_mask > 127) or len(outpaint_selections) > 0):
|
||||||
|
progressbar(async_task, 1, 'Downloading upscale models ...')
|
||||||
|
modules.config.downloading_upscale_model()
|
||||||
if inpaint_parameterized:
|
if inpaint_parameterized:
|
||||||
progressbar(async_task, 1, 'Downloading inpainter ...')
|
progressbar(async_task, 1, 'Downloading inpainter ...')
|
||||||
modules.config.downloading_upscale_model()
|
|
||||||
inpaint_head_model_path, inpaint_patch_model_path = modules.config.downloading_inpaint_models(
|
inpaint_head_model_path, inpaint_patch_model_path = modules.config.downloading_inpaint_models(
|
||||||
advanced_parameters.inpaint_engine)
|
advanced_parameters.inpaint_engine)
|
||||||
base_model_additional_loras += [(inpaint_patch_model_path, 1.0)]
|
base_model_additional_loras += [(inpaint_patch_model_path, 1.0)]
|
||||||
@@ -396,8 +398,8 @@ def worker():
|
|||||||
uc=None,
|
uc=None,
|
||||||
positive_top_k=len(positive_basic_workloads),
|
positive_top_k=len(positive_basic_workloads),
|
||||||
negative_top_k=len(negative_basic_workloads),
|
negative_top_k=len(negative_basic_workloads),
|
||||||
log_positive_prompt='; '.join([task_prompt] + task_extra_positive_prompts),
|
log_positive_prompt='\n'.join([task_prompt] + task_extra_positive_prompts),
|
||||||
log_negative_prompt='; '.join([task_negative_prompt] + task_extra_negative_prompts),
|
log_negative_prompt='\n'.join([task_negative_prompt] + task_extra_negative_prompts),
|
||||||
))
|
))
|
||||||
|
|
||||||
if use_expansion:
|
if use_expansion:
|
||||||
@@ -492,7 +494,7 @@ def worker():
|
|||||||
|
|
||||||
if direct_return:
|
if direct_return:
|
||||||
d = [('Upscale (Fast)', '2x')]
|
d = [('Upscale (Fast)', '2x')]
|
||||||
log(uov_input_image, d, single_line_number=1)
|
log(uov_input_image, d)
|
||||||
yield_result(async_task, uov_input_image, do_not_show_finished_images=True)
|
yield_result(async_task, uov_input_image, do_not_show_finished_images=True)
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -774,12 +776,13 @@ def worker():
|
|||||||
('Refiner Switch', refiner_switch),
|
('Refiner Switch', refiner_switch),
|
||||||
('Sampler', sampler_name),
|
('Sampler', sampler_name),
|
||||||
('Scheduler', scheduler_name),
|
('Scheduler', scheduler_name),
|
||||||
('Seed', task['task_seed'])
|
('Seed', task['task_seed']),
|
||||||
]
|
]
|
||||||
for n, w in loras:
|
for li, (n, w) in enumerate(loras):
|
||||||
if n != 'None':
|
if n != 'None':
|
||||||
d.append((f'LoRA [{n}] weight', w))
|
d.append((f'LoRA {li + 1}', f'{n} : {w}'))
|
||||||
log(x, d, single_line_number=3)
|
d.append(('Version', 'v' + fooocus_version.version))
|
||||||
|
log(x, d)
|
||||||
|
|
||||||
yield_result(async_task, imgs, do_not_show_finished_images=len(tasks) == 1)
|
yield_result(async_task, imgs, do_not_show_finished_images=len(tasks) == 1)
|
||||||
except ldm_patched.modules.model_management.InterruptProcessingException as e:
|
except ldm_patched.modules.model_management.InterruptProcessingException as e:
|
||||||
|
|||||||
+6
-1
@@ -243,10 +243,15 @@ default_advanced_checkbox = get_config_item_or_set_default(
|
|||||||
default_value=False,
|
default_value=False,
|
||||||
validator=lambda x: isinstance(x, bool)
|
validator=lambda x: isinstance(x, bool)
|
||||||
)
|
)
|
||||||
|
default_max_image_number = get_config_item_or_set_default(
|
||||||
|
key='default_max_image_number',
|
||||||
|
default_value=32,
|
||||||
|
validator=lambda x: isinstance(x, int) and x >= 1
|
||||||
|
)
|
||||||
default_image_number = get_config_item_or_set_default(
|
default_image_number = get_config_item_or_set_default(
|
||||||
key='default_image_number',
|
key='default_image_number',
|
||||||
default_value=2,
|
default_value=2,
|
||||||
validator=lambda x: isinstance(x, int) and 1 <= x <= 32
|
validator=lambda x: isinstance(x, int) and 1 <= x <= default_max_image_number
|
||||||
)
|
)
|
||||||
checkpoint_downloads = get_config_item_or_set_default(
|
checkpoint_downloads = get_config_item_or_set_default(
|
||||||
key='checkpoint_downloads',
|
key='checkpoint_downloads',
|
||||||
|
|||||||
@@ -0,0 +1,148 @@
|
|||||||
|
import json
|
||||||
|
import gradio as gr
|
||||||
|
import modules.config
|
||||||
|
|
||||||
|
|
||||||
|
def load_parameter_button_click(raw_prompt_txt, is_generating):
|
||||||
|
loaded_parameter_dict = json.loads(raw_prompt_txt)
|
||||||
|
assert isinstance(loaded_parameter_dict, dict)
|
||||||
|
|
||||||
|
results = [True, 1]
|
||||||
|
|
||||||
|
try:
|
||||||
|
h = loaded_parameter_dict.get('Prompt', None)
|
||||||
|
assert isinstance(h, str)
|
||||||
|
results.append(h)
|
||||||
|
except:
|
||||||
|
results.append(gr.update())
|
||||||
|
|
||||||
|
try:
|
||||||
|
h = loaded_parameter_dict.get('Negative Prompt', None)
|
||||||
|
assert isinstance(h, str)
|
||||||
|
results.append(h)
|
||||||
|
except:
|
||||||
|
results.append(gr.update())
|
||||||
|
|
||||||
|
try:
|
||||||
|
h = loaded_parameter_dict.get('Styles', None)
|
||||||
|
h = eval(h)
|
||||||
|
assert isinstance(h, list)
|
||||||
|
results.append(h)
|
||||||
|
except:
|
||||||
|
results.append(gr.update())
|
||||||
|
|
||||||
|
try:
|
||||||
|
h = loaded_parameter_dict.get('Performance', None)
|
||||||
|
assert isinstance(h, str)
|
||||||
|
results.append(h)
|
||||||
|
except:
|
||||||
|
results.append(gr.update())
|
||||||
|
|
||||||
|
try:
|
||||||
|
h = loaded_parameter_dict.get('Resolution', None)
|
||||||
|
width, height = eval(h)
|
||||||
|
formatted = modules.config.add_ratio(f'{width}*{height}')
|
||||||
|
if formatted in modules.config.available_aspect_ratios:
|
||||||
|
results.append(formatted)
|
||||||
|
results.append(-1)
|
||||||
|
results.append(-1)
|
||||||
|
else:
|
||||||
|
results.append(gr.update())
|
||||||
|
results.append(width)
|
||||||
|
results.append(height)
|
||||||
|
except:
|
||||||
|
results.append(gr.update())
|
||||||
|
results.append(gr.update())
|
||||||
|
results.append(gr.update())
|
||||||
|
|
||||||
|
try:
|
||||||
|
h = loaded_parameter_dict.get('Sharpness', None)
|
||||||
|
assert h is not None
|
||||||
|
h = float(h)
|
||||||
|
results.append(h)
|
||||||
|
except:
|
||||||
|
results.append(gr.update())
|
||||||
|
|
||||||
|
try:
|
||||||
|
h = loaded_parameter_dict.get('Guidance Scale', None)
|
||||||
|
assert h is not None
|
||||||
|
h = float(h)
|
||||||
|
results.append(h)
|
||||||
|
except:
|
||||||
|
results.append(gr.update())
|
||||||
|
|
||||||
|
try:
|
||||||
|
h = loaded_parameter_dict.get('ADM Guidance', None)
|
||||||
|
p, n, e = eval(h)
|
||||||
|
results.append(float(p))
|
||||||
|
results.append(float(n))
|
||||||
|
results.append(float(e))
|
||||||
|
except:
|
||||||
|
results.append(gr.update())
|
||||||
|
results.append(gr.update())
|
||||||
|
results.append(gr.update())
|
||||||
|
|
||||||
|
try:
|
||||||
|
h = loaded_parameter_dict.get('Base Model', None)
|
||||||
|
assert isinstance(h, str)
|
||||||
|
results.append(h)
|
||||||
|
except:
|
||||||
|
results.append(gr.update())
|
||||||
|
|
||||||
|
try:
|
||||||
|
h = loaded_parameter_dict.get('Refiner Model', None)
|
||||||
|
assert isinstance(h, str)
|
||||||
|
results.append(h)
|
||||||
|
except:
|
||||||
|
results.append(gr.update())
|
||||||
|
|
||||||
|
try:
|
||||||
|
h = loaded_parameter_dict.get('Refiner Switch', None)
|
||||||
|
assert h is not None
|
||||||
|
h = float(h)
|
||||||
|
results.append(h)
|
||||||
|
except:
|
||||||
|
results.append(gr.update())
|
||||||
|
|
||||||
|
try:
|
||||||
|
h = loaded_parameter_dict.get('Sampler', None)
|
||||||
|
assert isinstance(h, str)
|
||||||
|
results.append(h)
|
||||||
|
except:
|
||||||
|
results.append(gr.update())
|
||||||
|
|
||||||
|
try:
|
||||||
|
h = loaded_parameter_dict.get('Scheduler', None)
|
||||||
|
assert isinstance(h, str)
|
||||||
|
results.append(h)
|
||||||
|
except:
|
||||||
|
results.append(gr.update())
|
||||||
|
|
||||||
|
try:
|
||||||
|
h = loaded_parameter_dict.get('Seed', None)
|
||||||
|
assert h is not None
|
||||||
|
h = int(h)
|
||||||
|
results.append(False)
|
||||||
|
results.append(h)
|
||||||
|
except:
|
||||||
|
results.append(gr.update())
|
||||||
|
results.append(gr.update())
|
||||||
|
|
||||||
|
if is_generating:
|
||||||
|
results.append(gr.update())
|
||||||
|
else:
|
||||||
|
results.append(gr.update(visible=True))
|
||||||
|
|
||||||
|
results.append(gr.update(visible=False))
|
||||||
|
|
||||||
|
for i in range(1, 6):
|
||||||
|
try:
|
||||||
|
n, w = loaded_parameter_dict.get(f'LoRA {i}').split(' : ')
|
||||||
|
w = float(w)
|
||||||
|
results.append(n)
|
||||||
|
results.append(w)
|
||||||
|
except:
|
||||||
|
results.append(gr.update())
|
||||||
|
results.append(gr.update())
|
||||||
|
|
||||||
|
return results
|
||||||
+69
-21
@@ -1,6 +1,8 @@
|
|||||||
import os
|
import os
|
||||||
import args_manager
|
import args_manager
|
||||||
import modules.config
|
import modules.config
|
||||||
|
import json
|
||||||
|
import urllib.parse
|
||||||
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
from modules.util import generate_temp_filename
|
from modules.util import generate_temp_filename
|
||||||
@@ -16,7 +18,7 @@ def get_current_html_path():
|
|||||||
return html_name
|
return html_name
|
||||||
|
|
||||||
|
|
||||||
def log(img, dic, single_line_number=3):
|
def log(img, dic):
|
||||||
if args_manager.args.disable_image_log:
|
if args_manager.args.disable_image_log:
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -25,36 +27,82 @@ def log(img, dic, single_line_number=3):
|
|||||||
Image.fromarray(img).save(local_temp_filename)
|
Image.fromarray(img).save(local_temp_filename)
|
||||||
html_name = os.path.join(os.path.dirname(local_temp_filename), 'log.html')
|
html_name = os.path.join(os.path.dirname(local_temp_filename), 'log.html')
|
||||||
|
|
||||||
existing_log = log_cache.get(html_name, None)
|
css_styles = (
|
||||||
|
"<style>"
|
||||||
|
"body { background-color: #121212; color: #E0E0E0; } "
|
||||||
|
"a { color: #BB86FC; } "
|
||||||
|
".metadata { border-collapse: collapse; width: 100%; } "
|
||||||
|
".metadata .key { width: 15%; } "
|
||||||
|
".metadata .value { width: 85%; font-weight: bold; } "
|
||||||
|
".metadata th, .metadata td { border: 1px solid #4d4d4d; padding: 4px; } "
|
||||||
|
".image-container img { height: auto; max-width: 512px; display: block; padding-right:10px; } "
|
||||||
|
".image-container div { text-align: center; padding: 4px; } "
|
||||||
|
"hr { border-color: gray; } "
|
||||||
|
"button { background-color: black; color: white; border: 1px solid grey; border-radius: 5px; padding: 5px 10px; text-align: center; display: inline-block; font-size: 16px; cursor: pointer; }"
|
||||||
|
"button:hover {background-color: grey; color: black;}"
|
||||||
|
"</style>"
|
||||||
|
)
|
||||||
|
|
||||||
if existing_log is None:
|
js = (
|
||||||
|
"""<script>
|
||||||
|
function to_clipboard(txt) {
|
||||||
|
txt = decodeURIComponent(txt);
|
||||||
|
if (navigator.clipboard && navigator.permissions) {
|
||||||
|
navigator.clipboard.writeText(txt)
|
||||||
|
} else {
|
||||||
|
const textArea = document.createElement('textArea')
|
||||||
|
textArea.value = txt
|
||||||
|
textArea.style.width = 0
|
||||||
|
textArea.style.position = 'fixed'
|
||||||
|
textArea.style.left = '-999px'
|
||||||
|
textArea.style.top = '10px'
|
||||||
|
textArea.setAttribute('readonly', 'readonly')
|
||||||
|
document.body.appendChild(textArea)
|
||||||
|
|
||||||
|
textArea.select()
|
||||||
|
document.execCommand('copy')
|
||||||
|
document.body.removeChild(textArea)
|
||||||
|
}
|
||||||
|
alert('Copied to Clipboard!\\nPaste to prompt area to load parameters.\\nCurrent clipboard content is:\\n\\n' + txt);
|
||||||
|
}
|
||||||
|
</script>"""
|
||||||
|
)
|
||||||
|
|
||||||
|
begin_part = f"<html><head><title>Fooocus Log {date_string}</title>{css_styles}</head><body>{js}<p>Fooocus Log {date_string} (private)</p>\n<p>All images are clean, without any hidden data/meta, and safe to share with others.</p><!--fooocus-log-split-->\n\n"
|
||||||
|
end_part = f'\n<!--fooocus-log-split--></body></html>'
|
||||||
|
|
||||||
|
middle_part = log_cache.get(html_name, "")
|
||||||
|
|
||||||
|
if middle_part == "":
|
||||||
if os.path.exists(html_name):
|
if os.path.exists(html_name):
|
||||||
existing_log = open(html_name, encoding='utf-8').read()
|
existing_split = open(html_name, 'r', encoding='utf-8').read().split('<!--fooocus-log-split-->')
|
||||||
|
if len(existing_split) == 3:
|
||||||
|
middle_part = existing_split[1]
|
||||||
else:
|
else:
|
||||||
existing_log = f'<p>Fooocus Log {date_string} (private)</p>\n<p>All images do not contain any hidden data.</p>'
|
middle_part = existing_split[0]
|
||||||
|
|
||||||
div_name = only_name.replace('.', '_')
|
div_name = only_name.replace('.', '_')
|
||||||
item = f'<div id="{div_name}">\n'
|
item = f"<div id=\"{div_name}\" class=\"image-container\"><hr><table><tr>\n"
|
||||||
item += "<table><tr>"
|
item += f"<td><a href=\"{only_name}\" target=\"_blank\"><img src='{only_name}' onerror=\"this.closest('.image-container').style.display='none';\" loading='lazy'></img></a><div>{only_name}</div></td>"
|
||||||
item += f"<td><img src=\"{only_name}\" width=auto height=100% loading=lazy style=\"height:auto;max-width:512px\" onerror=\"document.getElementById('{div_name}').style.display = 'none';\"></img></p></td>"
|
item += "<td><table class='metadata'>"
|
||||||
item += f"<td style=\"padding-left:10px;\"><p>{only_name}</p>\n"
|
for key, value in dic:
|
||||||
for i, (k, v) in enumerate(dic):
|
value_txt = str(value).replace('\n', ' </br> ')
|
||||||
if i < single_line_number:
|
item += f"<tr><td class='key'>{key}</td><td class='value'>{value_txt}</td></tr>\n"
|
||||||
item += f"<p>{k}: <b>{v}</b></p>\n"
|
item += "</table>"
|
||||||
else:
|
|
||||||
if (i - single_line_number) % 2 == 0:
|
js_txt = urllib.parse.quote(json.dumps({k: v for k, v in dic}, indent=0), safe='')
|
||||||
item += f"<p>{k}: <b>{v}</b>, "
|
item += f"</br><button onclick=\"to_clipboard('{js_txt}')\">Copy to Clipboard</button>"
|
||||||
else:
|
|
||||||
item += f"{k}: <b>{v}</b></p>\n"
|
|
||||||
item += "</td>"
|
item += "</td>"
|
||||||
item += "</tr></table><hr></div>\n"
|
item += "</tr></table></div>\n\n"
|
||||||
existing_log = item + existing_log
|
|
||||||
|
middle_part = item + middle_part
|
||||||
|
|
||||||
with open(html_name, 'w', encoding='utf-8') as f:
|
with open(html_name, 'w', encoding='utf-8') as f:
|
||||||
f.write(existing_log)
|
f.write(begin_part + middle_part + end_part)
|
||||||
|
|
||||||
print(f'Image generated with private log at: {html_name}')
|
print(f'Image generated with private log at: {html_name}')
|
||||||
|
|
||||||
log_cache[html_name] = existing_log
|
log_cache[html_name] = middle_part
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -31,7 +31,8 @@ for x in ['sdxl_styles_fooocus.json',
|
|||||||
'sdxl_styles_sai.json',
|
'sdxl_styles_sai.json',
|
||||||
'sdxl_styles_mre.json',
|
'sdxl_styles_mre.json',
|
||||||
'sdxl_styles_twri.json',
|
'sdxl_styles_twri.json',
|
||||||
'sdxl_styles_diva.json']:
|
'sdxl_styles_diva.json',
|
||||||
|
'sdxl_styles_marc_k3nt3l.json']:
|
||||||
if x in styles_files:
|
if x in styles_files:
|
||||||
styles_files.remove(x)
|
styles_files.remove(x)
|
||||||
styles_files.append(x)
|
styles_files.append(x)
|
||||||
|
|||||||
@@ -15,10 +15,13 @@ def try_load_sorted_styles(style_names, default_selected):
|
|||||||
try:
|
try:
|
||||||
if os.path.exists('sorted_styles.json'):
|
if os.path.exists('sorted_styles.json'):
|
||||||
with open('sorted_styles.json', 'rt', encoding='utf-8') as fp:
|
with open('sorted_styles.json', 'rt', encoding='utf-8') as fp:
|
||||||
sorted_styles = json.load(fp)
|
sorted_styles = []
|
||||||
if len(sorted_styles) == len(all_styles):
|
for x in json.load(fp):
|
||||||
if all(x in all_styles for x in sorted_styles):
|
if x in all_styles:
|
||||||
if all(x in sorted_styles for x in all_styles):
|
sorted_styles.append(x)
|
||||||
|
for x in all_styles:
|
||||||
|
if x not in sorted_styles:
|
||||||
|
sorted_styles.append(x)
|
||||||
all_styles = sorted_styles
|
all_styles = sorted_styles
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print('Load style sorting failed.')
|
print('Load style sorting failed.')
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ Fooocus has simplified the installation. Between pressing "download" and generat
|
|||||||
|
|
||||||
`[1]` David Holz, 2019.
|
`[1]` David Holz, 2019.
|
||||||
|
|
||||||
|
**Recently many fake websites exist on Google when you search “fooocus”. Do not trust those – here is the only official source of Fooocus.**
|
||||||
|
|
||||||
## [Installing Fooocus](#download)
|
## [Installing Fooocus](#download)
|
||||||
|
|
||||||
# Moving from Midjourney to Fooocus
|
# Moving from Midjourney to Fooocus
|
||||||
@@ -36,7 +38,7 @@ Using Fooocus is as easy as (probably easier than) Midjourney – but this does
|
|||||||
|
|
||||||
| Midjourney | Fooocus |
|
| Midjourney | Fooocus |
|
||||||
| - | - |
|
| - | - |
|
||||||
| High-quality text-to-image without needing much prompt engineering or parameter tuning. <br> (Unknown method) | High-quality text-to-image without needing much prompt engineering or parameter tuning. <br> (Fooocus has offline GPT-2 based prompt processing engine and lots of sampling improvements so that results are always beautiful, no matter your prompt is as short as “house in garden” or as long as 1000 words) |
|
| High-quality text-to-image without needing much prompt engineering or parameter tuning. <br> (Unknown method) | High-quality text-to-image without needing much prompt engineering or parameter tuning. <br> (Fooocus has an offline GPT-2 based prompt processing engine and lots of sampling improvements so that results are always beautiful, no matter if your prompt is as short as “house in garden” or as long as 1000 words) |
|
||||||
| V1 V2 V3 V4 | Input Image -> Upscale or Variation -> Vary (Subtle) / Vary (Strong)|
|
| V1 V2 V3 V4 | Input Image -> Upscale or Variation -> Vary (Subtle) / Vary (Strong)|
|
||||||
| U1 U2 U3 U4 | Input Image -> Upscale or Variation -> Upscale (1.5x) / Upscale (2x) |
|
| U1 U2 U3 U4 | Input Image -> Upscale or Variation -> Upscale (1.5x) / Upscale (2x) |
|
||||||
| Inpaint / Up / Down / Left / Right (Pan) | Input Image -> Inpaint or Outpaint -> Inpaint / Up / Down / Left / Right <br> (Fooocus uses its own inpaint algorithm and inpaint models so that results are more satisfying than all other software that uses standard SDXL inpaint method/model) |
|
| Inpaint / Up / Down / Left / Right (Pan) | Input Image -> Inpaint or Outpaint -> Inpaint / Up / Down / Left / Right <br> (Fooocus uses its own inpaint algorithm and inpaint models so that results are more satisfying than all other software that uses standard SDXL inpaint method/model) |
|
||||||
@@ -71,16 +73,16 @@ You can directly download Fooocus with:
|
|||||||
|
|
||||||
**[>>> Click here to download <<<](https://github.com/lllyasviel/Fooocus/releases/download/release/Fooocus_win64_2-1-831.7z)**
|
**[>>> Click here to download <<<](https://github.com/lllyasviel/Fooocus/releases/download/release/Fooocus_win64_2-1-831.7z)**
|
||||||
|
|
||||||
After you download the file, please uncompress it, and then run the "run.bat".
|
After you download the file, please uncompress it and then run the "run.bat".
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
In the first time you launch the software, it will automatically download models:
|
The first time you launch the software, it will automatically download models:
|
||||||
|
|
||||||
1. It will download [default models](#models) to the folder "Fooocus\models\checkpoints" given different presets. You can download them in advance if you do not want automatic download.
|
1. It will download [default models](#models) to the folder "Fooocus\models\checkpoints" given different presets. You can download them in advance if you do not want automatic download.
|
||||||
2. Note that if you use inpaint, at the first time you inpaint an image, it will download [Fooocus's own inpaint control model from here](https://huggingface.co/lllyasviel/fooocus_inpaint/resolve/main/inpaint_v26.fooocus.patch) as the file "Fooocus\models\inpaint\inpaint_v26.fooocus.patch" (the size of this file is 1.28GB).
|
2. Note that if you use inpaint, at the first time you inpaint an image, it will download [Fooocus's own inpaint control model from here](https://huggingface.co/lllyasviel/fooocus_inpaint/resolve/main/inpaint_v26.fooocus.patch) as the file "Fooocus\models\inpaint\inpaint_v26.fooocus.patch" (the size of this file is 1.28GB).
|
||||||
|
|
||||||
After Fooocus 2.1.60, you will also have `run_anime.bat` and `run_realistic.bat`. They are different model presets (and requires different models, but they will be automatically downloaded). [Check here for more details](https://github.com/lllyasviel/Fooocus/discussions/679).
|
After Fooocus 2.1.60, you will also have `run_anime.bat` and `run_realistic.bat`. They are different model presets (and require different models, but they will be automatically downloaded). [Check here for more details](https://github.com/lllyasviel/Fooocus/discussions/679).
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -97,7 +99,7 @@ Besides, recently many other software report that Nvidia driver above 532 is som
|
|||||||
Note that the minimal requirement is **4GB Nvidia GPU memory (4GB VRAM)** and **8GB system memory (8GB RAM)**. This requires using Microsoft’s Virtual Swap technique, which is automatically enabled by your Windows installation in most cases, so you often do not need to do anything about it. However, if you are not sure, or if you manually turned it off (would anyone really do that?), or **if you see any "RuntimeError: CPUAllocator"**, you can enable it here:
|
Note that the minimal requirement is **4GB Nvidia GPU memory (4GB VRAM)** and **8GB system memory (8GB RAM)**. This requires using Microsoft’s Virtual Swap technique, which is automatically enabled by your Windows installation in most cases, so you often do not need to do anything about it. However, if you are not sure, or if you manually turned it off (would anyone really do that?), or **if you see any "RuntimeError: CPUAllocator"**, you can enable it here:
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Click here to the see the image instruction. </summary>
|
<summary>Click here to see the image instructions. </summary>
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -121,7 +123,7 @@ See also the common problems and troubleshoots [here](troubleshoot.md).
|
|||||||
|
|
||||||
In Colab, you can modify the last line to `!python entry_with_update.py --share` or `!python entry_with_update.py --preset anime --share` or `!python entry_with_update.py --preset realistic --share` for Fooocus Default/Anime/Realistic Edition.
|
In Colab, you can modify the last line to `!python entry_with_update.py --share` or `!python entry_with_update.py --preset anime --share` or `!python entry_with_update.py --preset realistic --share` for Fooocus Default/Anime/Realistic Edition.
|
||||||
|
|
||||||
Note that this Colab will disable refiner by default because Colab free's resource is relatively limited (and some "big" features like image prompt may cause free-tier Colab to disconnect). We make sure that basic text-to-image is always working on free-tier Colab.
|
Note that this Colab will disable refiner by default because Colab free's resources are relatively limited (and some "big" features like image prompt may cause free-tier Colab to disconnect). We make sure that basic text-to-image is always working on free-tier Colab.
|
||||||
|
|
||||||
Thanks to [camenduru](https://github.com/camenduru)!
|
Thanks to [camenduru](https://github.com/camenduru)!
|
||||||
|
|
||||||
@@ -140,7 +142,7 @@ Then download the models: download [default models](#models) to the folder "Fooo
|
|||||||
conda activate fooocus
|
conda activate fooocus
|
||||||
python entry_with_update.py
|
python entry_with_update.py
|
||||||
|
|
||||||
Or if you want to open a remote port, use
|
Or, if you want to open a remote port, use
|
||||||
|
|
||||||
conda activate fooocus
|
conda activate fooocus
|
||||||
python entry_with_update.py --listen
|
python entry_with_update.py --listen
|
||||||
@@ -149,7 +151,7 @@ Use `python entry_with_update.py --preset anime` or `python entry_with_update.py
|
|||||||
|
|
||||||
### Linux (Using Python Venv)
|
### Linux (Using Python Venv)
|
||||||
|
|
||||||
Your Linux needs to have **Python 3.10** installed, and lets say your Python can be called with command **python3** with your venv system working, you can
|
Your Linux needs to have **Python 3.10** installed, and let's say your Python can be called with the command **python3** with your venv system working; you can
|
||||||
|
|
||||||
git clone https://github.com/lllyasviel/Fooocus.git
|
git clone https://github.com/lllyasviel/Fooocus.git
|
||||||
cd Fooocus
|
cd Fooocus
|
||||||
@@ -162,7 +164,7 @@ See the above sections for model downloads. You can launch the software with:
|
|||||||
source fooocus_env/bin/activate
|
source fooocus_env/bin/activate
|
||||||
python entry_with_update.py
|
python entry_with_update.py
|
||||||
|
|
||||||
Or if you want to open a remote port, use
|
Or, if you want to open a remote port, use
|
||||||
|
|
||||||
source fooocus_env/bin/activate
|
source fooocus_env/bin/activate
|
||||||
python entry_with_update.py --listen
|
python entry_with_update.py --listen
|
||||||
@@ -171,7 +173,7 @@ Use `python entry_with_update.py --preset anime` or `python entry_with_update.py
|
|||||||
|
|
||||||
### Linux (Using native system Python)
|
### Linux (Using native system Python)
|
||||||
|
|
||||||
If you know what you are doing, and your Linux already has **Python 3.10** installed, and your Python can be called with command **python3** (and Pip with **pip3**), you can
|
If you know what you are doing, and your Linux already has **Python 3.10** installed, and your Python can be called with the command **python3** (and Pip with **pip3**), you can
|
||||||
|
|
||||||
git clone https://github.com/lllyasviel/Fooocus.git
|
git clone https://github.com/lllyasviel/Fooocus.git
|
||||||
cd Fooocus
|
cd Fooocus
|
||||||
@@ -181,7 +183,7 @@ See the above sections for model downloads. You can launch the software with:
|
|||||||
|
|
||||||
python3 entry_with_update.py
|
python3 entry_with_update.py
|
||||||
|
|
||||||
Or if you want to open a remote port, use
|
Or, if you want to open a remote port, use
|
||||||
|
|
||||||
python3 entry_with_update.py --listen
|
python3 entry_with_update.py --listen
|
||||||
|
|
||||||
@@ -191,7 +193,7 @@ Use `python entry_with_update.py --preset anime` or `python entry_with_update.py
|
|||||||
|
|
||||||
Note that the [minimal requirement](#minimal-requirement) for different platforms is different.
|
Note that the [minimal requirement](#minimal-requirement) for different platforms is different.
|
||||||
|
|
||||||
Same with the above instructions. You need to change torch to AMD version
|
Same with the above instructions. You need to change torch to the AMD version
|
||||||
|
|
||||||
pip uninstall torch torchvision torchaudio torchtext functorch xformers
|
pip uninstall torch torchvision torchaudio torchtext functorch xformers
|
||||||
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.6
|
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.6
|
||||||
@@ -204,7 +206,7 @@ Use `python entry_with_update.py --preset anime` or `python entry_with_update.py
|
|||||||
|
|
||||||
Note that the [minimal requirement](#minimal-requirement) for different platforms is different.
|
Note that the [minimal requirement](#minimal-requirement) for different platforms is different.
|
||||||
|
|
||||||
Same with Windows. Download the software, edit the content of `run.bat` as:
|
Same with Windows. Download the software and edit the content of `run.bat` as:
|
||||||
|
|
||||||
.\python_embeded\python.exe -m pip uninstall torch torchvision torchaudio torchtext functorch xformers -y
|
.\python_embeded\python.exe -m pip uninstall torch torchvision torchaudio torchtext functorch xformers -y
|
||||||
.\python_embeded\python.exe -m pip install torch-directml
|
.\python_embeded\python.exe -m pip install torch-directml
|
||||||
@@ -231,7 +233,7 @@ You can install Fooocus on Apple Mac silicon (M1 or M2) with macOS 'Catalina' or
|
|||||||
1. Create a new conda environment, `conda env create -f environment.yaml`.
|
1. Create a new conda environment, `conda env create -f environment.yaml`.
|
||||||
1. Activate your new conda environment, `conda activate fooocus`.
|
1. Activate your new conda environment, `conda activate fooocus`.
|
||||||
1. Install the packages required by Fooocus, `pip install -r requirements_versions.txt`.
|
1. Install the packages required by Fooocus, `pip install -r requirements_versions.txt`.
|
||||||
1. Launch Fooocus by running `python entry_with_update.py`. (Some Mac M2 users may need `python entry_with_update.py --disable-offload-from-vram` to speed up model loading/unloading.) The first time you run Fooocus, it will automatically download the Stable Diffusion SDXL models and will take a significant time, depending on your internet connection.
|
1. Launch Fooocus by running `python entry_with_update.py`. (Some Mac M2 users may need `python entry_with_update.py --disable-offload-from-vram` to speed up model loading/unloading.) The first time you run Fooocus, it will automatically download the Stable Diffusion SDXL models and will take a significant amount of time, depending on your internet connection.
|
||||||
|
|
||||||
Use `python entry_with_update.py --preset anime` or `python entry_with_update.py --preset realistic` for Fooocus Anime/Realistic Edition.
|
Use `python entry_with_update.py --preset anime` or `python entry_with_update.py --preset realistic` for Fooocus Anime/Realistic Edition.
|
||||||
|
|
||||||
@@ -259,7 +261,7 @@ Below is the minimal requirement for running Fooocus locally. If your device cap
|
|||||||
|
|
||||||
* AMD GPU ROCm (on hold): The AMD is still working on supporting ROCm on Windows.
|
* AMD GPU ROCm (on hold): The AMD is still working on supporting ROCm on Windows.
|
||||||
|
|
||||||
* Nvidia GTX 1XXX 6GB uncertain: Some people reports 6GB success on GTX 10XX but some other people reports failure cases.
|
* Nvidia GTX 1XXX 6GB uncertain: Some people report 6GB success on GTX 10XX, but some other people report failure cases.
|
||||||
|
|
||||||
*Note that Fooocus is only for extremely high quality image generating. We will not support smaller models to reduce the requirement and sacrifice result quality.*
|
*Note that Fooocus is only for extremely high quality image generating. We will not support smaller models to reduce the requirement and sacrifice result quality.*
|
||||||
|
|
||||||
@@ -270,7 +272,7 @@ See the common problems [here](troubleshoot.md).
|
|||||||
## Default Models
|
## Default Models
|
||||||
<a name="models"></a>
|
<a name="models"></a>
|
||||||
|
|
||||||
Given different goals, the default models and configs of Fooocus is different:
|
Given different goals, the default models and configs of Fooocus are different:
|
||||||
|
|
||||||
| Task | Windows | Linux args | Main Model | Refiner | Config |
|
| Task | Windows | Linux args | Main Model | Refiner | Config |
|
||||||
| --- | --- | --- | --- | --- | --- |
|
| --- | --- | --- | --- | --- | --- |
|
||||||
@@ -283,26 +285,26 @@ Note that the download is **automatic** - you do not need to do anything if the
|
|||||||
## List of "Hidden" Tricks
|
## List of "Hidden" Tricks
|
||||||
<a name="tech_list"></a>
|
<a name="tech_list"></a>
|
||||||
|
|
||||||
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-processsing and "raw" mode, or the LeonardoAI's Prompt Magic).
|
||||||
2. Native refiner swap inside one single k-sampler. The advantage is that now the refiner model can 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 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 [Drawing 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 [Drawing 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 the 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 overly smooth or plastic appearance (examples [here](https://github.com/lllyasviel/Fooocus/discussions/117#sharpness)). This can almostly eliminate all cases that XL still occasionally produce 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.)
|
||||||
5. We modified the style templates a bit and added the "cinematic-default".
|
5. We modified the style templates a bit and added the "cinematic-default".
|
||||||
6. We tested the "sd_xl_offset_example-lora_1.0.safetensors" and it seems that when the lora weight is below 0.5, the results are always better than XL without lora.
|
6. We tested the "sd_xl_offset_example-lora_1.0.safetensors" and it seems that when the lora weight is below 0.5, the results are always better than XL without lora.
|
||||||
7. The parameters of samplers are carefully tuned.
|
7. The parameters of samplers are carefully tuned.
|
||||||
8. Because XL uses positional encoding for generation resolution, images generated by several fixed resolutions look a bit better than that from arbitrary resolutions (because the positional encoding is not very good at handling int numbers that are unseen during training). This suggests that the resolutions in UI may be hard coded for best results.
|
8. Because XL uses positional encoding for generation resolution, images generated by several fixed resolutions look a bit better than those from arbitrary resolutions (because the positional encoding is not very good at handling int numbers that are unseen during training). This suggests that the resolutions in UI may be hard coded for best results.
|
||||||
9. Separated prompts for two different text encoders seem unnecessary. Separated prompts for base model and refiner may work but the effects are random, and we refrain from implement this.
|
9. Separated prompts for two different text encoders seem unnecessary. Separated prompts for the base model and refiner may work, but the effects are random, and we refrain from implementing this.
|
||||||
10. DPM family seems well-suited for XL, since XL sometimes generates overly smooth texture but DPM family sometimes generate overly dense detail in texture. Their joint effect looks neutral and appealing to human perception.
|
10. The DPM family seems well-suited for XL since XL sometimes generates overly smooth texture, but the DPM family sometimes generates overly dense detail in texture. Their joint effect looks neutral and appealing to human perception.
|
||||||
11. A carefully designed system for balancing multiple styles as well as prompt expansion.
|
11. A carefully designed system for balancing multiple styles as well as prompt expansion.
|
||||||
12. Using automatic1111's method to normalize prompt emphasizing. This significantly improve results when users directly copy prompts from civitai.
|
12. Using automatic1111's method to normalize prompt emphasizing. This significantly improves results when users directly copy prompts from civitai.
|
||||||
13. The joint swap system of refiner now also support img2img and upscale in a seamless way.
|
13. The joint swap system of the refiner now also supports img2img and upscale in a seamless way.
|
||||||
14. CFG Scale and TSNR correction (tuned for SDXL) when CFG is bigger than 10.
|
14. CFG Scale and TSNR correction (tuned for SDXL) when CFG is bigger than 10.
|
||||||
|
|
||||||
## Customization
|
## Customization
|
||||||
|
|
||||||
After the first time you run Fooocus, a config file will be generated at `Fooocus\config.txt`. This file can be edited for changing the model path or default parameters.
|
After the first time you run Fooocus, a config file will be generated at `Fooocus\config.txt`. This file can be edited to change the model path or default parameters.
|
||||||
|
|
||||||
For example, an edited `Fooocus\config.txt` (this file will be generated after the first launch) may look like this:
|
For example, an edited `Fooocus\config.txt` (this file will be generated after the first launch) may look like this:
|
||||||
|
|
||||||
@@ -338,7 +340,7 @@ Many other keys, formats, and examples are in `Fooocus\config_modification_tutor
|
|||||||
|
|
||||||
Consider twice before you really change the config. If you find yourself breaking things, just delete `Fooocus\config.txt`. Fooocus will go back to default.
|
Consider twice before you really change the config. If you find yourself breaking things, just delete `Fooocus\config.txt`. Fooocus will go back to default.
|
||||||
|
|
||||||
A safter way is just to try "run_anime.bat" or "run_realistic.bat" - they should be already good enough for different tasks.
|
A safer way is just to try "run_anime.bat" or "run_realistic.bat" - they should already be good enough for different tasks.
|
||||||
|
|
||||||
~Note that `user_path_config.txt` is deprecated and will be removed soon.~ (Edit: it is already removed.)
|
~Note that `user_path_config.txt` is deprecated and will be removed soon.~ (Edit: it is already removed.)
|
||||||
|
|
||||||
@@ -384,7 +386,7 @@ See also [About Forking and Promotion of Forks](https://github.com/lllyasviel/Fo
|
|||||||
|
|
||||||
## Thanks
|
## Thanks
|
||||||
|
|
||||||
Special thanks to [twri](https://github.com/twri) and [3Diva](https://github.com/3Diva) for creating additional SDXL styles available in Fooocus. Thanks [daswer123](https://github.com/daswer123) for contributing the Canvas Zoom!
|
Special thanks to [twri](https://github.com/twri) and [3Diva](https://github.com/3Diva) and [Marc K3nt3L](https://github.com/K3nt3L) for creating additional SDXL styles available in Fooocus. Thanks [daswer123](https://github.com/daswer123) for contributing the Canvas Zoom!
|
||||||
|
|
||||||
## Update Log
|
## Update Log
|
||||||
|
|
||||||
@@ -392,7 +394,7 @@ The log is [here](update_log.md).
|
|||||||
|
|
||||||
## Localization/Translation/I18N
|
## Localization/Translation/I18N
|
||||||
|
|
||||||
**We need your help!** Please help with translating Fooocus to international languages.
|
**We need your help!** Please help translate Fooocus into international languages.
|
||||||
|
|
||||||
You can put json files in the `language` folder to translate the user interface.
|
You can put json files in the `language` folder to translate the user interface.
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,312 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "MK Chromolithography",
|
||||||
|
"prompt": "Chromolithograph {prompt}. Vibrant colors, intricate details, rich color saturation, meticulous registration, multi-layered printing, decorative elements, historical charm, artistic reproductions, commercial posters, nostalgic, ornate compositions.",
|
||||||
|
"negative_prompt": "monochromatic, simple designs, limited color palette, imprecise registration, minimalistic, modern aesthetic, digital appearance."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Cross Processing Print",
|
||||||
|
"prompt": "Cross processing print {prompt}. Experimental color shifts, unconventional tonalities, vibrant and surreal hues, heightened contrasts, unpredictable results, artistic unpredictability, retro and vintage feel, dynamic color interplay, abstract and dreamlike.",
|
||||||
|
"negative_prompt": "predictable color tones, traditional processing, realistic color representation, subdued contrasts, standard photographic aesthetics."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Dufaycolor Photograph",
|
||||||
|
"prompt": "Dufaycolor photograph {prompt}. Vintage color palette, distinctive color rendering, soft and dreamy atmosphere, historical charm, unique color process, grainy texture, evocative mood, nostalgic aesthetic, hand-tinted appearance, artistic patina.",
|
||||||
|
"negative_prompt": "modern color reproduction, hyperrealistic tones, sharp and clear details, digital precision, contemporary aesthetic."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Herbarium",
|
||||||
|
"prompt": "Herbarium drawing{prompt}. Botanical accuracy, old botanical book illustration, detailed illustrations, pressed plants, delicate and precise linework, scientific documentation, meticulous presentation, educational purpose, organic compositions, timeless aesthetic, naturalistic beauty.",
|
||||||
|
"negative_prompt": "abstract representation, vibrant colors, artistic interpretation, chaotic compositions, fantastical elements, digital appearance."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Punk Collage",
|
||||||
|
"prompt": "punk collage style {prompt} . mixed media, papercut,textured paper, overlapping, ripped posters, safety pins, chaotic layers, graffiti-style elements, anarchy symbols, vintage photos, cut-and-paste aesthetic, bold typography, distorted images, political messages, urban decay, distressed textures, newspaper clippings, spray paint, rebellious icons, DIY spirit, vivid colors, punk band logos, edgy and raw compositions, ",
|
||||||
|
"negative_prompt": "conventional,blurry, noisy, low contrast"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK mosaic",
|
||||||
|
"prompt": "mosaic style {prompt} . fragmented, assembled, colorful, highly detailed",
|
||||||
|
"negative_prompt": "whole, unbroken, monochrome"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Van Gogh",
|
||||||
|
"prompt": "Oil painting by Van Gogh {prompt} . Expressive, impasto, swirling brushwork, vibrant, brush strokes, Brushstroke-heavy, Textured, Impasto, Colorful, Dynamic, Bold, Distinctive, Vibrant, Whirling, Expressive, Dramatic, Swirling, Layered, Intense, Contrastive, Atmospheric, Luminous, Textural, Evocative, SpiraledVan Gogh style",
|
||||||
|
"negative_prompt": "realistic, photorealistic, calm, straight lines, signature, frame, text, watermark"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Coloring Book",
|
||||||
|
"prompt": "centered black and white high contrast line drawing, coloring book style,{prompt} . monochrome, blank white background",
|
||||||
|
"negative_prompt": "greyscale, gradients,shadows,shadow, colored, Red, Blue, Yellow, Green, Orange, Purple, Pink, Brown, Gray, Beige, Turquoise, Lavender, Cyan, Magenta, Olive, Indigo, black background"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Singer Sargent",
|
||||||
|
"prompt": "Oil painting by John Singer Sargent {prompt}. Elegant, refined, masterful technique,realistic portrayal, subtle play of light, captivating expression, rich details, harmonious colors, skillful composition, brush strokes, chiaroscuro.",
|
||||||
|
"negative_prompt": "realistic, photorealistic, abstract, overly stylized, excessive contrasts, distorted,bright colors,disorder."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Pollock",
|
||||||
|
"prompt": "Oil painting by Jackson Pollock {prompt}. Abstract expressionism, drip painting, chaotic composition, energetic, spontaneous, unconventional technique, dynamic, bold, distinctive, vibrant, intense, expressive, energetic, layered, non-representational, gestural.",
|
||||||
|
"negative_prompt": "(realistic:1.5), (photorealistic:1.5), representational, calm, ordered composition, precise lines, detailed forms, subdued colors, quiet, static, traditional, figurative."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Basquiat",
|
||||||
|
"prompt": "Artwork by Jean-Michel Basquiat {prompt}. Neo-expressionism, street art influence, graffiti-inspired, raw, energetic, bold colors, dynamic composition, chaotic, layered, textural, expressive, spontaneous, distinctive, symbolic,energetic brushstrokes.",
|
||||||
|
"negative_prompt": "(realistic:1.5), (photorealistic:1.5), calm, precise lines, conventional composition, subdued"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Andy Warhol",
|
||||||
|
"prompt": "Artwork in the style of Andy Warhol {prompt}. Pop art, vibrant colors, bold compositions, repetition of iconic imagery, celebrity culture, commercial aesthetics, mass production influence, stylized simplicity, cultural commentary, graphical elements, distinctive portraits.",
|
||||||
|
"negative_prompt": "subdued colors, realistic, lack of repetition, minimalistic."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Halftone print",
|
||||||
|
"prompt": "Halftone print of {prompt}. Dot matrix pattern, grayscale tones, vintage aesthetic, newspaper print vibe, stylized dots, visual texture, black and white contrasts, retro appearance, artistic pointillism,pop culture, (Roy Lichtenstein style:1.5).",
|
||||||
|
"negative_prompt": "smooth gradients, continuous tones, vibrant colors."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Gond Painting",
|
||||||
|
"prompt": "Gond painting {prompt}. Intricate patterns, vibrant colors, detailed motifs, nature-inspired themes, tribal folklore, fine lines, intricate detailing, storytelling compositions, mystical and folkloric, cultural richness.",
|
||||||
|
"negative_prompt": "monochromatic, abstract shapes, minimalistic."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Albumen Print",
|
||||||
|
"prompt": "Albumen print {prompt}. Sepia tones, fine details, subtle tonal gradations, delicate highlights, vintage aesthetic, soft and muted atmosphere, historical charm, rich textures, meticulous craftsmanship, classic photographic technique, vignetting.",
|
||||||
|
"negative_prompt": "vibrant colors, high contrast, modern, digital appearance, sharp details, contemporary style."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Aquatint Print",
|
||||||
|
"prompt": "Aquatint print {prompt}. Soft tonal gradations, atmospheric effects, velvety textures, rich contrasts, fine details, etching process, delicate lines, nuanced shading, expressive and moody atmosphere, artistic depth.",
|
||||||
|
"negative_prompt": "sharp contrasts, bold lines, minimalistic."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Anthotype Print",
|
||||||
|
"prompt": "Anthotype print {prompt}. Monochrome dye, soft and muted colors, organic textures, ephemeral and delicate appearance, low details, watercolor canvas, low contrast, overexposed, silhouette, textured paper.",
|
||||||
|
"negative_prompt": "vibrant synthetic dyes, bold and saturated colors."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Inuit Carving",
|
||||||
|
"prompt": "A sculpture made of ivory, {prompt} made of . Sculptures, Inuit art style, intricate carvings, natural materials, storytelling motifs, arctic wildlife themes, symbolic representations, cultural traditions, earthy tones, harmonious compositions, spiritual and mythological elements.",
|
||||||
|
"negative_prompt": "abstract, vibrant colors."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Bromoil Print",
|
||||||
|
"prompt": "Bromoil print {prompt}. Painterly effects, sepia tones, textured surfaces, rich contrasts, expressive brushwork, tonal variations, vintage aesthetic, atmospheric mood, handmade quality, artistic experimentation, darkroom craftsmanship, vignetting.",
|
||||||
|
"negative_prompt": "smooth surfaces, minimal brushwork, contemporary digital appearance."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Calotype Print",
|
||||||
|
"prompt": "Calotype print {prompt}. Soft focus, subtle tonal range, paper negative process, fine details, vintage aesthetic, artistic experimentation, atmospheric mood, early photographic charm, handmade quality, vignetting.",
|
||||||
|
"negative_prompt": "sharp focus, bold contrasts, modern aesthetic, digital photography."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Color Sketchnote",
|
||||||
|
"prompt": "Color sketchnote {prompt}. Hand-drawn elements, vibrant colors, visual hierarchy, playful illustrations, varied typography, graphic icons, organic and dynamic layout, personalized touches, creative expression, engaging storytelling.",
|
||||||
|
"negative_prompt": "monochromatic, geometric layout."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Cibulak Porcelain",
|
||||||
|
"prompt": "A sculpture made of blue pattern porcelain of {prompt}. Classic design, blue and white color scheme, intricate detailing, floral motifs, onion-shaped elements, historical charm, rococo, white ware, cobalt blue, underglaze pattern, fine craftsmanship, traditional elegance, delicate patterns, vintage aesthetic, Meissen, Blue Onion pattern, Cibulak.",
|
||||||
|
"negative_prompt": "tea, teapot, cup, teacup,bright colors, bold and modern design, absence of intricate detailing, lack of floral motifs, non-traditional shapes."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Alcohol Ink Art",
|
||||||
|
"prompt": "Alcohol ink art {prompt}. Fluid and vibrant colors, unpredictable patterns, organic textures, translucent layers, abstract compositions, ethereal and dreamy effects, free-flowing movement, expressive brushstrokes, contemporary aesthetic, wet textured paper.",
|
||||||
|
"negative_prompt": "monochromatic, controlled patterns."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK One Line Art",
|
||||||
|
"prompt": "One line art {prompt}. Continuous and unbroken black line, minimalistic, simplicity, economical use of space, flowing and dynamic, symbolic representations, contemporary aesthetic, evocative and abstract, white background.",
|
||||||
|
"negative_prompt": "disjointed lines, complexity, complex detailing."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Blacklight Paint",
|
||||||
|
"prompt": "Blacklight paint {prompt}. Fluorescent pigments, vibrant and surreal colors, ethereal glow, otherworldly effects, dynamic and psychedelic compositions, neon aesthetics, transformative in ultraviolet light, contemporary and experimental.",
|
||||||
|
"negative_prompt": "muted colors, traditional and realistic compositions."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Carnival Glass",
|
||||||
|
"prompt": "A sculpture made of Carnival glass, {prompt}. Iridescent surfaces, vibrant colors, intricate patterns, opalescent hues, reflective and prismatic effects, Art Nouveau and Art Deco influences, vintage charm, intricate detailing, lustrous and luminous appearance, Carnival Glass style.",
|
||||||
|
"negative_prompt": "non-iridescent surfaces, muted colors, absence of intricate patterns, lack of opalescent hues, modern and minimalist aesthetic."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Cyanotype Print",
|
||||||
|
"prompt": "Cyanotype print {prompt}. Prussian blue tones, distinctive coloration, high contrast, blueprint aesthetics, atmospheric mood, sun-exposed paper, silhouette effects, delicate details, historical charm, handmade and experimental quality.",
|
||||||
|
"negative_prompt": "vibrant colors, low contrast, modern and polished appearance."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Cross-Stitching",
|
||||||
|
"prompt": "Cross-stitching {prompt}. Intricate patterns, embroidery thread, sewing, fine details, precise stitches, textile artistry, symmetrical designs, varied color palette, traditional and contemporary motifs, handmade and crafted,canvas, nostalgic charm.",
|
||||||
|
"negative_prompt": "paper, paint, ink, photography."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Encaustic Paint",
|
||||||
|
"prompt": "Encaustic paint {prompt}. Textured surfaces, translucent layers, luminous quality, wax medium, rich color saturation, fluid and organic shapes, contemporary and historical influences, mixed media elements, atmospheric depth.",
|
||||||
|
"negative_prompt": "flat surfaces, opaque layers, lack of wax medium, muted color palette, absence of textured surfaces, non-mixed media."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Embroidery",
|
||||||
|
"prompt": "Embroidery {prompt}. Intricate stitching, embroidery thread, fine details, varied thread textures, textile artistry, embellished surfaces, diverse color palette, traditional and contemporary motifs, handmade and crafted, tactile and ornate.",
|
||||||
|
"negative_prompt": "minimalist, monochromatic."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Gyotaku",
|
||||||
|
"prompt": "Gyotaku {prompt}. Fish impressions, realistic details, ink rubbings, textured surfaces, traditional Japanese art form, nature-inspired compositions, artistic representation of marine life, black and white contrasts, cultural significance.",
|
||||||
|
"negative_prompt": "photography."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Luminogram",
|
||||||
|
"prompt": "Luminogram {prompt}. Photogram technique, ethereal and abstract effects, light and shadow interplay, luminous quality, experimental process, direct light exposure, unique and unpredictable results, artistic experimentation.",
|
||||||
|
"negative_prompt": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Lite Brite Art",
|
||||||
|
"prompt": "Lite Brite art {prompt}. Luminous and colorful designs, pixelated compositions, retro aesthetic, glowing effects, creative patterns, interactive and playful, nostalgic charm, vibrant and dynamic arrangements.",
|
||||||
|
"negative_prompt": "monochromatic."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Mokume-gane",
|
||||||
|
"prompt": "Mokume-gane {prompt}. Wood-grain patterns, mixed metal layers, intricate and organic designs, traditional Japanese metalwork, harmonious color combinations, artisanal craftsmanship, unique and layered textures, cultural and historical significance.",
|
||||||
|
"negative_prompt": "uniform metal surfaces."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Pebble Art",
|
||||||
|
"prompt": "a sculpture made of peebles, {prompt}. Pebble art style,natural materials, textured surfaces, balanced compositions, organic forms, harmonious arrangements, tactile and 3D effects, beach-inspired aesthetic, creative storytelling, artisanal craftsmanship.",
|
||||||
|
"negative_prompt": "non-natural materials, lack of textured surfaces, imbalanced compositions, absence of organic forms, non-tactile appearance."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Palekh",
|
||||||
|
"prompt": "Palekh art {prompt}. Miniature paintings, intricate details, vivid colors, folkloric themes, lacquer finish, storytelling compositions, symbolic elements, Russian folklore influence, cultural and historical significance.",
|
||||||
|
"negative_prompt": "large-scale paintings."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Suminagashi",
|
||||||
|
"prompt": "Suminagashi {prompt}. Floating ink patterns, marbled effects, delicate and ethereal designs, water-based ink, fluid and unpredictable compositions, meditative process, monochromatic or subtle color palette, Japanese artistic tradition.",
|
||||||
|
"negative_prompt": "vibrant and bold color palette."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Scrimshaw",
|
||||||
|
"prompt": "A Scrimshaw engraving of {prompt}. Intricate engravings on a spermwhale's teeth, marine motifs, detailed scenes, nautical themes, black and white contrasts, historical craftsmanship, artisanal carving, storytelling compositions, maritime heritage.",
|
||||||
|
"negative_prompt": "colorful, modern."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Shibori",
|
||||||
|
"prompt": "Shibori {prompt}. Textured fabric, intricate patterns, resist-dyeing technique, indigo or vibrant colors, organic and flowing designs, Japanese textile art, cultural tradition, tactile and visual interest.",
|
||||||
|
"negative_prompt": "monochromatic."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Vitreous Enamel",
|
||||||
|
"prompt": "A sculpture made of Vitreous enamel {prompt}. Smooth and glossy surfaces, vibrant colors, glass-like finish, durable and resilient, intricate detailing, traditional and contemporary applications, artistic craftsmanship, jewelry and decorative objects, , Vitreous enamel, colored glass.",
|
||||||
|
"negative_prompt": "rough surfaces, muted colors."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK Ukiyo-e",
|
||||||
|
"prompt": "Ukiyo-e {prompt}. Woodblock prints, vibrant colors, intricate details, depictions of landscapes, kabuki actors, beautiful women, cultural scenes, traditional Japanese art, artistic craftsmanship, historical significance.",
|
||||||
|
"negative_prompt": "absence of woodblock prints, muted colors, lack of intricate details, non-traditional Japanese themes, absence of cultural scenes."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK vintage-airline-poster",
|
||||||
|
"prompt": "vintage airline poster {prompt} . classic aviation fonts, pastel colors, elegant aircraft illustrations, scenic destinations, distressed textures, retro travel allure",
|
||||||
|
"negative_prompt": "modern fonts, bold colors, hyper-realistic, sleek design"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK vintage-travel-poster",
|
||||||
|
"prompt": "vintage travel poster {prompt} . retro fonts, muted colors, scenic illustrations, iconic landmarks, distressed textures, nostalgic vibes",
|
||||||
|
"negative_prompt": "modern fonts, vibrant colors, hyper-realistic, sleek design"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK bauhaus-style",
|
||||||
|
"prompt": "Bauhaus-inspired {prompt} . minimalism, geometric precision, primary colors, sans-serif typography, asymmetry, functional design",
|
||||||
|
"negative_prompt": "ornate, intricate, excessive detail, complex patterns, serif typography"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK afrofuturism",
|
||||||
|
"prompt": "Afrofuturism illustration {prompt} . vibrant colors, futuristic elements, cultural symbolism, cosmic imagery, dynamic patterns, empowering narratives",
|
||||||
|
"negative_prompt": "monochromatic"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK atompunk",
|
||||||
|
"prompt": "Atompunk illustation, {prompt} . retro-futuristic, atomic age aesthetics, sleek lines, metallic textures, futuristic technology, optimism, energy",
|
||||||
|
"negative_prompt": "organic, natural textures, rustic, dystopian"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK constructivism",
|
||||||
|
"prompt": "Constructivism {prompt} . geometric abstraction, bold colors, industrial aesthetics, dynamic compositions, utilitarian design, revolutionary spirit",
|
||||||
|
"negative_prompt": "organic shapes, muted colors, ornate elements, traditional"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK chicano-art",
|
||||||
|
"prompt": "Chicano art {prompt} . bold colors, cultural symbolism, muralism, lowrider aesthetics, barrio life, political messages, social activism, Mexico",
|
||||||
|
"negative_prompt": "monochromatic, minimalist, mainstream aesthetics"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK de-stijl",
|
||||||
|
"prompt": "De Stijl Art {prompt} . neoplasticism, primary colors, geometric abstraction, horizontal and vertical lines, simplicity, harmony, utopian ideals",
|
||||||
|
"negative_prompt": "complex patterns, muted colors, ornate elements, asymmetry"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK dayak-art",
|
||||||
|
"prompt": "Dayak art sculpture of {prompt} . intricate patterns, nature-inspired motifs, vibrant colors, traditional craftsmanship, cultural symbolism, storytelling",
|
||||||
|
"negative_prompt": "minimalist, monochromatic, modern"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK fayum-portrait",
|
||||||
|
"prompt": "Fayum portrait {prompt} . encaustic painting, realistic facial features, warm earth tones, serene expressions, ancient Egyptian influences",
|
||||||
|
"negative_prompt": "abstract, vibrant colors, exaggerated features, modern"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK illuminated-manuscript",
|
||||||
|
"prompt": "Illuminated manuscript {prompt} . intricate calligraphy, rich colors, detailed illustrations, gold leaf accents, ornate borders, religious, historical, medieval",
|
||||||
|
"negative_prompt": "modern typography, minimalist design, monochromatic, abstract themes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK kalighat-painting",
|
||||||
|
"prompt": "Kalighat painting {prompt} . bold lines, vibrant colors, narrative storytelling, cultural motifs, flat compositions, expressive characters",
|
||||||
|
"negative_prompt": "subdued colors, intricate details, realistic portrayal, modern aesthetics"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK madhubani-painting",
|
||||||
|
"prompt": "Madhubani painting {prompt} . intricate patterns, vibrant colors, nature-inspired motifs, cultural storytelling, symmetry, folk art aesthetics",
|
||||||
|
"negative_prompt": "abstract, muted colors, minimalistic design, modern aesthetics"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK pictorialism",
|
||||||
|
"prompt": "Pictorialism illustration{prompt} . soft focus, atmospheric effects, artistic interpretation, tonality, muted colors, evocative storytelling",
|
||||||
|
"negative_prompt": "sharp focus, high contrast, realistic depiction, vivid colors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK pichwai-painting",
|
||||||
|
"prompt": "Pichwai painting {prompt} . intricate detailing, vibrant colors, religious themes, nature motifs, devotional storytelling, gold leaf accents",
|
||||||
|
"negative_prompt": "minimalist, subdued colors, abstract design"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK patachitra-painting",
|
||||||
|
"prompt": "Patachitra painting {prompt} . bold outlines, vibrant colors, intricate detailing, mythological themes, storytelling, traditional craftsmanship",
|
||||||
|
"negative_prompt": "subdued colors, minimalistic, abstract, modern aesthetics"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK samoan-art-inspired",
|
||||||
|
"prompt": "Samoan art-inspired wooden sculpture {prompt} . traditional motifs, natural elements, bold colors, cultural symbolism, storytelling, craftsmanship",
|
||||||
|
"negative_prompt": "modern aesthetics, minimalist, abstract"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK tlingit-art",
|
||||||
|
"prompt": "Tlingit art {prompt} . formline design, natural elements, animal motifs, bold colors, cultural storytelling, traditional craftsmanship, Alaska traditional art, (totem:1.5)",
|
||||||
|
"negative_prompt": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK adnate-style",
|
||||||
|
"prompt": "Painting by Adnate {prompt} . realistic portraits, street art, large-scale murals, subdued color palette, social narratives",
|
||||||
|
"negative_prompt": "abstract, vibrant colors, small-scale art"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK ron-english-style",
|
||||||
|
"prompt": "Painting by Ron English {prompt} . pop-surrealism, cultural subversion, iconic mash-ups, vibrant and bold colors, satirical commentary",
|
||||||
|
"negative_prompt": "traditional, monochromatic"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MK shepard-fairey-style",
|
||||||
|
"prompt": "Painting by Shepard Fairey {prompt} . street art, political activism, iconic stencils, bold typography, high contrast, red, black, and white color palette",
|
||||||
|
"negative_prompt": "traditional, muted colors"
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -1,3 +1,18 @@
|
|||||||
|
**(2023 Dec 21) Hi all, the feature updating of Fooocus will be paused for about two or three weeks because we have some other workloads. See you soon and we will come back in mid or late Jan. However, you may still see updates if other collaborators are fixing bugs or solving problems.**
|
||||||
|
|
||||||
|
# 2.1.854
|
||||||
|
|
||||||
|
* Add a button to copy parameters to clipboard in log.
|
||||||
|
* Allow users to load parameters directly by pasting parameters to prompt.
|
||||||
|
|
||||||
|
# 2.1.853
|
||||||
|
|
||||||
|
* Add Marc K3nt3L's styles. Thanks [Marc K3nt3L](https://github.com/K3nt3L)!
|
||||||
|
|
||||||
|
# 2.1.852
|
||||||
|
|
||||||
|
* New Log System: Log system now uses tables. If this is breaking some other browser extension or javascript developments, see also [use previous version](https://github.com/lllyasviel/Fooocus/discussions/1405).
|
||||||
|
|
||||||
# 2.1.846
|
# 2.1.846
|
||||||
|
|
||||||
* Many users reported that image quality is different from 2.1.824. We reviewed all codes and fixed several precision problems in 2.1.846.
|
* Many users reported that image quality is different from 2.1.824. We reviewed all codes and fixed several precision problems in 2.1.846.
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import gradio as gr
|
import gradio as gr
|
||||||
import random
|
import random
|
||||||
import os
|
import os
|
||||||
|
import json
|
||||||
import time
|
import time
|
||||||
import shared
|
import shared
|
||||||
import modules.config
|
import modules.config
|
||||||
@@ -12,6 +13,7 @@ import modules.flags as flags
|
|||||||
import modules.gradio_hijack as grh
|
import modules.gradio_hijack as grh
|
||||||
import modules.advanced_parameters as advanced_parameters
|
import modules.advanced_parameters as advanced_parameters
|
||||||
import modules.style_sorter as style_sorter
|
import modules.style_sorter as style_sorter
|
||||||
|
import modules.meta_parser
|
||||||
import args_manager
|
import args_manager
|
||||||
import copy
|
import copy
|
||||||
|
|
||||||
@@ -100,7 +102,7 @@ with shared.gradio_root:
|
|||||||
elem_id='final_gallery')
|
elem_id='final_gallery')
|
||||||
with gr.Row(elem_classes='type_row'):
|
with gr.Row(elem_classes='type_row'):
|
||||||
with gr.Column(scale=17):
|
with gr.Column(scale=17):
|
||||||
prompt = gr.Textbox(show_label=False, placeholder="Type prompt here.", elem_id='positive_prompt',
|
prompt = gr.Textbox(show_label=False, placeholder="Type prompt here or paste parameters.", elem_id='positive_prompt',
|
||||||
container=False, autofocus=True, elem_classes='type_row', lines=1024)
|
container=False, autofocus=True, elem_classes='type_row', lines=1024)
|
||||||
|
|
||||||
default_prompt = modules.config.default_prompt
|
default_prompt = modules.config.default_prompt
|
||||||
@@ -109,6 +111,7 @@ with shared.gradio_root:
|
|||||||
|
|
||||||
with gr.Column(scale=3, min_width=0):
|
with gr.Column(scale=3, min_width=0):
|
||||||
generate_button = gr.Button(label="Generate", value="Generate", elem_classes='type_row', elem_id='generate_button', visible=True)
|
generate_button = gr.Button(label="Generate", value="Generate", elem_classes='type_row', elem_id='generate_button', visible=True)
|
||||||
|
load_parameter_button = gr.Button(label="Load Parameters", value="Load Parameters", elem_classes='type_row', elem_id='load_parameter_button', visible=False)
|
||||||
skip_button = gr.Button(label="Skip", value="Skip", elem_classes='type_row_half', visible=False)
|
skip_button = gr.Button(label="Skip", value="Skip", elem_classes='type_row_half', visible=False)
|
||||||
stop_button = gr.Button(label="Stop", value="Stop", elem_classes='type_row_half', elem_id='stop_button', visible=False)
|
stop_button = gr.Button(label="Stop", value="Stop", elem_classes='type_row_half', elem_id='stop_button', visible=False)
|
||||||
|
|
||||||
@@ -223,7 +226,7 @@ with shared.gradio_root:
|
|||||||
aspect_ratios_selection = gr.Radio(label='Aspect Ratios', choices=modules.config.available_aspect_ratios,
|
aspect_ratios_selection = gr.Radio(label='Aspect Ratios', choices=modules.config.available_aspect_ratios,
|
||||||
value=modules.config.default_aspect_ratio, info='width × height',
|
value=modules.config.default_aspect_ratio, info='width × height',
|
||||||
elem_classes='aspect_ratios')
|
elem_classes='aspect_ratios')
|
||||||
image_number = gr.Slider(label='Image Number', minimum=1, maximum=32, step=1, value=modules.config.default_image_number)
|
image_number = gr.Slider(label='Image Number', minimum=1, maximum=modules.config.default_max_image_number, step=1, value=modules.config.default_image_number)
|
||||||
negative_prompt = gr.Textbox(label='Negative Prompt', show_label=True, placeholder="Type prompt here.",
|
negative_prompt = gr.Textbox(label='Negative Prompt', show_label=True, placeholder="Type prompt here.",
|
||||||
info='Describing what you do not want to see.', lines=2,
|
info='Describing what you do not want to see.', lines=2,
|
||||||
elem_id='negative_prompt',
|
elem_id='negative_prompt',
|
||||||
@@ -510,11 +513,62 @@ with shared.gradio_root:
|
|||||||
ctrls += [outpaint_selections, inpaint_input_image, inpaint_additional_prompt]
|
ctrls += [outpaint_selections, inpaint_input_image, inpaint_additional_prompt]
|
||||||
ctrls += ip_ctrls
|
ctrls += ip_ctrls
|
||||||
|
|
||||||
generate_button.click(lambda: (gr.update(visible=True, interactive=True), gr.update(visible=True, interactive=True), gr.update(visible=False), []), outputs=[stop_button, skip_button, generate_button, gallery]) \
|
state_is_generating = gr.State(False)
|
||||||
|
|
||||||
|
def parse_meta(raw_prompt_txt, is_generating):
|
||||||
|
loaded_json = None
|
||||||
|
try:
|
||||||
|
if '{' in raw_prompt_txt:
|
||||||
|
if '}' in raw_prompt_txt:
|
||||||
|
if ':' in raw_prompt_txt:
|
||||||
|
loaded_json = json.loads(raw_prompt_txt)
|
||||||
|
assert isinstance(loaded_json, dict)
|
||||||
|
except:
|
||||||
|
loaded_json = None
|
||||||
|
|
||||||
|
if loaded_json is None:
|
||||||
|
if is_generating:
|
||||||
|
return gr.update(), gr.update(), gr.update()
|
||||||
|
else:
|
||||||
|
return gr.update(), gr.update(visible=True), gr.update(visible=False)
|
||||||
|
|
||||||
|
return json.dumps(loaded_json), gr.update(visible=False), gr.update(visible=True)
|
||||||
|
|
||||||
|
prompt.input(parse_meta, inputs=[prompt, state_is_generating], outputs=[prompt, generate_button, load_parameter_button], queue=False, show_progress=False)
|
||||||
|
|
||||||
|
load_parameter_button.click(modules.meta_parser.load_parameter_button_click, inputs=[prompt, state_is_generating], outputs=[
|
||||||
|
advanced_checkbox,
|
||||||
|
image_number,
|
||||||
|
prompt,
|
||||||
|
negative_prompt,
|
||||||
|
style_selections,
|
||||||
|
performance_selection,
|
||||||
|
aspect_ratios_selection,
|
||||||
|
overwrite_width,
|
||||||
|
overwrite_height,
|
||||||
|
sharpness,
|
||||||
|
guidance_scale,
|
||||||
|
adm_scaler_positive,
|
||||||
|
adm_scaler_negative,
|
||||||
|
adm_scaler_end,
|
||||||
|
base_model,
|
||||||
|
refiner_model,
|
||||||
|
refiner_switch,
|
||||||
|
sampler_name,
|
||||||
|
scheduler_name,
|
||||||
|
seed_random,
|
||||||
|
image_seed,
|
||||||
|
generate_button,
|
||||||
|
load_parameter_button
|
||||||
|
] + lora_ctrls, queue=False, show_progress=False)
|
||||||
|
|
||||||
|
generate_button.click(lambda: (gr.update(visible=True, interactive=True), gr.update(visible=True, interactive=True), gr.update(visible=False, interactive=False), [], True),
|
||||||
|
outputs=[stop_button, skip_button, generate_button, gallery, state_is_generating]) \
|
||||||
.then(fn=refresh_seed, inputs=[seed_random, image_seed], outputs=image_seed) \
|
.then(fn=refresh_seed, inputs=[seed_random, image_seed], outputs=image_seed) \
|
||||||
.then(advanced_parameters.set_all_advanced_parameters, inputs=adps) \
|
.then(advanced_parameters.set_all_advanced_parameters, inputs=adps) \
|
||||||
.then(fn=generate_clicked, inputs=ctrls, outputs=[progress_html, progress_window, progress_gallery, gallery]) \
|
.then(fn=generate_clicked, inputs=ctrls, outputs=[progress_html, progress_window, progress_gallery, gallery]) \
|
||||||
.then(lambda: (gr.update(visible=True), gr.update(visible=False), gr.update(visible=False)), outputs=[generate_button, stop_button, skip_button]) \
|
.then(lambda: (gr.update(visible=True, interactive=True), gr.update(visible=False, interactive=False), gr.update(visible=False, interactive=False), False),
|
||||||
|
outputs=[generate_button, stop_button, skip_button, state_is_generating]) \
|
||||||
.then(fn=lambda: None, _js='playNotification').then(fn=lambda: None, _js='refresh_grid_delayed')
|
.then(fn=lambda: None, _js='playNotification').then(fn=lambda: None, _js='refresh_grid_delayed')
|
||||||
|
|
||||||
for notification_file in ['notification.ogg', 'notification.mp3']:
|
for notification_file in ['notification.ogg', 'notification.mp3']:
|
||||||
@@ -532,7 +586,7 @@ with shared.gradio_root:
|
|||||||
return mode, ["Fooocus V2"]
|
return mode, ["Fooocus V2"]
|
||||||
|
|
||||||
desc_btn.click(trigger_describe, inputs=[desc_method, desc_input_image],
|
desc_btn.click(trigger_describe, inputs=[desc_method, desc_input_image],
|
||||||
outputs=[prompt, style_selections], show_progress=True, queue=False)
|
outputs=[prompt, style_selections], show_progress=True, queue=True)
|
||||||
|
|
||||||
|
|
||||||
def dump_default_english_config():
|
def dump_default_english_config():
|
||||||
|
|||||||
Reference in New Issue
Block a user