mirror of
https://github.com/vladmandic/automatic
synced 2026-09-19 01:04:32 +02:00
update scripts
This commit is contained in:
+5
-2
@@ -20,6 +20,8 @@ Service release addressing all zero-day issues reported so far...
|
||||
- fix chainner upscalers color clipping
|
||||
- fix for base+refiner workflow in diffusers mode: number of steps, diffuser pipe mode
|
||||
- fix for prompt encoder with refiner in diffusers mode
|
||||
- fix prompts-from-file saving incorrect metadata
|
||||
- directml and ipex updates
|
||||
- force second requirements check on startup
|
||||
- remove lyco, multiple_tqdm
|
||||
- enhance extension compatibility for exensions directly importing codeformers
|
||||
@@ -33,8 +35,9 @@ Service release addressing all zero-day issues reported so far...
|
||||
|
||||
### Dev branch
|
||||
|
||||
- Remove external clone of items in `/repositories`
|
||||
- Implement Lora OFT, thanks @antis0007 and @ai-casanova
|
||||
- remove external clone of items in `/repositories`
|
||||
- add **lora oft** support, thanks @antis0007 and @ai-casanova
|
||||
- **upscalers compile** option, thanks @disty0
|
||||
|
||||
|
||||
**Themes**
|
||||
|
||||
+1
-1
@@ -110,7 +110,7 @@ class Upscaler:
|
||||
return modelloader.load_models(model_path=self.model_path, model_url=self.model_url, command_path=self.user_path)
|
||||
|
||||
def update_status(self, prompt):
|
||||
print(f"\nextras: {prompt}", file=modules.shared.progress_print_out)
|
||||
modules.shared.log.info(f'Upscaler: type={self.name} model="{prompt}"')
|
||||
|
||||
def find_model(self, path):
|
||||
info = None
|
||||
|
||||
@@ -4,7 +4,7 @@ from PIL import Image, ImageDraw
|
||||
import modules.scripts as scripts
|
||||
from modules import images, devices
|
||||
from modules.processing import Processed, process_images
|
||||
from modules.shared import opts, state
|
||||
from modules.shared import opts, state, log
|
||||
|
||||
|
||||
class Script(scripts.Script):
|
||||
@@ -102,7 +102,7 @@ class Script(scripts.Script):
|
||||
work_latent_mask.append(tiledata_latent_mask[2])
|
||||
|
||||
batch_count = len(work)
|
||||
print(f"Poor man's outpainting will process a total of {len(work)} images tiled as {len(grid.tiles[0][2])}x{len(grid.tiles)}.")
|
||||
log.info(f"Poor-man-outpainting: images={len(work)} tiles={len(grid.tiles[0][2])}x{len(grid.tiles)}.")
|
||||
|
||||
state.job_count = batch_count
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ import gradio as gr
|
||||
import modules.scripts as scripts
|
||||
from modules import images
|
||||
from modules.processing import process_images
|
||||
from modules.shared import opts, state
|
||||
from modules.shared import opts, state, log
|
||||
import modules.sd_samplers
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ class Script(scripts.Script):
|
||||
p.n_iter = math.ceil(len(all_prompts) / p.batch_size)
|
||||
p.do_not_save_grid = True
|
||||
|
||||
print(f"Prompt matrix will create {len(all_prompts)} images using a total of {p.n_iter} batches.")
|
||||
log.info(f"Prompt-matrix: images={len(all_prompts)} batches={p.n_iter}")
|
||||
|
||||
if prompt_type == "positive":
|
||||
p.prompt = all_prompts
|
||||
|
||||
@@ -5,7 +5,7 @@ import gradio as gr
|
||||
import modules.scripts as scripts
|
||||
from modules import sd_samplers, errors
|
||||
from modules.processing import Processed, process_images
|
||||
from modules.shared import state
|
||||
from modules.shared import state, log
|
||||
|
||||
|
||||
def process_string_tag(tag):
|
||||
@@ -56,15 +56,11 @@ def cmdargs(line):
|
||||
args = shlex.split(line)
|
||||
pos = 0
|
||||
res = {}
|
||||
|
||||
while pos < len(args):
|
||||
arg = args[pos]
|
||||
|
||||
assert arg.startswith("--"), f'must start with "--": {arg}'
|
||||
assert pos+1 < len(args), f'missing argument for command line option {arg}'
|
||||
|
||||
tag = arg[2:]
|
||||
|
||||
if tag == "prompt" or tag == "negative_prompt":
|
||||
pos += 1
|
||||
prompt = args[pos]
|
||||
@@ -76,18 +72,13 @@ def cmdargs(line):
|
||||
res[tag] = prompt
|
||||
continue
|
||||
|
||||
|
||||
func = prompt_tags.get(tag, None)
|
||||
assert func, f'unknown commandline option: {arg}'
|
||||
|
||||
val = args[pos+1]
|
||||
if tag == "sampler_name":
|
||||
val = sd_samplers.samplers_map.get(val.lower(), None)
|
||||
|
||||
res[tag] = func(val)
|
||||
|
||||
pos += 2
|
||||
|
||||
return res
|
||||
|
||||
|
||||
@@ -104,27 +95,21 @@ class Script(scripts.Script):
|
||||
return "Prompts from File"
|
||||
|
||||
def ui(self, is_img2img):
|
||||
checkbox_iterate = gr.Checkbox(label="Iterate seed every line", value=False, elem_id=self.elem_id("checkbox_iterate"))
|
||||
checkbox_iterate_batch = gr.Checkbox(label="Use same random seed for all lines", value=False, elem_id=self.elem_id("checkbox_iterate_batch"))
|
||||
|
||||
prompt_txt = gr.Textbox(label="List of prompt inputs", lines=1, elem_id=self.elem_id("prompt_txt"))
|
||||
file = gr.File(label="Upload prompt inputs", type='binary', elem_id=self.elem_id("file"))
|
||||
|
||||
with gr.Row():
|
||||
checkbox_iterate = gr.Checkbox(label="Iterate seed per line", value=False, elem_id=self.elem_id("checkbox_iterate"))
|
||||
checkbox_iterate_batch = gr.Checkbox(label="Use same seed", value=False, elem_id=self.elem_id("checkbox_iterate_batch"))
|
||||
prompt_txt = gr.Textbox(label="Prompts", lines=1, elem_id=self.elem_id("prompt_txt"))
|
||||
file = gr.File(label="Upload prompts", type='binary', elem_id=self.elem_id("file"))
|
||||
file.change(fn=load_prompt_file, inputs=[file], outputs=[file, prompt_txt, prompt_txt], show_progress=False)
|
||||
|
||||
# We start at one line. When the text changes, we jump to seven lines, or two lines if no \n.
|
||||
# We don't shrink back to 1, because that causes the control to ignore [enter], and it may
|
||||
# be unclear to the user that shift-enter is needed.
|
||||
prompt_txt.change(lambda tb: gr.update(lines=7) if ("\n" in tb) else gr.update(lines=2), inputs=[prompt_txt], outputs=[prompt_txt], show_progress=False)
|
||||
return [checkbox_iterate, checkbox_iterate_batch, prompt_txt]
|
||||
|
||||
def run(self, p, checkbox_iterate, checkbox_iterate_batch, prompt_txt: str): # pylint: disable=arguments-differ
|
||||
lines = [x.strip() for x in prompt_txt.splitlines()]
|
||||
lines = [x for x in lines if len(x) > 0]
|
||||
|
||||
job_count = 0
|
||||
jobs = []
|
||||
|
||||
for line in lines:
|
||||
if "--" in line:
|
||||
try:
|
||||
@@ -134,33 +119,27 @@ class Script(scripts.Script):
|
||||
args = {"prompt": line}
|
||||
else:
|
||||
args = {"prompt": line}
|
||||
|
||||
job_count += args.get("n_iter", p.n_iter)
|
||||
|
||||
jobs.append(args)
|
||||
|
||||
print(f"Will process {len(lines)} lines in {job_count} jobs.")
|
||||
log.info(f"Prompts-from-file: lines={len(lines)} jobs={job_count}")
|
||||
if (checkbox_iterate or checkbox_iterate_batch) and p.seed == -1:
|
||||
p.seed = int(random.randrange(4294967294))
|
||||
|
||||
state.job_count = job_count
|
||||
|
||||
images = []
|
||||
all_prompts = []
|
||||
all_seeds = []
|
||||
infotexts = []
|
||||
for args in jobs:
|
||||
state.job = f"{state.job_no + 1} out of {state.job_count}"
|
||||
|
||||
copy_p = copy.copy(p)
|
||||
for k, v in args.items():
|
||||
setattr(copy_p, k, v)
|
||||
|
||||
proc = process_images(copy_p)
|
||||
all_seeds.append(proc.seed)
|
||||
images += proc.images
|
||||
|
||||
if checkbox_iterate:
|
||||
p.seed = p.seed + (p.batch_size * p.n_iter)
|
||||
all_prompts += proc.all_prompts
|
||||
infotexts += proc.infotexts
|
||||
|
||||
return Processed(p, images, p.seed, "", all_prompts=all_prompts, infotexts=infotexts)
|
||||
return Processed(p, images, p.seed, "", all_prompts=all_prompts, all_seeds=all_seeds, infotexts=infotexts)
|
||||
|
||||
@@ -4,7 +4,7 @@ from PIL import Image
|
||||
import modules.scripts as scripts
|
||||
from modules import processing, shared, images, devices
|
||||
from modules.processing import Processed
|
||||
from modules.shared import opts, state
|
||||
from modules.shared import opts, state, log
|
||||
|
||||
|
||||
class Script(scripts.Script):
|
||||
@@ -61,7 +61,7 @@ class Script(scripts.Script):
|
||||
batch_count = math.ceil(len(work) / batch_size)
|
||||
state.job_count = batch_count * upscale_count
|
||||
|
||||
print(f"SD upscaling will process a total of {len(work)} images tiled as {len(grid.tiles[0][2])}x{len(grid.tiles)} per upscale in a total of {state.job_count} batches.")
|
||||
log.info(f"SD upscale: images={len(work)} tile={len(grid.tiles[0][2])}x{len(grid.tiles)} batches={state.job_count}")
|
||||
|
||||
result_images = []
|
||||
for n in range(upscale_count):
|
||||
|
||||
@@ -700,5 +700,3 @@ class Script(scripts.Script):
|
||||
del processed.all_seeds[1]
|
||||
del processed.infotexts[1]
|
||||
return processed
|
||||
|
||||
print('HERE', [x.name for x in sd_samplers.samplers])
|
||||
|
||||
Reference in New Issue
Block a user