Files
bradsec-ComfyUI_ResolutionS…/resolution_selector.py
T
2023-08-18 16:12:24 +10:00

68 lines
2.4 KiB
Python

# Define resolution presets
# Resolutions which appear to work well for SDXL as used in https://github.com/lllyasviel/Fooocus
BASE_RESOLUTIONS = [(1024, 1024), (704, 1408), (704, 1344), (768, 1344), (768, 1280), (832, 1216), (832, 1152), (896, 1152), (896, 1088), (960, 1088), (960, 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)]
# Create a list of resolution strings for the drop-down menu
resolution_strings = [f"{width}x{height}" for width, height in BASE_RESOLUTIONS]
# Create the custom node class
class ResolutionSelector:
"""
A node to provide a drop-down list of resolutions and returns two int values (width and height).
"""
def __init__(self):
pass
@classmethod
def INPUT_TYPES(s):
"""
Return a dictionary which contains config for all input fields.
"""
return {
"required": {
"base_resolution": (resolution_strings,),
"base_adjustment": (["SDXL (None)", "SD21 (75%)", "SD15 (50%)"],)
}
}
RETURN_TYPES = ("INT", "INT")
RETURN_NAMES = ("width", "height")
FUNCTION = "select_resolution"
CATEGORY = 'utils'
@staticmethod
def select_resolution(base_resolution, base_adjustment):
"""
Returns the width and height based on the selected resolution and adjustment.
Args:
base_resolution (str): Selected resolution in the format "widthxheight".
base_adjustment (str): Selected adjustment (resolution values reduction) based on Stable Diffusion version.
Returns:
Tuple[int, int]: Adjusted width and height.
"""
try:
width, height = map(int, base_resolution.split('x'))
except ValueError:
raise ValueError("Invalid base_resolution format.")
adjustment_factors = {"SDXL (None)": 1, "SD21 (75%)": 0.75, "SD15 (50%)": 0.5}
factor = adjustment_factors.get(base_adjustment)
if factor is None:
raise ValueError("Invalid base_adjustment value.")
width = int(width * factor)
height = int(height * factor)
return width, height
NODE_CLASS_MAPPINGS = {
"ResolutionSelector": ResolutionSelector,
}
NODE_DISPLAY_NAME_MAPPINGS = {
"ResolutionSelector": "Resolution Selector (w x h)",
}