File size: 2,920 Bytes
2e721a4
aefd3bd
932a564
 
 
0c1adc7
 
 
0b0bc86
 
 
aefd3bd
0b0bc86
 
 
f553d63
 
71cc78c
f2d86fb
 
fb04a60
340f8fa
 
6c31caf
0b0bc86
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53d7a5e
 
0b0bc86
932a564
9549665
932a564
 
0b0bc86
 
932a564
f04735b
 
932a564
0c1adc7
0b0bc86
932a564
 
a9fdd2e
 
c24c440
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
import spaces 
import gradio as gr
import torch
import modin.pandas as pd
import numpy as np
from diffusers import DiffusionPipeline, DPMSolverSinglestepScheduler, ControlNetModel, StableDiffusionXLControlNetPipeline, AutoencoderKL
import requests 
import cv2 
from uuid import uuid4
import numpy as np 
from PIL import Image

controlnet = ControlNetModel.from_pretrained("diffusers/controlnet-canny-sdxl-1.0", torch_dtype=torch.float16).to("cuda")

pipe = StableDiffusionXLControlNetPipeline.from_pretrained("mann-e/Mann-E_Dreams", controlnet=controlnet, torch_dtype=torch.float16).to("cuda")
pipe.scheduler = DPMSolverSinglestepScheduler.from_config(pipe.scheduler.config, use_karras_sigmas=True)

#pipe.enable_xformers_memory_efficient_attention()
pipe.enable_vae_slicing()

torch.cuda.empty_cache()

@spaces.GPU
def genie (input_image, prompt, negative_prompt, width, height, steps, seed, conditioning_scale):
    #processing the input image
    res = requests.get(input_image)
    image_name = f'tmp_{uuid4()}.png'

    if res.ok:
        with open(image_name, 'wb') as f:
            f.write(res.content)

    # Canny Edge Detection 
    image = cv2.imread(image_name)
    image = np.array(image)
    image = cv2.Canny(image, 100, 200)
    image = image[:, :, None]
    image = np.concatenate([image, image, image], axis=2)
    #cv2.imwrite('canny.png', image)
    image = Image.fromarray(image)

    conditioning_scale = float(conditioning_scale)
    #generating a new image
    generator = np.random.seed(0) if seed == 0 else torch.manual_seed(seed)
    int_image = pipe(prompt=prompt, negative_prompt=negative_prompt, width=width, height=height, generator=generator, num_inference_steps=steps, guidance_scale=4, image=image, controlnet_conditioning_scale=conditioning_scale).images[0]
    return int_image
    
gr.Interface(fn=genie, inputs=[gr.Textbox(label='Base Image URL'),
    gr.Textbox(label='What you want the AI to generate. 75 Token Limit.'),
    gr.Textbox(label='What you DO NOT want the AI to generate. 75 Token Limit.'),
    gr.Slider(576, maximum=1280, value=768, step=16, label='Width (can go up to 1280, but for square images maximum is 1024x1024)'), 
    gr.Slider(576, maximum=1280, value=768, step=16, label='Height (can go up to 1280, but for square images maximum is 1024x1024)'), 
    gr.Slider(1, maximum=8, value=6, step=1, label='Number of Iterations'), 
    gr.Slider(minimum=0, step=1, maximum=999999999999999999, randomize=True, label="Seed"),
    gr.Slider(minimum=0, step=0.05, maximum=1, label="Conditioning Scale"),
    ],
    outputs='image', 
    title="Mann-E Dreams w/ ControlNet", 
    description="Mann-E Dreams <br><br><b>WARNING: This model is capable of producing NSFW (Softcore) images.</b><br><br>In case you don't want a base image, just paste link to an image and put conditioning scale to 0", 
    article = "").launch(debug=True, max_threads=80, show_error=True)