Spaces:
Sleeping
Sleeping
File size: 5,349 Bytes
5e8d978 cf7d317 5e8d978 cf7d317 5e8d978 cf7d317 5e8d978 cf7d317 19ef2ed cf7d317 5e8d978 19ef2ed cf7d317 5e8d978 19ef2ed 5e8d978 19ef2ed 5e8d978 19ef2ed 5e8d978 19ef2ed 5e8d978 19ef2ed 5e8d978 19ef2ed 5e8d978 19ef2ed 5e8d978 00e3bd5 5e8d978 19ef2ed 00e3bd5 19ef2ed cf7d317 5e8d978 19ef2ed 32916a7 19ef2ed 5e8d978 19ef2ed cf7d317 5e8d978 19ef2ed 5e8d978 cf7d317 5e8d978 cf7d317 5e8d978 cf7d317 19ef2ed cf7d317 5e8d978 19ef2ed 5e8d978 19ef2ed 5e8d978 19ef2ed 5e8d978 19ef2ed 5e8d978 19ef2ed 5e8d978 cf7d317 5e8d978 19ef2ed 5e8d978 cf7d317 5e8d978 19ef2ed 5e8d978 19ef2ed 5e8d978 19ef2ed cf7d317 5e8d978 19ef2ed |
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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
#!/usr/bin/env python
import os
import random
import uuid
import gradio as gr
import numpy as np
from PIL import Image
import spaces
from typing import Tuple
import torch
from diffusers import StableDiffusionXLPipeline, EulerAncestralDiscreteScheduler
DESCRIPTION = """# InterDiffusion-4.0
### [https://huggingface.co/cutycat2000x/InterDiffusion-4.0](https://huggingface.co/cutycat2000x/InterDiffusion-4.0)"""
MAX_SEED = np.iinfo(np.int32).max
DEFAULT_STYLE_NAME = "(LoRA)"
def save_image(img):
filename = str(uuid.uuid4()) + ".png"
img.save(filename)
return filename
def randomize_seed_fn(seed: int, randomize_seed: bool) -> int:
return random.randint(0, MAX_SEED) if randomize_seed else seed
style_list = [
{
"name": DEFAULT_STYLE_NAME,
"prompt": "{prompt}",
"negative_prompt": "",
},
]
styles = {s["name"]: (s["prompt"], s["negative_prompt"]) for s in style_list}
STYLE_NAMES = list(styles.keys())
def apply_style(style_name: str, positive: str, negative: str = "") -> Tuple[str, str]:
p, n = styles.get(style_name, styles[DEFAULT_STYLE_NAME])
return p.replace("{prompt}", positive), n + negative
if torch.cuda.is_available():
pipe = StableDiffusionXLPipeline.from_pretrained(
"cutycat2000x/InterDiffusion-4.0",
torch_dtype=torch.float16,
use_safetensors=True,
)
pipe.scheduler = EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config)
pipe.load_lora_weights("cutycat2000x/LoRA2", weight_name="lora.safetensors", adapter_name="adapt")
pipe.set_adapters("adapt")
pipe.to("cuda")
@spaces.GPU(enable_queue=True)
def generate(prompt, negative_prompt, style, use_negative_prompt, num_inference_steps,
num_images_per_prompt, seed, width, height, guidance_scale, randomize_seed, progress=gr.Progress(track_tqdm=True)):
seed = randomize_seed_fn(seed, randomize_seed)
if not use_negative_prompt:
negative_prompt = ""
prompt, negative_prompt = apply_style(style, prompt, negative_prompt)
result = pipe(
prompt=prompt,
negative_prompt=negative_prompt,
width=width,
height=height,
guidance_scale=guidance_scale,
num_inference_steps=num_inference_steps,
num_images_per_prompt=num_images_per_prompt,
cross_attention_kwargs={"scale": 0.65},
output_type="pil"
)
return result.images, seed
examples = [
'a smiling girl with sparkles in her eyes, walking in a garden, in the morning --style anime',
'firewatch landscape, Graphic Novel, Pastel Art...',
'Cat on a tree sitting in between parrots.',
'cat, 4k, hyperrealistic, Cinematic, unreal engine 5',
'cinematic closeup of burning skull',
'frozen elsa',
'A rainbow tree, anime style, tree in focus',
'A cat holding a sign that reads "Hello World"',
'Odette the butterfly goddess wondering in the cosmos'
]
css = '''
.gradio-container{max-width: 560px !important}
h1{text-align:center}
footer { visibility: hidden }
'''
with gr.Blocks(css=css, theme="xiaobaiyuan/theme_brief") as demo:
gr.Markdown(DESCRIPTION)
with gr.Group():
with gr.Row():
prompt = gr.Textbox(
label="Prompt", placeholder="Enter your prompt", lines=1
)
run_button = gr.Button("Run")
result = gr.Gallery(label="Result", columns=1, preview=True)
with gr.Accordion("Advanced options", open=False):
use_negative_prompt = gr.Checkbox(label="Use negative prompt", value=False)
negative_prompt = gr.Textbox(label="Negative prompt", lines=1, visible=True)
num_inference_steps = gr.Slider(label="Steps", minimum=10, maximum=60, step=1, value=30)
num_images_per_prompt = gr.Slider(label="Images", minimum=1, maximum=5, step=1, value=2)
seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=0)
randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
width = gr.Slider(label="Width", minimum=512, maximum=2048, step=8, value=1024)
height = gr.Slider(label="Height", minimum=512, maximum=2048, step=8, value=1024)
guidance_scale = gr.Slider(label="Guidance Scale", minimum=0.1, maximum=20.0, step=0.1, value=6.0)
style_selection = gr.Radio(label="Image Style", choices=STYLE_NAMES, value=DEFAULT_STYLE_NAME)
gr.Examples(
examples=examples,
inputs=prompt,
outputs=[result, seed],
fn=generate,
cache_examples=False
)
use_negative_prompt.change(
lambda x: gr.update(visible=x),
inputs=use_negative_prompt,
outputs=negative_prompt,
)
prompt.submit(
fn=generate,
inputs=[prompt, negative_prompt, style_selection, use_negative_prompt,
num_inference_steps, num_images_per_prompt, seed,
width, height, guidance_scale, randomize_seed],
outputs=[result, seed],
)
run_button.click(
fn=generate,
inputs=[prompt, negative_prompt, style_selection, use_negative_prompt,
num_inference_steps, num_images_per_prompt, seed,
width, height, guidance_scale, randomize_seed],
outputs=[result, seed],
)
if __name__ == "__main__":
demo.queue(max_size=20).launch(show_api=False, debug=False)
|