feat: use available aspect ratios from config, move function to util, change default visibility of label
This commit is contained in:
parent
a9ef2a12c7
commit
311c445090
|
|
@ -514,7 +514,7 @@ def add_ratio(x):
|
|||
|
||||
|
||||
default_aspect_ratio = add_ratio(default_aspect_ratio)
|
||||
available_aspect_ratios = [add_ratio(x) for x in available_aspect_ratios]
|
||||
available_aspect_ratios_labels = [add_ratio(x) for x in available_aspect_ratios]
|
||||
|
||||
|
||||
# Only write config in the first launch.
|
||||
|
|
|
|||
|
|
@ -123,7 +123,7 @@ def get_resolution(key: str, fallback: str | None, source_dict: dict, results: l
|
|||
h = source_dict.get(key, source_dict.get(fallback, default))
|
||||
width, height = eval(h)
|
||||
formatted = modules.config.add_ratio(f'{width}*{height}')
|
||||
if formatted in modules.config.available_aspect_ratios:
|
||||
if formatted in modules.config.available_aspect_ratios_labels:
|
||||
results.append(formatted)
|
||||
results.append(-1)
|
||||
results.append(-1)
|
||||
|
|
|
|||
|
|
@ -392,3 +392,25 @@ def makedirs_with_log(path):
|
|||
|
||||
def get_enabled_loras(loras: list) -> list:
|
||||
return [[lora[1], lora[2]] for lora in loras if lora[0]]
|
||||
|
||||
|
||||
def get_image_size_info(image: np.ndarray, available_aspect_ratios: list) -> str:
|
||||
try:
|
||||
image = Image.fromarray(np.uint8(image))
|
||||
width, height = image.size
|
||||
ratio = round(width / height, 2)
|
||||
gcd = math.gcd(width, height)
|
||||
lcm_ratio = f'{width // gcd}:{height // gcd}'
|
||||
size_info = f'Image Size: {width} x {height}, Ratio: {ratio}, {lcm_ratio}'
|
||||
|
||||
closest_ratio = min(available_aspect_ratios, key=lambda x: abs(ratio - float(x.split('*')[0]) / float(x.split('*')[1])))
|
||||
recommended_width, recommended_height = map(int, closest_ratio.split('*'))
|
||||
recommended_ratio = round(recommended_width / recommended_height, 2)
|
||||
recommended_gcd = math.gcd(recommended_width, recommended_height)
|
||||
recommended_lcm_ratio = f'{recommended_width // recommended_gcd}:{recommended_height // recommended_gcd}'
|
||||
|
||||
size_info += f'\nRecommended Size: {recommended_width} x {recommended_height}, Ratio: {recommended_ratio}, {recommended_lcm_ratio}'
|
||||
|
||||
return size_info
|
||||
except Exception as e:
|
||||
return f'Error reading image: {e}'
|
||||
|
|
|
|||
49
webui.py
49
webui.py
|
|
@ -17,10 +17,6 @@ import args_manager
|
|||
import copy
|
||||
import launch
|
||||
|
||||
import math
|
||||
import numpy as np
|
||||
from PIL import Image
|
||||
|
||||
from modules.sdxl_styles import legal_style_names
|
||||
from modules.private_logger import get_current_html_path
|
||||
from modules.ui_gradio_extensions import reload_javascript
|
||||
|
|
@ -224,47 +220,16 @@ with shared.gradio_root:
|
|||
choices=[flags.desc_type_photo, flags.desc_type_anime],
|
||||
value=flags.desc_type_photo)
|
||||
desc_btn = gr.Button(value='Describe this Image into Prompt')
|
||||
desc_image_size = gr.Markdown(label='Image Size', value='Image Size: None', elem_id='desc_image_size')
|
||||
desc_image_size = gr.Markdown(label='Image Size', elem_id='desc_image_size', visible=False)
|
||||
gr.HTML('<a href="https://github.com/lllyasviel/Fooocus/discussions/1363" target="_blank">\U0001F4D4 Document</a>')
|
||||
def trigger_image_sizes(image):
|
||||
try:
|
||||
if image is not None:
|
||||
image = Image.fromarray(np.uint8(image))
|
||||
width, height = image.size
|
||||
ratio = round(width / height, 2)
|
||||
gcd = math.gcd(width, height)
|
||||
lcm_ratio = f'{width//gcd}:{height//gcd}'
|
||||
size_info = f'Image Size: {width} x {height} , Ratio: {ratio} , {lcm_ratio}'
|
||||
|
||||
recommended_sizes = [
|
||||
'704*1408', '704*1344', '768*1344', '768*1280', '832*1216', '832*1152',
|
||||
'896*1152', '896*1088', '960*1088', '960*1024', '1024*1024', '1024*960',
|
||||
'1088*960', '1088*896', '1152*896', '1152*832', '1216*832', '1280*768',
|
||||
'1344*768', '1344*704', '1408*704', '1472*704', '1536*640', '1600*640',
|
||||
'1664*576', '1728*576'
|
||||
]
|
||||
def trigger_show_image_properties(image):
|
||||
value = modules.util.get_image_size_info(image, modules.config.available_aspect_ratios)
|
||||
return gr.update(value=value, visible=True)
|
||||
|
||||
closest_ratio = min(recommended_sizes, key=lambda x: abs(ratio - float(x.split('*')[0]) / float(x.split('*')[1])))
|
||||
recommended_width, recommended_height = map(int, closest_ratio.split('*'))
|
||||
recommended_ratio = round(recommended_width / recommended_height, 2)
|
||||
recommended_gcd = math.gcd(recommended_width, recommended_height)
|
||||
recommended_lcm_ratio = f'{recommended_width//recommended_gcd}:{recommended_height//recommended_gcd}'
|
||||
desc_input_image.upload(trigger_show_image_properties, inputs=desc_input_image,
|
||||
outputs=desc_image_size, show_progress=False, queue=False)
|
||||
|
||||
size_info += f'\nRecommended Size: {recommended_width} x {recommended_height} , Ratio: {recommended_ratio} , {recommended_lcm_ratio}'
|
||||
|
||||
return size_info
|
||||
else:
|
||||
return 'Image Size: None'
|
||||
except Exception as e:
|
||||
return f'Error reading image: {e}'
|
||||
|
||||
desc_input_image.upload(
|
||||
trigger_image_sizes,
|
||||
inputs=desc_input_image,
|
||||
outputs=desc_image_size,
|
||||
show_progress=False,
|
||||
queue=False
|
||||
)
|
||||
with gr.TabItem(label='Metadata') as load_tab:
|
||||
with gr.Column():
|
||||
metadata_input_image = grh.Image(label='Drag any image generated by Fooocus here', source='upload', type='filepath')
|
||||
|
|
@ -309,7 +274,7 @@ with shared.gradio_root:
|
|||
performance_selection = gr.Radio(label='Performance',
|
||||
choices=flags.Performance.list(),
|
||||
value=modules.config.default_performance)
|
||||
aspect_ratios_selection = gr.Radio(label='Aspect Ratios', choices=modules.config.available_aspect_ratios,
|
||||
aspect_ratios_selection = gr.Radio(label='Aspect Ratios', choices=modules.config.available_aspect_ratios_labels,
|
||||
value=modules.config.default_aspect_ratio, info='width × height',
|
||||
elem_classes='aspect_ratios')
|
||||
image_number = gr.Slider(label='Image Number', minimum=1, maximum=modules.config.default_max_image_number, step=1, value=modules.config.default_image_number)
|
||||
|
|
|
|||
Loading…
Reference in New Issue