enable outcropping of random JPG/PNG images

- Works best with runwayML inpainting model
- Numerous code changes required to propagate seed to final metadata.
  Original code predicated on the image being generated within InvokeAI.
This commit is contained in:
Lincoln Stein 2022-11-08 15:22:32 +00:00
parent 6f9f848345
commit 0b529f0c57
4 changed files with 11 additions and 7 deletions

View File

@ -63,7 +63,7 @@ class Generator():
**kwargs **kwargs
) )
results = [] results = []
seed = seed if seed is not None else self.new_seed() seed = seed if seed is not None and seed > 0 else self.new_seed()
first_seed = seed first_seed = seed
seed, initial_noise = self.generate_initial_noise(seed, width, height) seed, initial_noise = self.generate_initial_noise(seed, width, height)

View File

@ -636,7 +636,7 @@ def split_weighted_subprompts(text, skip_normalize=False)->list:
weight_sum = sum(map(lambda x: x[1], parsed_prompts)) weight_sum = sum(map(lambda x: x[1], parsed_prompts))
if weight_sum == 0: if weight_sum == 0:
print( print(
"Warning: Subprompt weights add up to zero. Discarding and using even weights instead.") "* Warning: Subprompt weights add up to zero. Discarding and using even weights instead.")
equal_weight = 1 / max(len(parsed_prompts), 1) equal_weight = 1 / max(len(parsed_prompts), 1)
return [(x[0], equal_weight) for x in parsed_prompts] return [(x[0], equal_weight) for x in parsed_prompts]
return [(x[0], x[1] / weight_sum) for x in parsed_prompts] return [(x[0], x[1] / weight_sum) for x in parsed_prompts]

View File

@ -28,11 +28,12 @@ class Outcrop(object):
self.generate._set_sampler() self.generate._set_sampler()
def wrapped_callback(img,seed,**kwargs): def wrapped_callback(img,seed,**kwargs):
image_callback(img,orig_opt.seed,use_prefix=prefix,**kwargs) preferred_seed = orig_opt.seed if orig_opt.seed> 0 else seed
image_callback(img,preferred_seed,use_prefix=prefix,**kwargs)
result= self.generate.prompt2image( result= self.generate.prompt2image(
opt.prompt, orig_opt.prompt,
seed = opt.seed if opt.seed else orig_opt.seed, seed = orig_opt.seed if orig_opt.seed>0 else opt.seed,
sampler = self.generate.sampler, sampler = self.generate.sampler,
steps = opt.steps, steps = opt.steps,
cfg_scale = opt.cfg_scale, cfg_scale = opt.cfg_scale,

View File

@ -29,6 +29,7 @@ infile = None
def main(): def main():
"""Initialize command-line parsers and the diffusion model""" """Initialize command-line parsers and the diffusion model"""
global infile global infile
print('* Initializing, be patient...')
opt = Args() opt = Args()
args = opt.parse_args() args = opt.parse_args()
@ -46,7 +47,6 @@ def main():
print('--max_loaded_models must be >= 1; using 1') print('--max_loaded_models must be >= 1; using 1')
args.max_loaded_models = 1 args.max_loaded_models = 1
print('* Initializing, be patient...')
from ldm.generate import Generate from ldm.generate import Generate
# these two lines prevent a horrible warning message from appearing # these two lines prevent a horrible warning message from appearing
@ -668,7 +668,10 @@ def do_postprocess (gen, opt, callback):
def add_postprocessing_to_metadata(opt,original_file,new_file,tool,command): def add_postprocessing_to_metadata(opt,original_file,new_file,tool,command):
original_file = original_file if os.path.exists(original_file) else os.path.join(opt.outdir,original_file) original_file = original_file if os.path.exists(original_file) else os.path.join(opt.outdir,original_file)
new_file = new_file if os.path.exists(new_file) else os.path.join(opt.outdir,new_file) new_file = new_file if os.path.exists(new_file) else os.path.join(opt.outdir,new_file)
try:
meta = retrieve_metadata(original_file)['sd-metadata'] meta = retrieve_metadata(original_file)['sd-metadata']
except AttributeError:
meta = retrieve_metadata(new_file)['sd-metadata']
if 'image' not in meta: if 'image' not in meta:
meta = metadata_dumps(opt,seeds=[opt.seed])['image'] meta = metadata_dumps(opt,seeds=[opt.seed])['image']
meta['image'] = {} meta['image'] = {}