| """Adaptive sampler helper node (moved to mod/). |
| |
| Keeps class/key name AdaptiveSamplerHelper for backward compatibility. |
| """ |
|
|
| import numpy as np |
| from scipy.ndimage import laplace |
|
|
|
|
| class AdaptiveSamplerHelper: |
| @classmethod |
| def INPUT_TYPES(cls): |
| return { |
| "required": { |
| "image": ("IMAGE", {}), |
| "steps": ("INT", {"default": 20, "min": 1, "max": 200}), |
| "cfg": ("FLOAT", {"default": 7.0, "min": 0.1, "max": 20.0, "step": 0.1}), |
| "denoise": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), |
| } |
| } |
|
|
| RETURN_TYPES = ("INT", "FLOAT", "FLOAT") |
| RETURN_NAMES = ("steps", "cfg", "denoise") |
| FUNCTION = "tune" |
| CATEGORY = "MagicNodes" |
|
|
| def tune(self, image, steps, cfg, denoise): |
| img = image[0].cpu().numpy() |
| gray = img.mean(axis=2) |
| brightness = float(gray.mean()) |
| contrast = float(gray.std()) |
| sharpness = float(np.var(laplace(gray))) |
|
|
| tuned_steps = int(max(1, round(steps + sharpness * 10))) |
| tuned_cfg = float(cfg + contrast * 2.0) |
| tuned_denoise = float(np.clip(denoise + (0.5 - brightness), 0.0, 1.0)) |
|
|
| return (tuned_steps, tuned_cfg, tuned_denoise) |
|
|
|
|