From 4261f722ce4a9ce386cfd59068f2082fa987001e Mon Sep 17 00:00:00 2001 From: Hans Dembinski Date: Sun, 10 May 2026 14:47:21 +0200 Subject: [PATCH] Enhance NativeImageSizesNode to support scaling of image dimensions --- nodes/native_image_sizes.py | 8 ++++++-- tests/test_native_image_sizes.py | 17 +++++++++++++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/nodes/native_image_sizes.py b/nodes/native_image_sizes.py index c8e7b75..5f63a45 100644 --- a/nodes/native_image_sizes.py +++ b/nodes/native_image_sizes.py @@ -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()) diff --git a/tests/test_native_image_sizes.py b/tests/test_native_image_sizes.py index 65a3869..1dfff7a 100644 --- a/tests/test_native_image_sizes.py +++ b/tests/test_native_image_sizes.py @@ -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