| | 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 |