Add Random SDXL Resolutions node
This commit is contained in:
@@ -88,10 +88,46 @@ This is a simple node that returns a random file path from a directory. In case
|
|||||||
|
|
||||||
To use this node you just have to indicate a directory path where the files you want to randomly select are located.
|
To use this node you just have to indicate a directory path where the files you want to randomly select are located.
|
||||||
|
|
||||||
|
## Image / Random SDXL Resolution
|
||||||
|
This node generates a random resolution from the official SDXL format list and returns the corresponding `width` and `height` values. It is useful to automatically vary image dimensions across a batch without manually switching resolutions. To add **Random SDXL Resolution** node: Right-click > Add Node > GtsuyaStudio > Image > Random SDXL Resolution.
|
||||||
|
|
||||||
|
To use this node, choose a generation **mode** from the dropdown and connect a **seed** value for reproducibility. The node will output the selected `width` and `height` integers, which can be wired directly into an **Empty Latent Image** or **KSampler** node.
|
||||||
|
|
||||||
|
### Inputs
|
||||||
|
|
||||||
|
| Parameter | Type | Description |
|
||||||
|
|-----------|------|-------------|
|
||||||
|
| `mode` | Dropdown | Filters available resolutions: `All`, `Landscape only`, `Portrait only`, `Square only` |
|
||||||
|
| `seed` | INT | Random seed for reproducibility. Connect to a global seed node to keep results consistent across your workflow. |
|
||||||
|
|
||||||
|
### Outputs
|
||||||
|
|
||||||
|
| Output | Type | Description |
|
||||||
|
|--------|------|-------------|
|
||||||
|
| `width` | INT | Width of the randomly selected resolution |
|
||||||
|
| `height` | INT | Height of the randomly selected resolution |
|
||||||
|
|
||||||
|
### Available Resolutions
|
||||||
|
|
||||||
|
| Orientation | Width | Height |
|
||||||
|
|-------------|-------|--------|
|
||||||
|
| Landscape | 1536 | 640 |
|
||||||
|
| Landscape | 1344 | 768 |
|
||||||
|
| Landscape | 1216 | 832 |
|
||||||
|
| Landscape | 1152 | 896 |
|
||||||
|
| Square | 1024 | 1024 |
|
||||||
|
| Portrait | 896 | 1152 |
|
||||||
|
| Portrait | 832 | 1216 |
|
||||||
|
| Portrait | 768 | 1344 |
|
||||||
|
| Portrait | 640 | 1536 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Changelog
|
## Changelog
|
||||||
|
|
||||||
|
### Version 1.3.0
|
||||||
|
- **New node — Random SDXL Resolution**: Randomly selects a resolution from the official SDXL format list (landscape, portrait, and square) and outputs `width` and `height` integers. Supports mode filtering and seed-based reproducibility.
|
||||||
|
|
||||||
### Version 1.2.0
|
### Version 1.2.0
|
||||||
- **Nested wildcards support**: Wildcards can now reference other wildcards recursively
|
- **Nested wildcards support**: Wildcards can now reference other wildcards recursively
|
||||||
- **Wildcard depth control**: New `wildcard_depth` parameter to prevent infinite loops (default: 50, range: 2-256)
|
- **Wildcard depth control**: New `wildcard_depth` parameter to prevent infinite loops (default: 50, range: 2-256)
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ NODE_CLASS_MAPPINGS = {
|
|||||||
"Danbooru (ID)": DanbooruID,
|
"Danbooru (ID)": DanbooruID,
|
||||||
"Replace Strings": ReplaceStrings,
|
"Replace Strings": ReplaceStrings,
|
||||||
"Random File From Path": RandomFileFromPath,
|
"Random File From Path": RandomFileFromPath,
|
||||||
|
"Random SDXL Resolutions": RandomSDXLResolutions
|
||||||
}
|
}
|
||||||
|
|
||||||
__all__ = ['NODE_CLASS_MAPPINGS']
|
__all__ = ['NODE_CLASS_MAPPINGS']
|
||||||
|
|||||||
@@ -349,6 +349,56 @@ class RandomFileFromPath:
|
|||||||
return (str(chosen_file),)
|
return (str(chosen_file),)
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------------------------------------------------------------------------------#
|
||||||
|
|
||||||
|
SDXL_RESOLUTIONS = {
|
||||||
|
"Landscape 1536x640": (1536, 640),
|
||||||
|
"Landscape 1344x768": (1344, 768),
|
||||||
|
"Landscape 1216x832": (1216, 832),
|
||||||
|
"Landscape 1152x896": (1152, 896),
|
||||||
|
"Square 1024x1024": (1024, 1024),
|
||||||
|
"Portrait 896x1152": (896, 1152),
|
||||||
|
"Portrait 832x1216": (832, 1216),
|
||||||
|
"Portrait 768x1344": (768, 1344),
|
||||||
|
"Portrait 640x1536": (640, 1536),
|
||||||
|
}
|
||||||
|
|
||||||
|
class RandomSDXLResolutions:
|
||||||
|
"""Select a random SDXL image resolution"""
|
||||||
|
|
||||||
|
CATEGORY = "utils/resolution"
|
||||||
|
FUNCTION = "get_resolution"
|
||||||
|
RETURN_TYPES = ("INT", "INT")
|
||||||
|
RETURN_NAMES = ("width", "height")
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def INPUT_TYPES(cls):
|
||||||
|
return {
|
||||||
|
"required": {
|
||||||
|
"mode": (
|
||||||
|
["All", "Landscape only", "Portrait only", "Square only"],
|
||||||
|
{"default": "All"},
|
||||||
|
),
|
||||||
|
"seed": ("INT", {"default": 0, "min": 0, "max": 0xFFFFFFFFFFFFFFFF}),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def get_resolution(self, mode: str, seed: int):
|
||||||
|
rng = random.Random(seed)
|
||||||
|
|
||||||
|
if mode == "Landscape only":
|
||||||
|
pool = {k: v for k, v in SDXL_RESOLUTIONS.items() if k.startswith("Landscape")}
|
||||||
|
elif mode == "Portrait only":
|
||||||
|
pool = {k: v for k, v in SDXL_RESOLUTIONS.items() if k.startswith("Portrait")}
|
||||||
|
elif mode == "Square only":
|
||||||
|
pool = {k: v for k, v in SDXL_RESOLUTIONS.items() if k.startswith("Square")}
|
||||||
|
else:
|
||||||
|
pool = SDXL_RESOLUTIONS
|
||||||
|
|
||||||
|
label, (width, height) = rng.choice(list(pool.items()))
|
||||||
|
print(f"[RandomSDXLResolutions] Selected resolution : {label} → {width} × {height}")
|
||||||
|
return (width, height)
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------------------------------------------------------------------------------#
|
# ---------------------------------------------------------------------------------------------------------------------------------------------------#
|
||||||
# Node display names mapping
|
# Node display names mapping
|
||||||
|
|
||||||
@@ -361,6 +411,7 @@ NODE_CLASS_MAPPINGS = {
|
|||||||
"DanbooruID": DanbooruID,
|
"DanbooruID": DanbooruID,
|
||||||
"ReplaceStrings": ReplaceStrings,
|
"ReplaceStrings": ReplaceStrings,
|
||||||
"RandomFileFromPath": RandomFileFromPath,
|
"RandomFileFromPath": RandomFileFromPath,
|
||||||
|
"RandomSDXLResolutions": RandomSDXLResolutions
|
||||||
}
|
}
|
||||||
|
|
||||||
NODE_DISPLAY_NAME_MAPPINGS = {
|
NODE_DISPLAY_NAME_MAPPINGS = {
|
||||||
@@ -371,4 +422,5 @@ NODE_DISPLAY_NAME_MAPPINGS = {
|
|||||||
"DanbooruID": "Danbooru (ID)",
|
"DanbooruID": "Danbooru (ID)",
|
||||||
"ReplaceStrings": "Replace Strings",
|
"ReplaceStrings": "Replace Strings",
|
||||||
"RandomFileFromPath": "Random File From Path",
|
"RandomFileFromPath": "Random File From Path",
|
||||||
|
"RandomSDXLResolutions": "Random SDXL Resolutions"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user