mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
f816526d0d
- supports gfpgan, esrgan, codeformer and embiggen - To use: dream> !fix ./outputs/img-samples/000056.292144555.png -ft gfpgan -U2 -G0.8 dream> !fix ./outputs/img-samples/000056.292144555.png -ft codeformer -G 0.8 dream> !fix ./outputs/img-samples/000056.29214455.png -U4 dream> !fix ./outputs/img-samples/000056.292144555.png -embiggen 1.5 The first example invokes gfpgan to fix faces and esrgan to upscale. The second example invokes codeformer to fix faces, no upscaling The third example uses esrgan to upscale 4X The four example runs embiggen to enlarge 1.5X - This is very preliminary work. There are some anomalies to note: 1. The syntax is non-obvious. I would prefer something like: !fix esrgan,gfpgan !fix esrgan !fix embiggen,codeformer However, this will require refactoring the gfpgan and embiggen code. 2. Images generated using gfpgan, esrgan or codeformer all are named "xxxxxx.xxxxxx.postprocessed.png" and the original is saved. However, the prefix is a new one that is not related to the original. 3. Images generated using embiggen are named "xxxxx.xxxxxxx.png", and once again the prefix is new. I'm not sure whether the prefix should be aligned with the original file's prefix or not. Probably not, but opinions welcome.
132 lines
4.1 KiB
Python
132 lines
4.1 KiB
Python
"""
|
|
Readline helper functions for dream.py (linux and mac only).
|
|
"""
|
|
import os
|
|
import re
|
|
import atexit
|
|
|
|
# ---------------readline utilities---------------------
|
|
try:
|
|
import readline
|
|
|
|
readline_available = True
|
|
except:
|
|
readline_available = False
|
|
|
|
|
|
class Completer:
|
|
def __init__(self, options):
|
|
self.options = sorted(options)
|
|
return
|
|
|
|
def complete(self, text, state):
|
|
buffer = readline.get_line_buffer()
|
|
|
|
if text.startswith(('-I', '--init_img','-M','--init_mask',
|
|
'--init_color')):
|
|
return self._path_completions(text, state, ('.png','.jpg','.jpeg'))
|
|
|
|
if buffer.strip().endswith('pp') or text.startswith(('.', '/')):
|
|
return self._path_completions(text, state, ('.png','.jpg','.jpeg'))
|
|
|
|
response = None
|
|
if state == 0:
|
|
# This is the first time for this text, so build a match list.
|
|
if text:
|
|
self.matches = [
|
|
s for s in self.options if s and s.startswith(text)
|
|
]
|
|
else:
|
|
self.matches = self.options[:]
|
|
|
|
# Return the state'th item from the match list,
|
|
# if we have that many.
|
|
try:
|
|
response = self.matches[state]
|
|
except IndexError:
|
|
response = None
|
|
return response
|
|
|
|
def _path_completions(self, text, state, extensions):
|
|
# get the path so far
|
|
# TODO: replace this mess with a regular expression match
|
|
if text.startswith('-I'):
|
|
path = text.replace('-I', '', 1).lstrip()
|
|
elif text.startswith('--init_img='):
|
|
path = text.replace('--init_img=', '', 1).lstrip()
|
|
elif text.startswith('--init_mask='):
|
|
path = text.replace('--init_mask=', '', 1).lstrip()
|
|
elif text.startswith('-M'):
|
|
path = text.replace('-M', '', 1).lstrip()
|
|
elif text.startswith('--init_color='):
|
|
path = text.replace('--init_color=', '', 1).lstrip()
|
|
else:
|
|
path = text
|
|
|
|
matches = list()
|
|
|
|
path = os.path.expanduser(path)
|
|
if len(path) == 0:
|
|
matches.append(text + './')
|
|
else:
|
|
dir = os.path.dirname(path)
|
|
dir_list = os.listdir(dir)
|
|
for n in dir_list:
|
|
if n.startswith('.') and len(n) > 1:
|
|
continue
|
|
full_path = os.path.join(dir, n)
|
|
if full_path.startswith(path):
|
|
if os.path.isdir(full_path):
|
|
matches.append(
|
|
os.path.join(os.path.dirname(text), n) + '/'
|
|
)
|
|
elif n.endswith(extensions):
|
|
matches.append(os.path.join(os.path.dirname(text), n))
|
|
|
|
try:
|
|
response = matches[state]
|
|
except IndexError:
|
|
response = None
|
|
return response
|
|
|
|
|
|
if readline_available:
|
|
readline.set_completer(
|
|
Completer(
|
|
[
|
|
'--steps','-s',
|
|
'--seed','-S',
|
|
'--iterations','-n',
|
|
'--width','-W','--height','-H',
|
|
'--cfg_scale','-C',
|
|
'--grid','-g',
|
|
'--individual','-i',
|
|
'--init_img','-I',
|
|
'--init_mask','-M',
|
|
'--init_color',
|
|
'--strength','-f',
|
|
'--variants','-v',
|
|
'--outdir','-o',
|
|
'--sampler','-A','-m',
|
|
'--embedding_path',
|
|
'--device',
|
|
'--grid','-g',
|
|
'--gfpgan_strength','-G',
|
|
'--upscale','-U',
|
|
'-save_orig','--save_original',
|
|
'--skip_normalize','-x',
|
|
'--log_tokenization','t',
|
|
]
|
|
).complete
|
|
)
|
|
readline.set_completer_delims(' ')
|
|
readline.parse_and_bind('tab: complete')
|
|
|
|
histfile = os.path.join(os.path.expanduser('~'), '.dream_history')
|
|
try:
|
|
readline.read_history_file(histfile)
|
|
readline.set_history_length(1000)
|
|
except FileNotFoundError:
|
|
pass
|
|
atexit.register(readline.write_history_file, histfile)
|