Initial commit

This commit is contained in:
bradsec
2023-08-18 16:12:24 +10:00
committed by GitHub
commit 851656b42e
5 changed files with 120 additions and 0 deletions
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 BRADSEC
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+28
View File
@@ -0,0 +1,28 @@
# Custom Node - ResolutionSelector for ComfyUI
Custom image resolution helper node for [ComfyUI](https://github.com/comfyanonymous/ComfyUI)
- Select base SDXL resolution, width and height are returned as INT values.
- If using older model SD 1.5 or SD 2.1 use the base adjustment dropdown. This will adjust (reduce) the base_resolution to suit the model. ie. 1024 (SDXL) will equal 768 in SD21 and 512 in SD15.
- Resolution list based off what is currently being used in the [Fooocus SDXL Web UI](https://github.com/lllyasviel/Fooocus)
### Installation
```
# Change to the directory you installed ComfyUI
cd pathTo/ComfyUI
# Change to the custom_nodes directory
cd custom_nodes
git clone https://github.com/bradsec/ComfyUI_ResolutionSelector.git
# Restart ComfyUI
```
- The new node can be found under:
`Add Node > utils > Resolution Selector (w x h)`
![image](resolutionselector_node.png)
+3
View File
@@ -0,0 +1,3 @@
from .resolution_selector import NODE_CLASS_MAPPINGS, NODE_DISPLAY_NAME_MAPPINGS
__all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS']
+68
View File
@@ -0,0 +1,68 @@
# 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)",
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB