|
import re |
|
import base64 |
|
import html |
|
from io import BytesIO |
|
|
|
|
|
def image_to_base64(image): |
|
|
|
buffered = BytesIO() |
|
image.save(buffered, format="PNG") |
|
|
|
|
|
img_str = base64.b64encode(buffered.getvalue()) |
|
|
|
return img_str.decode('utf-8') |
|
|
|
|
|
def remove_id_and_ext(text): |
|
text = re.sub(r'\[.*\]$', '', text) |
|
extension = text[-12:].strip() |
|
if extension == "safetensors": |
|
text = text[:-13] |
|
elif extension == "ckpt": |
|
text = text[:-4] |
|
return text |
|
|
|
|
|
def extract_data(text): |
|
results = {} |
|
patterns = { |
|
'prompt': r'(.*)', |
|
'negative_prompt': r'Negative prompt: (.*)', |
|
'steps': r'Steps: (\d+),', |
|
'seed': r'Seed: (\d+),', |
|
'sampler': r'Sampler:\s*([^\s,]+(?:\s+[^\s,]+)*)', |
|
'model': r'Model:\s*([^\s,]+)', |
|
'cfg_scale': r'CFG scale:\s*([\d\.]+)', |
|
'size': r'Size:\s*([0-9]+x[0-9]+)' |
|
} |
|
for key in ['prompt', 'negative_prompt', 'steps', 'seed', 'sampler', 'model', 'cfg_scale', 'size']: |
|
match = re.search(patterns[key], text) |
|
if match: |
|
results[key] = match.group(1) |
|
else: |
|
results[key] = None |
|
if results['size'] is not None: |
|
w, h = results['size'].split("x") |
|
results['w'] = w |
|
results['h'] = h |
|
else: |
|
results['w'] = None |
|
results['h'] = None |
|
return results |
|
|
|
|
|
def place_lora(current_prompt, lora_name): |
|
pattern = r"<lora:" + lora_name + r":.*?>" |
|
|
|
if re.search(pattern, current_prompt): |
|
return re.sub(pattern, "", current_prompt) |
|
else: |
|
return current_prompt + " <lora:" + lora_name + ":1> " |
|
|
|
|
|
def plaintext_to_html(text, classname=None): |
|
content = "<br>\n".join(html.escape(x) for x in text.split('\n')) |
|
|
|
return f"<p class='{classname}'>{content}</p>" if classname else f"<p>{content}</p>" |
|
|
|
|
|
def get_exif_data(image): |
|
items = image.info |
|
|
|
info = '' |
|
for key, text in items.items(): |
|
info += f""" |
|
<div> |
|
<p><b>{plaintext_to_html(str(key))}</b></p> |
|
<p>{plaintext_to_html(str(text))}</p> |
|
</div> |
|
""".strip() + "\n" |
|
|
|
if len(info) == 0: |
|
message = "Nothing found in the image." |
|
info = f"<div><p>{message}<p></div>" |
|
|
|
return info |