File size: 5,001 Bytes
8a58a6e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
"""

Multi-scale diffusion presets for quality and performance optimization.



This module provides predefined configurations for multi-scale diffusion that balance

quality and performance based on different use cases.

"""

from typing import NamedTuple, Dict, Any


class MultiscalePreset(NamedTuple):
    """#### Class representing a multi-scale diffusion preset.



    #### Args:

        - `name` (str): The name of the preset.

        - `description` (str): Description of the preset's purpose.

        - `enable_multiscale` (bool): Whether multi-scale diffusion is enabled.

        - `multiscale_factor` (float): Scale factor for intermediate steps (0.1-1.0).

        - `multiscale_fullres_start` (int): Number of first steps at full resolution.

        - `multiscale_fullres_end` (int): Number of last steps at full resolution.

        - `multiscale_intermittent_fullres` (bool): Whether to use intermittent full-res.

    """

    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]:
        """#### Convert the preset to a dictionary.



        #### Returns:

            - `Dict[str, Any]`: The preset parameters as a dictionary.

        """
        return {
            "enable_multiscale": self.enable_multiscale,
            "multiscale_factor": self.multiscale_factor,
            "multiscale_fullres_start": self.multiscale_fullres_start,
            "multiscale_fullres_end": self.multiscale_fullres_end,
            "multiscale_intermittent_fullres": self.multiscale_intermittent_fullres,
        }


# Predefined multi-scale diffusion presets
MULTISCALE_PRESETS = {
    "quality": MultiscalePreset(
        name="Quality",
        description="High quality preset with intermittent full-res for best image quality",
        enable_multiscale=True,
        multiscale_factor=0.5,
        multiscale_fullres_start=10,
        multiscale_fullres_end=8,
        multiscale_intermittent_fullres=True,
    ),
    "performance": MultiscalePreset(
        name="Performance",
        description="Performance-oriented preset with aggressive downscaling for maximum speed",
        enable_multiscale=True,
        multiscale_factor=0.25,
        multiscale_fullres_start=5,
        multiscale_fullres_end=8,
        multiscale_intermittent_fullres=True,
    ),
    "balanced": MultiscalePreset(
        name="Balanced",
        description="Balanced preset offering good quality and performance",
        enable_multiscale=True,
        multiscale_factor=0.5,
        multiscale_fullres_start=5,
        multiscale_fullres_end=8,
        multiscale_intermittent_fullres=True,
    ),
    "disabled": MultiscalePreset(
        name="Disabled",
        description="Multi-scale diffusion disabled - full resolution throughout",
        enable_multiscale=False,
        multiscale_factor=1.0,
        multiscale_fullres_start=0,
        multiscale_fullres_end=0,
        multiscale_intermittent_fullres=False,
    ),
}


def get_preset(preset_name: str) -> MultiscalePreset:
    """#### Get a multi-scale diffusion preset by name.



    #### Args:

        - `preset_name` (str): The name of the preset to retrieve.



    #### Returns:

        - `MultiscalePreset`: The requested preset.



    #### Raises:

        - `KeyError`: If the preset name is not found.

    """
    if preset_name not in MULTISCALE_PRESETS:
        available_presets = ", ".join(MULTISCALE_PRESETS.keys())
        raise KeyError(
            f"Preset '{preset_name}' not found. Available presets: {available_presets}"
        )

    return MULTISCALE_PRESETS[preset_name]


def get_preset_parameters(preset_name: str) -> Dict[str, Any]:
    """#### Get multi-scale diffusion parameters for a preset.



    #### Args:

        - `preset_name` (str): The name of the preset.



    #### Returns:

        - `Dict[str, Any]`: The preset parameters.

    """
    return get_preset(preset_name).as_dict


def list_presets() -> Dict[str, str]:
    """#### List all available multi-scale diffusion presets.



    #### Returns:

        - `Dict[str, str]`: Dictionary mapping preset names to descriptions.

    """
    return {name: preset.description for name, preset in MULTISCALE_PRESETS.items()}


def apply_preset_to_kwargs(preset_name: str, kwargs: Dict[str, Any]) -> Dict[str, Any]:
    """#### Apply a multi-scale preset to keyword arguments.



    #### Args:

        - `preset_name` (str): The name of the preset to apply.

        - `kwargs` (Dict[str, Any]): Existing keyword arguments.



    #### Returns:

        - `Dict[str, Any]`: Updated keyword arguments with preset parameters.

    """
    preset_params = get_preset_parameters(preset_name)
    kwargs.update(preset_params)
    return kwargs