| import modules.scripts as scripts | |
| import modules.processing as processing | |
| import gradio as gr | |
| from modules.processing import process_images, slerp | |
| from modules import devices, shared | |
| import torch | |
| global_seeds = '' | |
| def advanced_creator (shape, seeds, subseeds=None, subseed_strength=0.0, seed_resize_from_h=0, seed_resize_from_w=0, p=None): | |
| global global_seeds | |
| parsed = [] | |
| for one in global_seeds.split(","): | |
| parts = one.split(":") | |
| parsed.append((int(parts[0]), float(parts[1]) if len(parts) > 1 else 1)) | |
| noises = list(map(lambda e: (devices.randn(e[0], shape), e[1]), parsed)) | |
| while True: | |
| cur = noises[0] | |
| rest = noises[1:] | |
| if len(rest) <= 0: | |
| break | |
| noises = list( | |
| map(lambda r: (slerp(r[1] / (r[1] + cur[1]), cur[0], r[0]), r[1] * cur[1]), rest)) | |
| return torch.stack([noises[0][0]]).to(shared.device) | |
| class Script(scripts.Script): | |
| def title(self): | |
| return "Advanced Seed Blending" | |
| def ui(self, is_img2img): | |
| seeds = gr.Textbox(label='Seeds', value="") | |
| return [seeds] | |
| def run(self, p, seeds): | |
| real_creator = processing.create_random_tensors | |
| try: | |
| processing.create_random_tensors = advanced_creator | |
| global global_seeds | |
| global_seeds = seeds | |
| return process_images(p) | |
| finally: | |
| processing.create_random_tensors = real_creator | |