File size: 1,911 Bytes
b701455
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
"""Multi-scale diffusion presets for quality/performance optimization."""
from typing import NamedTuple, Dict, Any


class MultiscalePreset(NamedTuple):
    """Multi-scale diffusion preset configuration."""
    name: str
    description: str
    enable_multiscale: bool
    multiscale_factor: float
    multiscale_fullres_start: int
    multiscale_fullres_end: int
    multiscale_intermittent_fullres: bool

    @property
    def as_dict(self) -> Dict[str, Any]:
        return {k: getattr(self, k) for k in ["enable_multiscale", "multiscale_factor", 
                "multiscale_fullres_start", "multiscale_fullres_end", "multiscale_intermittent_fullres"]}


MULTISCALE_PRESETS = {
    "quality": MultiscalePreset("Quality", "High quality with intermittent full-res", True, 0.5, 10, 8, True),
    "performance": MultiscalePreset("Performance", "Aggressive downscaling for max speed", True, 0.25, 5, 8, True),
    "balanced": MultiscalePreset("Balanced", "Good quality and performance", True, 0.5, 5, 8, True),
    "disabled": MultiscalePreset("Disabled", "Full resolution throughout", False, 1.0, 0, 0, False),
}


def get_preset(preset_name: str) -> MultiscalePreset:
    """Get preset by name."""
    if preset_name not in MULTISCALE_PRESETS:
        raise KeyError(f"Preset '{preset_name}' not found. Available: {', '.join(MULTISCALE_PRESETS.keys())}")
    return MULTISCALE_PRESETS[preset_name]


def get_preset_parameters(preset_name: str) -> Dict[str, Any]:
    """Get preset parameters as dict."""
    return get_preset(preset_name).as_dict


def list_presets() -> Dict[str, str]:
    """List preset names and descriptions."""
    return {name: p.description for name, p in MULTISCALE_PRESETS.items()}


def apply_preset_to_kwargs(preset_name: str, kwargs: Dict[str, Any]) -> Dict[str, Any]:
    """Apply preset to kwargs dict."""
    kwargs.update(get_preset_parameters(preset_name))
    return kwargs