mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
fix incorrect handling of single quotes in prompts
This commit is contained in:
parent
62e1cb48fd
commit
f6b31d51e0
@ -172,6 +172,7 @@ class Args(object):
|
||||
command = cmd_string.replace("'", "\\'")
|
||||
try:
|
||||
elements = shlex.split(command)
|
||||
elements = [x.replace("\\'","'") for x in elements]
|
||||
except ValueError:
|
||||
import sys, traceback
|
||||
print(traceback.format_exc(), file=sys.stderr)
|
||||
@ -935,7 +936,7 @@ def metadata_loads(metadata) -> list:
|
||||
for image in images:
|
||||
# repack the prompt and variations
|
||||
if 'prompt' in image:
|
||||
image['prompt'] = ','.join([':'.join([x['prompt'], str(x['weight'])]) for x in image['prompt']])
|
||||
image['prompt'] = repack_prompt(image['prompt'])
|
||||
if 'variations' in image:
|
||||
image['variations'] = ','.join([':'.join([str(x['seed']),str(x['weight'])]) for x in image['variations']])
|
||||
# fix a bit of semantic drift here
|
||||
@ -943,12 +944,19 @@ def metadata_loads(metadata) -> list:
|
||||
opt = Args()
|
||||
opt._cmd_switches = Namespace(**image)
|
||||
results.append(opt)
|
||||
except KeyError as e:
|
||||
except Exception as e:
|
||||
import sys, traceback
|
||||
print('>> badly-formatted metadata',file=sys.stderr)
|
||||
print('>> could not read metadata',file=sys.stderr)
|
||||
print(traceback.format_exc(), file=sys.stderr)
|
||||
return results
|
||||
|
||||
def repack_prompt(prompt_list:list)->str:
|
||||
# in the common case of no weighting syntax, just return the prompt as is
|
||||
if len(prompt_list) > 1:
|
||||
return ','.join([':'.join([x['prompt'], str(x['weight'])]) for x in prompt_list])
|
||||
else:
|
||||
return prompt_list[0]['prompt']
|
||||
|
||||
# image can either be a file path on disk or a base64-encoded
|
||||
# representation of the file's contents
|
||||
def calculate_init_img_hash(image_string):
|
||||
|
@ -800,19 +800,33 @@ def retrieve_dream_command(opt,command,completer):
|
||||
will retrieve and format the dream command used to generate the image,
|
||||
and pop it into the readline buffer (linux, Mac), or print out a comment
|
||||
for cut-and-paste (windows)
|
||||
|
||||
Given a wildcard path to a folder with image png files,
|
||||
will retrieve and format the dream command used to generate the images,
|
||||
and save them to a file commands.txt for further processing
|
||||
'''
|
||||
if len(command) == 0:
|
||||
return
|
||||
|
||||
tokens = command.split()
|
||||
if len(tokens) > 1:
|
||||
outfilepath = tokens[1]
|
||||
else:
|
||||
outfilepath = "commands.txt"
|
||||
|
||||
return write_commands(opt,tokens)
|
||||
|
||||
try:
|
||||
cmd = dream_cmd_from_png(tokens[0])
|
||||
except OSError:
|
||||
print(f'## {path}: file could not be read')
|
||||
except (KeyError, AttributeError, IndexError):
|
||||
print(f'## {path}: file has no metadata')
|
||||
except:
|
||||
print(f'## {path}: file could not be processed')
|
||||
if len(cmd)>0:
|
||||
completer.set_line(cmd)
|
||||
|
||||
def write_commands(opt, tokens:list):
|
||||
file_path = tokens[0]
|
||||
outfilepath = tokens[1]
|
||||
|
||||
dir,basename = os.path.split(file_path)
|
||||
if len(dir) == 0:
|
||||
dir = opt.outdir
|
||||
@ -827,28 +841,23 @@ def retrieve_dream_command(opt,command,completer):
|
||||
return
|
||||
|
||||
commands = []
|
||||
cmd = None
|
||||
for path in paths:
|
||||
try:
|
||||
cmd = dream_cmd_from_png(path)
|
||||
except OSError:
|
||||
print(f'## {path}: file could not be read')
|
||||
continue
|
||||
except (KeyError, AttributeError, IndexError):
|
||||
print(f'## {path}: file has no metadata')
|
||||
continue
|
||||
except:
|
||||
print(f'## {path}: file could not be processed')
|
||||
continue
|
||||
|
||||
commands.append(f'# {path}')
|
||||
commands.append(cmd)
|
||||
|
||||
with open(outfilepath, 'w', encoding='utf-8') as f:
|
||||
f.write('\n'.join(commands))
|
||||
print(f'>> File {outfilepath} with commands created')
|
||||
|
||||
if len(commands) == 2:
|
||||
completer.set_line(commands[1])
|
||||
if cmd:
|
||||
commands.append(f'# {path}')
|
||||
commands.append(cmd)
|
||||
if len(commands)>0:
|
||||
with open(outfilepath, 'w', encoding='utf-8') as f:
|
||||
f.write('\n'.join(commands))
|
||||
print(f'>> File {outfilepath} with commands created')
|
||||
|
||||
######################################
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user