feat: read wildcards in order 通配符增强,切换顺序读取。(#1761)
* 通配符增强,切换顺序读取 通配符增强,通过勾选切换通配符读取方法,默认不勾选为随机读取一行,勾选后为按顺序读取,并使用相同的种子。 * 代码来自刁璐璐 * update * Update async_worker.py * refactor: rename read_wildcard_in_order_checkbox to read_wildcard_in_order * fix: use correct method call for interrupt_current_processing actually achieves the same result, stopping the task * refactor: move checkbox to developer debug mode, rename to plural below disable seed increment * refactor: code cleanup, separate code for disable_seed_increment * i18n: add translation for checkbox text --------- Co-authored-by: Manuel Schmid <manuel.schmid@odt.net>
This commit is contained in:
parent
5c7dc12470
commit
ead24c9361
@ -50,6 +50,7 @@
|
|||||||
"Seed": "Seed",
|
"Seed": "Seed",
|
||||||
"Disable seed increment": "Disable seed increment",
|
"Disable seed increment": "Disable seed increment",
|
||||||
"Disable automatic seed increment when image number is > 1.": "Disable automatic seed increment when image number is > 1.",
|
"Disable automatic seed increment when image number is > 1.": "Disable automatic seed increment when image number is > 1.",
|
||||||
|
"Read wildcards in order": "Read wildcards in order",
|
||||||
"\ud83d\udcda History Log": "\uD83D\uDCDA History Log",
|
"\ud83d\udcda History Log": "\uD83D\uDCDA History Log",
|
||||||
"Image Style": "Image Style",
|
"Image Style": "Image Style",
|
||||||
"Fooocus V2": "Fooocus V2",
|
"Fooocus V2": "Fooocus V2",
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import threading
|
import threading
|
||||||
|
import re
|
||||||
from modules.patch import PatchSettings, patch_settings, patch_all
|
from modules.patch import PatchSettings, patch_settings, patch_all
|
||||||
|
|
||||||
patch_all()
|
patch_all()
|
||||||
@ -148,6 +149,7 @@ def worker():
|
|||||||
image_number = args.pop()
|
image_number = args.pop()
|
||||||
output_format = args.pop()
|
output_format = args.pop()
|
||||||
image_seed = args.pop()
|
image_seed = args.pop()
|
||||||
|
read_wildcards_in_order = args.pop()
|
||||||
sharpness = args.pop()
|
sharpness = args.pop()
|
||||||
guidance_scale = args.pop()
|
guidance_scale = args.pop()
|
||||||
base_model_name = args.pop()
|
base_model_name = args.pop()
|
||||||
@ -441,16 +443,16 @@ def worker():
|
|||||||
|
|
||||||
for i in range(image_number):
|
for i in range(image_number):
|
||||||
if disable_seed_increment:
|
if disable_seed_increment:
|
||||||
task_seed = seed
|
task_seed = seed % (constants.MAX_SEED + 1)
|
||||||
else:
|
else:
|
||||||
task_seed = (seed + i) % (constants.MAX_SEED + 1) # randint is inclusive, % is not
|
task_seed = (seed + i) % (constants.MAX_SEED + 1) # randint is inclusive, % is not
|
||||||
|
|
||||||
task_rng = random.Random(task_seed) # may bind to inpaint noise in the future
|
task_rng = random.Random(task_seed) # may bind to inpaint noise in the future
|
||||||
task_prompt = apply_wildcards(prompt, task_rng)
|
task_prompt = apply_wildcards(prompt, task_rng, i, read_wildcards_in_order)
|
||||||
task_prompt = apply_arrays(task_prompt, i)
|
task_prompt = apply_arrays(task_prompt, i)
|
||||||
task_negative_prompt = apply_wildcards(negative_prompt, task_rng)
|
task_negative_prompt = apply_wildcards(negative_prompt, task_rng, i, read_wildcards_in_order)
|
||||||
task_extra_positive_prompts = [apply_wildcards(pmt, task_rng) for pmt in extra_positive_prompts]
|
task_extra_positive_prompts = [apply_wildcards(pmt, task_rng, i, read_wildcards_in_order) for pmt in extra_positive_prompts]
|
||||||
task_extra_negative_prompts = [apply_wildcards(pmt, task_rng) for pmt in extra_negative_prompts]
|
task_extra_negative_prompts = [apply_wildcards(pmt, task_rng, i, read_wildcards_in_order) for pmt in extra_negative_prompts]
|
||||||
|
|
||||||
positive_basic_workloads = []
|
positive_basic_workloads = []
|
||||||
negative_basic_workloads = []
|
negative_basic_workloads = []
|
||||||
|
@ -59,7 +59,7 @@ def apply_style(style, positive):
|
|||||||
return p.replace('{prompt}', positive).splitlines(), n.splitlines()
|
return p.replace('{prompt}', positive).splitlines(), n.splitlines()
|
||||||
|
|
||||||
|
|
||||||
def apply_wildcards(wildcard_text, rng):
|
def apply_wildcards(wildcard_text, rng, i, read_wildcards_in_order):
|
||||||
for _ in range(wildcards_max_bfs_depth):
|
for _ in range(wildcards_max_bfs_depth):
|
||||||
placeholders = re.findall(r'__([\w-]+)__', wildcard_text)
|
placeholders = re.findall(r'__([\w-]+)__', wildcard_text)
|
||||||
if len(placeholders) == 0:
|
if len(placeholders) == 0:
|
||||||
@ -72,7 +72,10 @@ def apply_wildcards(wildcard_text, rng):
|
|||||||
words = open(os.path.join(modules.config.path_wildcards, matches[0]), encoding='utf-8').read().splitlines()
|
words = open(os.path.join(modules.config.path_wildcards, matches[0]), encoding='utf-8').read().splitlines()
|
||||||
words = [x for x in words if x != '']
|
words = [x for x in words if x != '']
|
||||||
assert len(words) > 0
|
assert len(words) > 0
|
||||||
wildcard_text = wildcard_text.replace(f'__{placeholder}__', rng.choice(words), 1)
|
if read_wildcards_in_order:
|
||||||
|
wildcard_text = wildcard_text.replace(f'__{placeholder}__', words[i % len(words)], 1)
|
||||||
|
else:
|
||||||
|
wildcard_text = wildcard_text.replace(f'__{placeholder}__', rng.choice(words), 1)
|
||||||
except:
|
except:
|
||||||
print(f'[Wildcards] Warning: {placeholder}.txt missing or empty. '
|
print(f'[Wildcards] Warning: {placeholder}.txt missing or empty. '
|
||||||
f'Using "{placeholder}" as a normal word.')
|
f'Using "{placeholder}" as a normal word.')
|
||||||
|
4
webui.py
4
webui.py
@ -434,6 +434,7 @@ with shared.gradio_root:
|
|||||||
disable_seed_increment = gr.Checkbox(label='Disable seed increment',
|
disable_seed_increment = gr.Checkbox(label='Disable seed increment',
|
||||||
info='Disable automatic seed increment when image number is > 1.',
|
info='Disable automatic seed increment when image number is > 1.',
|
||||||
value=False)
|
value=False)
|
||||||
|
read_wildcards_in_order = gr.Checkbox(label="Read wildcards in order", value=False)
|
||||||
|
|
||||||
if not args_manager.args.disable_metadata:
|
if not args_manager.args.disable_metadata:
|
||||||
save_metadata_to_images = gr.Checkbox(label='Save Metadata to Images', value=modules.config.default_save_metadata_to_images,
|
save_metadata_to_images = gr.Checkbox(label='Save Metadata to Images', value=modules.config.default_save_metadata_to_images,
|
||||||
@ -578,7 +579,8 @@ with shared.gradio_root:
|
|||||||
ctrls = [currentTask, generate_image_grid]
|
ctrls = [currentTask, generate_image_grid]
|
||||||
ctrls += [
|
ctrls += [
|
||||||
prompt, negative_prompt, style_selections,
|
prompt, negative_prompt, style_selections,
|
||||||
performance_selection, aspect_ratios_selection, image_number, output_format, image_seed, sharpness, guidance_scale
|
performance_selection, aspect_ratios_selection, image_number, output_format, image_seed,
|
||||||
|
read_wildcards_in_order, sharpness, guidance_scale
|
||||||
]
|
]
|
||||||
|
|
||||||
ctrls += [base_model, refiner_model, refiner_switch] + lora_ctrls
|
ctrls += [base_model, refiner_model, refiner_switch] + lora_ctrls
|
||||||
|
Loading…
Reference in New Issue
Block a user