Skip to content

Commit 9e2a3e2

Browse files
committed
Fix exif, add user_input to exif, and add user info logging
Squashed commit of the following: commit 3ac4664 Author: Hal <zhchaoxing@hotmail.com> Date: Fri Mar 15 11:35:54 2024 +0800 Update api.py commit c333fcd Author: Hal <zhchaoxing@hotmail.com> Date: Fri Mar 15 11:20:13 2024 +0800 Revert "sanity check, revert to default" This reverts commit aa0d545. commit aa0d545 Author: Hal <zhchaoxing@hotmail.com> Date: Thu Mar 14 20:08:51 2024 +0800 sanity check, revert to default commit 3b89d77 Author: Hal <zhchaoxing@hotmail.com> Date: Thu Mar 14 18:43:47 2024 +0800 Update api.py commit 7ba924a Author: Hal <zhchaoxing@hotmail.com> Date: Thu Mar 14 16:29:56 2024 +0800 add log of GenID commit cdaddb6 Author: zhchaoxing <zhchaoxing@hotmail.com> Date: Thu Jan 4 01:03:01 2024 -0800 debug commit 45f8b09 Author: zhchaoxing <zhchaoxing@hotmail.com> Date: Thu Jan 4 00:54:36 2024 -0800 debug commit e27eb8b Author: zhchaoxing <zhchaoxing@hotmail.com> Date: Thu Jan 4 00:13:50 2024 -0800 Update api.py commit b1e571f Author: zhchaoxing <zhchaoxing@hotmail.com> Date: Wed Jan 3 23:30:53 2024 -0800 debug commit 9bb4ec3 Author: zhchaoxing <zhchaoxing@hotmail.com> Date: Wed Jan 3 22:35:26 2024 -0800 debug commit f23dcb1 Author: zhchaoxing <zhchaoxing@hotmail.com> Date: Wed Jan 3 20:03:17 2024 -0800 debug commit e573427 Author: zhchaoxing <zhchaoxing@hotmail.com> Date: Wed Jan 3 17:34:41 2024 -0800 debug commit c2c7008 Author: zhchaoxing <zhchaoxing@hotmail.com> Date: Wed Jan 3 06:49:43 2024 -0800 debug commit 6c88788 Author: zhchaoxing <zhchaoxing@hotmail.com> Date: Wed Jan 3 05:13:28 2024 -0800 debug commit 39ba708 Author: zhchaoxing <zhchaoxing@hotmail.com> Date: Wed Jan 3 05:10:41 2024 -0800 debug commit 55f379f Author: zhchaoxing <zhchaoxing@hotmail.com> Date: Wed Jan 3 00:40:46 2024 -0800 debug commit f18cfae Author: zhchaoxing <zhchaoxing@hotmail.com> Date: Tue Jan 2 21:56:14 2024 -0800 debug commit f388d1a Author: zhchaoxing <zhchaoxing@hotmail.com> Date: Tue Jan 2 20:15:07 2024 -0800 debug commit b2f7a8d Author: zhchaoxing <zhchaoxing@hotmail.com> Date: Tue Jan 2 19:22:08 2024 -0800 debug Update api.py Update api.py
1 parent 283a5db commit 9e2a3e2

File tree

1 file changed

+62
-21
lines changed

1 file changed

+62
-21
lines changed

modules/api/api.py

+62-21
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,8 @@ def decode_base64_to_image(encoding):
133133
user_input_data = {}
134134

135135

136-
def set_img_exif_dict():
136+
def set_img_exif_dict(image_id="img_id_1"):
137+
# print(f"log@{datetime.datetime.now().strftime(f'%Y%m%d%H%M%S')} ***&&& set_img_exif_dict Writing exif")
137138
title = "AIRI"
138139
date_taken = "2001:01:01 01:01:01"
139140
global user_input_data
@@ -145,10 +146,12 @@ def set_img_exif_dict():
145146
user_id = "AIRI tester"
146147
if "user_id" in user_input_data:
147148
user_id = user_input_data['user_id']
148-
keywords = "Generated in AIRI platform. https://airilab.com"
149-
description = "An image processed by the AIRI platform."
149+
generation_id = "gen_id_1"
150+
if "generation_id" in user_input_data:
151+
generation_id = user_input_data['generation_id']
152+
keywords = f"Generated in AIRI platform. https://airilab.com . Generation ID: {generation_id}, Image ID: {image_id}"
153+
description = f"An image processed by the AIRI platform. Generation ID: {generation_id}, Image ID: {image_id}"
150154
software = "AIRI Platform v1.0"
151-
# imageid = "imageid?"
152155
# imagenum = "imagenum?"
153156
# seed = "seed?"
154157
exif_dict = {
@@ -193,6 +196,16 @@ def set_img_exif_dict():
193196
piexif.ExifIFD.UserComment: description.encode('utf-8'),
194197
}
195198
}
199+
200+
# def print_nested_dict(nested_dict, indent=0):
201+
# for key, value in nested_dict.items():
202+
# print('\t' * indent + str(key))
203+
# if isinstance(value, dict):
204+
# print_nested_dict(value, indent + 1)
205+
# else:
206+
# print('\t' * (indent + 1) + str(value))
207+
208+
# print_nested_dict(exif_dict)
196209
return exif_dict
197210

198211

@@ -220,9 +233,11 @@ def encode_pil_to_base64(image):
220233
exif_bytes = piexif.dump(set_img_exif_dict())
221234

222235
if opts.samples_format.lower() in ("jpg", "jpeg"):
223-
image.save(output_bytes, format="JPEG", exif = exif_bytes, quality=opts.jpeg_quality)
236+
image.save(output_bytes, format="JPEG", exif=exif_bytes, quality=opts.jpeg_quality)
237+
# print(f"log@{datetime.datetime.now().strftime(f'%Y%m%d%H%M%S')} ***&&& encode_pil_to_base64")
238+
# print(Image.open(output_bytes).getexif()) # Print the EXIF data
224239
else:
225-
image.save(output_bytes, format="WEBP", exif = exif_bytes, quality=opts.jpeg_quality)
240+
image.save(output_bytes, format="WEBP", exif=exif_bytes, quality=opts.jpeg_quality)
226241

227242
else:
228243
raise HTTPException(status_code=500, detail="Invalid image format")
@@ -231,7 +246,7 @@ def encode_pil_to_base64(image):
231246

232247
return base64.b64encode(bytes_data)
233248

234-
def export_pil_to_bytes(image, quality):
249+
def export_pil_to_bytes(image, quality, image_id=""):
235250
with io.BytesIO() as output_bytes:
236251

237252
if opts.samples_format.lower() == 'png':
@@ -244,10 +259,13 @@ def export_pil_to_bytes(image, quality):
244259
image.save(output_bytes, format="PNG", pnginfo=(metadata if use_metadata else None), quality=quality if quality else opts.jpeg_quality)
245260

246261
elif opts.samples_format.lower() in ("jpg", "jpeg", "webp"):
247-
parameters = image.info.get('parameters', None)
248-
exif_bytes = piexif.dump({
249-
"Exif": { piexif.ExifIFD.UserComment: piexif.helper.UserComment.dump(parameters or "", encoding="unicode") }
250-
})
262+
# parameters = image.info.get('parameters', None)
263+
# exif_bytes = piexif.dump({
264+
# "Exif": { piexif.ExifIFD.UserComment: piexif.helper.UserComment.dump(parameters or "", encoding="unicode") }
265+
# })
266+
# Convert dict to bytes
267+
exif_bytes = piexif.dump(set_img_exif_dict(image_id=image_id))
268+
251269
if opts.samples_format.lower() in ("jpg", "jpeg"):
252270
image.save(output_bytes, format="JPEG", exif = exif_bytes, quality=quality if quality else opts.jpeg_quality)
253271
else:
@@ -932,9 +950,13 @@ def post_invocations(self, b64images, quality):
932950
key = key[ : -1]
933951
images = []
934952
for b64image in b64images:
935-
bytes_data = export_pil_to_bytes(decode_to_image(b64image), quality)
953+
# bytes_data = export_pil_to_bytes(decode_to_image(b64image), quality)
936954
image_id = datetime.datetime.now().strftime(f"%Y%m%d%H%M%S-{uuid.uuid4()}")
937955
suffix = opts.samples_format.lower()
956+
bytes_data = export_pil_to_bytes(decode_to_image(b64image), quality, image_id=image_id)
957+
958+
print(f"log@{datetime.datetime.now().strftime(f'%Y%m%d%H%M%S')} GenID@{user_input_data['generation_id']} image_id@{image_id}")
959+
938960
shared.s3_client.put_object(
939961
Body=bytes_data,
940962
Bucket=bucket,
@@ -973,12 +995,12 @@ def req_logging(self, obj, indent=1):
973995

974996
def invocations(self, req: models.InvocationsRequest):
975997
with self.invocations_lock:
976-
print("\n ----------------------------invocation--------------------------- ")
977-
try:
978-
print("")
979-
self.req_logging(req)
980-
except Exception as e:
981-
print("console Log ran into issue: ", e)
998+
print(f"\n ----------------------------invocation log@{datetime.datetime.now().strftime(f'%Y%m%d%H%M%S')} --------------------------- ")
999+
# try:
1000+
# print("")
1001+
# self.req_logging(req)
1002+
# except Exception as e:
1003+
# print("console Log ran into issue: ", e)
9821004
# print(f"log@{datetime.datetime.now().strftime(f'%Y%m%d%H%M%S')} req in invocations: {req}")
9831005
global user_input_data
9841006
user_input_data = {}
@@ -988,8 +1010,27 @@ def invocations(self, req: models.InvocationsRequest):
9881010
# req.alwayson_scripts.pop("user_input")
9891011
if req.user_input != None:
9901012
user_input_data = req.user_input
1013+
print(f"\n -----<<<<<<< UserID@{user_input_data['user_id']} >>>>>>>----- ")
1014+
print(f"\n -----<<<<<<< GenID@{user_input_data['generation_id']} >>>>>>>----- ")
1015+
print(f"\n -----<<<<<<< WFID@{user_input_data['workflow']} >>>>>>>----- ")
1016+
print(f"\n Received user_input_data:\n"
1017+
f"user_id={user_input_data['user_id']},\n"
1018+
f"date_taken={user_input_data['date_taken']},\n"
1019+
f"project_id={user_input_data['project_id']},\n"
1020+
f"generation_id={user_input_data['generation_id']},\n"
1021+
f"workflow={user_input_data['workflow']},\n"
1022+
f"design_library_style={user_input_data['design_library_style']},\n"
1023+
f"camera={user_input_data['camera']},\n"
1024+
f"fidelity_level={user_input_data['fidelity_level']},\n"
1025+
f"additional_prompt={user_input_data['additional_prompt']},\n"
1026+
f"atmosphere={user_input_data['atmosphere']},\n"
1027+
f"img_width={user_input_data['img_width']},\n"
1028+
f"img_height={user_input_data['img_height']}\n"
1029+
)
9911030
# print(f"log@{datetime.datetime.now().strftime(f'%Y%m%d%H%M%S')} user_input processed in invocations")
9921031
# req.pop('user_input', None)
1032+
else:
1033+
print(f"\n !!!!!ERROR user_input_data missing!!!!!")
9931034

9941035
try:
9951036
if req.vae != None:
@@ -1021,7 +1062,7 @@ def invocations(self, req: models.InvocationsRequest):
10211062
if req.task == 'text-to-image':
10221063
if embeddings_s3uri != '':
10231064
response = requests.get('http://0.0.0.0:8080/controlnet/model_list', params={'update': True})
1024-
print('Controlnet models: ', response.text)
1065+
# print('Controlnet models: ', response.text)
10251066

10261067
shared.s3_download(embeddings_s3uri, shared.cmd_opts.embeddings_dir)
10271068
sd_hijack.model_hijack.embedding_db.load_textual_inversion_embeddings()
@@ -1039,7 +1080,7 @@ def invocations(self, req: models.InvocationsRequest):
10391080
return response
10401081
elif req.task == 'image-to-image':
10411082
response = requests.get('http://0.0.0.0:8080/controlnet/model_list', params={'update': True})
1042-
print('Controlnet models: ', response.text)
1083+
# print('Controlnet models: ', response.text)
10431084

10441085
if embeddings_s3uri != '':
10451086
shared.s3_download(embeddings_s3uri, shared.cmd_opts.embeddings_dir)
@@ -1059,7 +1100,7 @@ def invocations(self, req: models.InvocationsRequest):
10591100
elif req.task == 'upscale_from_feed':
10601101
# only get the one image (in base64)
10611102
intermediate_image = self.img2imgapi(req.img2img_payload).images
1062-
print('finished intermediate img2img')
1103+
# print('finished intermediate img2img')
10631104
try:
10641105
# update the base64 image # note might need to change to req.extras_single_payload['image'] if this does not work
10651106
req.extras_single_payload.image = intermediate_image[0]

0 commit comments

Comments
 (0)