Files
CosmicLaca-ComfyUI_Primere_…/Nodes/modules/image_meta_reader.py
T
2023-12-17 21:48:58 +01:00

67 lines
2.3 KiB
Python

import json
import piexif
import pyexiv2
import piexif.helper
from PIL import Image
from .exif.automatic1111 import Automatic1111
from .exif.primere import Primere
from .exif.comfyui import ComfyUI
# OopCompanion:suppressRename
class ImageExifReader:
def __init__(self, file):
self._raw = ""
self._parser = {}
self._parameter = {}
self._tool = ""
self.read_data(file)
def read_data(self, file):
def is_json(jsoninput):
try:
json.loads(jsoninput)
except ValueError as e:
return False
return True
with Image.open(file) as f:
p2metadata = pyexiv2.Image(file)
is_primere = p2metadata.read_exif()
if 'Exif.Image.ImageDescription' in is_primere:
primere_exif_string = is_primere.get('Exif.Image.ImageDescription').strip()
if is_json(primere_exif_string) == True:
json_object = json.loads(primere_exif_string)
# keysList = {'positive', 'negative', 'positive_l', 'negative_l', 'positive_r', 'negative_r', 'seed', 'model_hash', 'model_name', 'sampler_name'}
# if not (keysList - json_object.keys()):
self._tool = "Primere"
self._parser = Primere(info=json_object)
else:
if f.format == "PNG":
if "parameters" in f.info:
print('A11')
self._tool = "Automatic1111"
self._parser = Automatic1111(info=f.info)
elif "prompt" in f.info:
print('Comfy')
self._tool = "ComfyUI"
self._parser = ComfyUI(info=f.info)
elif f.format == "JPEG" or f.format == "WEBP":
exif = piexif.load(f.info.get("exif")) or {}
self._raw = piexif.helper.UserComment.load(
exif.get("Exif").get(piexif.ExifIFD.UserComment)
)
if is_json(self._raw) != True:
self._tool = "Automatic1111"
self._parser = Automatic1111(raw=self._raw)
@property
def parser(self):
return self._parser
@property
def tool(self):
return self._tool