| import random |
| from styles import linear, radial, multicolor, freeform, shape_blur, gradient_ramp, geometric, emoji, emoji_hex |
|
|
| STYLE_TABLE: dict[str, dict] = { |
| "linear": {"cls": linear.LinearGradient, "params": linear.random_params}, |
| "radial": {"cls": radial.RadialGradient, "params": radial.random_params}, |
| "multicolor": {"cls": multicolor.MulticolorGradient, "params": multicolor.random_params}, |
| "freeform": {"cls": freeform.FreeformGradient, "params": freeform.random_params}, |
| "shape_blur": {"cls": shape_blur.ShapeBlurGradient, "params": shape_blur.random_params}, |
| "gradient_ramp": {"cls": gradient_ramp.GradientRampStyle, "params": gradient_ramp.random_params}, |
| "geometric": {"cls": geometric.GeometricStyle, "params": geometric.random_params}, |
| "emoji": {"cls": emoji.EmojiStyle, "params": emoji.random_params}, |
| "emoji_hex": {"cls": emoji_hex.EmojiHexStyle, "params": emoji_hex.random_params}, |
| } |
|
|
|
|
| def pick_random_style( |
| width: int, |
| height: int, |
| style_name: str = None, |
| seed: int = None, |
| ) -> tuple: |
| rng = random.Random(seed) |
| if style_name is None or style_name not in STYLE_TABLE: |
| style_name = rng.choice(list(STYLE_TABLE.keys())) |
|
|
| entry = STYLE_TABLE[style_name] |
| params = entry["params"](width, height, rng) |
| instance = entry["cls"](width=width, height=height, **params) |
| return instance, style_name, params |
|
|