File size: 1,446 Bytes
db57927
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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