- rename Smart Category Config → Smart Profile Switch 🧩 (code, JS, locales, demo workflow)
- add banner.svg and embed it at the top of README
- replace fragile OpenFileDialog folder-browse hack with native IFileDialog/FOS_PICKFOLDERS picker — fixes wrong-folder bug on single-click select
- flip Smart Resize's upscale_if_smaller default to true — node now resizes to target by default, as the name implies
- add width/height source tooltip to Smart Resolution Multiplier's image input
- fix stale widgets_values in smart_batch_resize_demo.json (10 fields → 13 after prefix/counter fields were added)
- full README rewrite: correct inputs/defaults/outputs for all 5 nodes, new Smart Profile Switch section, Example workflows section, expanded "Why these nodes?"
- add new example workflow (seedvr2_smartresize_demo.json), updated screenshots
- add assets/*.ai to .gitignore
- bump version to 1.0.2
55 lines
2.0 KiB
Python
55 lines
2.0 KiB
Python
class SmartResolutionMultiplier:
|
|
"""
|
|
Multiplies image dimensions by a factor.
|
|
Outputs width, height, and resolution (longest side) as INT.
|
|
Use resolution output directly with SeedVR max_resolution.
|
|
"""
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"image": ("IMAGE", {
|
|
"tooltip": "Source image. Its current width/height are read directly — no separate Get Image Size node needed."
|
|
}),
|
|
"multiplier": ("FLOAT", {
|
|
"default": 2.0,
|
|
"min": 0.1,
|
|
"max": 16.0,
|
|
"step": 0.1,
|
|
"round": 0.01,
|
|
"tooltip": "Multiply width and height by this factor. E.g. 2.0 = double resolution."
|
|
}),
|
|
"multiple_of": ("INT", {
|
|
"default": 8,
|
|
"min": 1,
|
|
"max": 64,
|
|
"step": 1,
|
|
"tooltip": "Snap output dimensions to a multiple of this value."
|
|
}),
|
|
}
|
|
}
|
|
|
|
RETURN_TYPES = ("INT", "INT", "INT")
|
|
RETURN_NAMES = ("width", "height", "resolution")
|
|
FUNCTION = "run"
|
|
CATEGORY = "CraftKit"
|
|
|
|
def run(self, image, multiplier, multiple_of):
|
|
h, w = image.shape[1], image.shape[2]
|
|
|
|
new_w = int(round(w * multiplier))
|
|
new_h = int(round(h * multiplier))
|
|
|
|
if multiple_of > 1:
|
|
new_w = max(multiple_of, round(new_w / multiple_of) * multiple_of)
|
|
new_h = max(multiple_of, round(new_h / multiple_of) * multiple_of)
|
|
|
|
resolution = max(new_w, new_h)
|
|
print(f"[SmartResolutionMultiplier] {w}x{h} x {multiplier} -> {new_w}x{new_h} (resolution: {resolution})")
|
|
return (new_w, new_h, resolution)
|
|
|
|
|
|
NODE_CLASS_MAPPINGS = {"SmartResolutionMultiplier": SmartResolutionMultiplier}
|
|
NODE_DISPLAY_NAME_MAPPINGS = {"SmartResolutionMultiplier": "Smart Resolution Multiplier 📏"}
|