Enhance NativeImageSizesNode to support scaling of image dimensions
This commit is contained in:
@@ -11,6 +11,8 @@ IMAGE_SIZE_PRESETS: dict[str, tuple[int, int]] = {
|
||||
"9:16": (928, 1664),
|
||||
}
|
||||
|
||||
SCALE_PRESETS: tuple[str, str, str] = ("0.5", "1", "2")
|
||||
|
||||
|
||||
class NativeImageSizesNode:
|
||||
NODE_KEY: str = "NativeImageSizes"
|
||||
@@ -21,6 +23,7 @@ class NativeImageSizesNode:
|
||||
return {
|
||||
"required": {
|
||||
"preset": (list(IMAGE_SIZE_PRESETS.keys()),),
|
||||
"scale": (list(SCALE_PRESETS),),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,9 +32,10 @@ class NativeImageSizesNode:
|
||||
FUNCTION: str = "select_size"
|
||||
CATEGORY: str = "image/resolution"
|
||||
|
||||
def select_size(self, preset: str) -> tuple[int, int]:
|
||||
def select_size(self, preset: str, scale: str) -> tuple[int, int]:
|
||||
width, height = IMAGE_SIZE_PRESETS[preset]
|
||||
return (width, height)
|
||||
factor = float(scale)
|
||||
return (round(width * factor), round(height * factor))
|
||||
|
||||
|
||||
NODE_CLASS_MAPPINGS, NODE_DISPLAY_NAME_MAPPINGS = build_node_mappings(globals())
|
||||
|
||||
@@ -14,17 +14,30 @@ from nodes.native_image_sizes import (
|
||||
)
|
||||
def test_native_image_sizes_node_returns_expected_dimensions(preset, expected):
|
||||
node = NativeImageSizesNode()
|
||||
result = node.select_size(preset)
|
||||
result = node.select_size(preset, "1")
|
||||
assert result == expected
|
||||
|
||||
|
||||
def test_native_image_sizes_node_returns_int_dimensions():
|
||||
node = NativeImageSizesNode()
|
||||
width, height = node.select_size("16:9")
|
||||
width, height = node.select_size("16:9", "1")
|
||||
assert isinstance(width, int)
|
||||
assert isinstance(height, int)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"scale,expected",
|
||||
[
|
||||
("0.5", (832, 464)),
|
||||
("1", (1664, 928)),
|
||||
("2", (3328, 1856)),
|
||||
],
|
||||
)
|
||||
def test_native_image_sizes_node_applies_scale(scale, expected):
|
||||
node = NativeImageSizesNode()
|
||||
assert node.select_size("16:9", scale) == expected
|
||||
|
||||
|
||||
def test_node_class_mappings_are_discovered_dynamically():
|
||||
assert "NativeImageSizes" in NODE_CLASS_MAPPINGS
|
||||
assert NODE_CLASS_MAPPINGS["NativeImageSizes"] is NativeImageSizesNode
|
||||
|
||||
Reference in New Issue
Block a user