import gradio as gr import numpy as np import datasets, os, time, random from PIL import Image dataset = datasets.load_dataset('parsee-mizuhashi/realrealrealreal', use_auth_token=os.environ["HF_TOKEN"], num_proc=8) #train dataset def apply_noise_layer(noise: np.ndarray, img: np.ndarray, percent): if percent <= 0: return noise elif percent >= 1: return img else: #apply the noise with transperancy equal to 1-percent t = img * percent + noise * (1-percent) t = Image.fromarray(t.astype(np.uint8)) return t def generate(sampler, steps, use_thunder=False): t = 0.25 if "++" in sampler: t = 0.4 if use_thunder: t = 0.1 # get random img from dataset imgid: Image = random.choice(list(dataset["train"]["image"])) basimg = np.array(imgid) for _ in range(steps): image = np.random.random((1024, 1024, 3)) image = image * 255 image = image.astype(np.uint8) yield apply_noise_layer(image, basimg, (_+1) / steps) time.sleep(t) yield basimg with gr.Blocks() as demo: with gr.Row(): with gr.Column(scale=2): pass with gr.Column(scale=3): positive = gr.Textbox(interactive=True, show_label=False) negative = gr.Textbox(placeholder="negative", interactive=True, show_label=False) generate_button = gr.Button("Generate") img = gr.Image(interactive=False, show_label=False) with gr.Accordion("Advanced", open=False): sampler = gr.Dropdown( choices=["Euler A", "DPM++ 2M SDE", "DPM++ 2S Ancestral", "DDPM"], value="DPM++ 2M SDE", ) steps = gr.Slider(minimum=1, maximum=50, value=10, step=1) use_thunder = gr.Checkbox(label="Use WD Thunder to generate", value=False) generate_button.click(generate, inputs=[sampler, steps, use_thunder], outputs=img) with gr.Column(scale=2): pass demo.queue(max_size=100, default_concurrency_limit=10) demo.launch()