From 56bea579ccf66cc04239a1ad89cabbb5ff28f472 Mon Sep 17 00:00:00 2001 From: Manuel Schmid Date: Wed, 17 Jul 2024 22:58:16 +0200 Subject: [PATCH 1/3] fix: change metadata input from image to file allow metadata reading from jpeg and webp again see https://github.com/mashb1t/Fooocus/discussions/56#discussioncomment-10077227 --- webui.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/webui.py b/webui.py index 2eb0f609..07d6c0ec 100644 --- a/webui.py +++ b/webui.py @@ -339,12 +339,13 @@ with shared.gradio_root: with gr.TabItem(label='Metadata') as metadata_tab: with gr.Column(): - metadata_input_image = grh.Image(label='For images created by Fooocus', source='upload', type='filepath') + metadata_input_image = gr.File(label='For images created by Fooocus', source='upload', file_types=['image']) + # metadata_input_image = grh.Image(label='For images created by Fooocus', source='upload', type='filepath') metadata_json = gr.JSON(label='Metadata') metadata_import_button = gr.Button(value='Apply Metadata') - def trigger_metadata_preview(filepath): - parameters, metadata_scheme = modules.meta_parser.read_info_from_image(filepath) + def trigger_metadata_preview(file): + parameters, metadata_scheme = modules.meta_parser.read_info_from_image(file.name) results = {} if parameters is not None: From 6377339eead1dbe35a7a608d8fc34ad54e8d70e3 Mon Sep 17 00:00:00 2001 From: Manuel Schmid Date: Wed, 17 Jul 2024 23:08:00 +0200 Subject: [PATCH 2/3] Revert "fix: change metadata input from image to file" This reverts commit 56bea579ccf66cc04239a1ad89cabbb5ff28f472. --- webui.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/webui.py b/webui.py index 07d6c0ec..2eb0f609 100644 --- a/webui.py +++ b/webui.py @@ -339,13 +339,12 @@ with shared.gradio_root: with gr.TabItem(label='Metadata') as metadata_tab: with gr.Column(): - metadata_input_image = gr.File(label='For images created by Fooocus', source='upload', file_types=['image']) - # metadata_input_image = grh.Image(label='For images created by Fooocus', source='upload', type='filepath') + metadata_input_image = grh.Image(label='For images created by Fooocus', source='upload', type='filepath') metadata_json = gr.JSON(label='Metadata') metadata_import_button = gr.Button(value='Apply Metadata') - def trigger_metadata_preview(file): - parameters, metadata_scheme = modules.meta_parser.read_info_from_image(file.name) + def trigger_metadata_preview(filepath): + parameters, metadata_scheme = modules.meta_parser.read_info_from_image(filepath) results = {} if parameters is not None: From ac836c397845c334248cc03cf4785fb29b6929b6 Mon Sep 17 00:00:00 2001 From: Manuel Schmid Date: Wed, 17 Jul 2024 23:17:07 +0200 Subject: [PATCH 3/3] fix: use type pil for image upload to prevent conversion to png through temp file --- modules/meta_parser.py | 7 +++---- webui.py | 10 +++++----- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/modules/meta_parser.py b/modules/meta_parser.py index c2f68952..7aeb7e7a 100644 --- a/modules/meta_parser.py +++ b/modules/meta_parser.py @@ -603,9 +603,8 @@ def get_metadata_parser(metadata_scheme: MetadataScheme) -> MetadataParser: raise NotImplementedError -def read_info_from_image(filepath) -> tuple[str | None, MetadataScheme | None]: - with Image.open(filepath) as image: - items = (image.info or {}).copy() +def read_info_from_image(file) -> tuple[str | None, MetadataScheme | None]: + items = (file.info or {}).copy() parameters = items.pop('parameters', None) metadata_scheme = items.pop('fooocus_scheme', None) @@ -614,7 +613,7 @@ def read_info_from_image(filepath) -> tuple[str | None, MetadataScheme | None]: if parameters is not None and is_json(parameters): parameters = json.loads(parameters) elif exif is not None: - exif = image.getexif() + exif = file.getexif() # 0x9286 = UserComment parameters = exif.get(0x9286, None) # 0x927C = MakerNote diff --git a/webui.py b/webui.py index 2eb0f609..b041a73a 100644 --- a/webui.py +++ b/webui.py @@ -339,12 +339,12 @@ with shared.gradio_root: with gr.TabItem(label='Metadata') as metadata_tab: with gr.Column(): - metadata_input_image = grh.Image(label='For images created by Fooocus', source='upload', type='filepath') + metadata_input_image = grh.Image(label='For images created by Fooocus', source='upload', type='pil') metadata_json = gr.JSON(label='Metadata') metadata_import_button = gr.Button(value='Apply Metadata') - def trigger_metadata_preview(filepath): - parameters, metadata_scheme = modules.meta_parser.read_info_from_image(filepath) + def trigger_metadata_preview(file): + parameters, metadata_scheme = modules.meta_parser.read_info_from_image(file) results = {} if parameters is not None: @@ -1018,8 +1018,8 @@ with shared.gradio_root: load_parameter_button.click(modules.meta_parser.load_parameter_button_click, inputs=[prompt, state_is_generating, inpaint_mode], outputs=load_data_outputs, queue=False, show_progress=False) - def trigger_metadata_import(filepath, state_is_generating): - parameters, metadata_scheme = modules.meta_parser.read_info_from_image(filepath) + def trigger_metadata_import(file, state_is_generating): + parameters, metadata_scheme = modules.meta_parser.read_info_from_image(file) if parameters is None: print('Could not find metadata in the image!') parsed_parameters = {}