Spaces:
Running
on
Zero
Running
on
Zero
File size: 6,074 Bytes
0dfe83a 701027b bc4e38f d446cb0 701027b ef90ebc 035676f ed5339b ef90ebc b70eb21 ef90ebc bc4e38f 701027b 7456e61 701027b 7456e61 701027b 04d8ef1 701027b 7456e61 701027b ef90ebc bf62e77 bc4e38f 701027b ef90ebc 701027b bfec400 701027b 4601bb7 701027b 4601bb7 701027b be0bcaf |
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 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
import spaces
import gradio as gr
import numpy as np
import random
import torch
from diffusers import StableDiffusion3Pipeline, SD3Transformer2DModel, FlowMatchEulerDiscreteScheduler
from diffusers import AutoPipelineForText2Image
import spaces
device = "cuda" if torch.cuda.is_available() else "cpu"
dtype = torch.float16
# repo = "dataautogpt3/OpenDalleV1.1"
repo = "SG161222/RealVisXL_V4.0"
repo = "SG161222/RealVisXL_V5.0"
# repo="stabilityai/stable-diffusion-3-medium-tensorrt"
# pipe = StableDiffusion3Pipeline.from_pretrained(repo, torch_dtype=torch.float16).to(device)
pipeline = AutoPipelineForText2Image.from_pretrained(repo, torch_dtype=torch.float16).to('cuda')
def adjust_to_nearest_multiple(value, divisor=8):
"""
Adjusts the input value to the nearest multiple of the divisor.
Args:
value (int): The value to adjust.
divisor (int): The divisor to which the value should be divisible. Default is 8.
Returns:
int: The nearest multiple of the divisor.
"""
if value % divisor == 0:
return value
else:
# Round to the nearest multiple of divisor
return round(value / divisor) * divisor
def adjust_dimensions(height, width):
"""
Adjusts the height and width to be divisible by 8.
Args:
height (int): The height to adjust.
width (int): The width to adjust.
Returns:
tuple: Adjusted height and width.
"""
new_height = adjust_to_nearest_multiple(height)
new_width = adjust_to_nearest_multiple(width)
return new_height, new_width
MAX_SEED = np.iinfo(np.int32).max
MAX_IMAGE_SIZE = 4100
@spaces.GPU(duration=60)
def infer(prompt, negative_prompt, seed, randomize_seed, width, height, guidance_scale, num_inference_steps, progress=gr.Progress(track_tqdm=True)):
if randomize_seed:
seed = random.randint(0, MAX_SEED)
width = min(width, MAX_IMAGE_SIZE // 2)
height = min(height, MAX_IMAGE_SIZE // 2)
height, width = adjust_dimensions(height, width)
generator = torch.Generator().manual_seed(seed)
image = pipeline(prompt = prompt,
negative_prompt = negative_prompt,
guidance_scale = guidance_scale,
num_inference_steps = num_inference_steps,
width = width,
height = height,
generator = generator
).images[0]
# image = pipe(
# prompt = prompt,
# negative_prompt = negative_prompt,
# guidance_scale = guidance_scale,
# num_inference_steps = num_inference_steps,
# width = width,
# height = height,
# generator = generator
# ).images[0]
return image, seed
examples = [
"Astronaut in a jungle, cold color palette, muted colors, detailed, 8k",
"An astronaut riding a green horse",
"A delicious ceviche cheesecake slice",
]
css="""
#col-container {
margin: 0 auto;
max-width: 580px;
}
"""
with gr.Blocks(css=css) as demo:
with gr.Column(elem_id="col-container"):
gr.Markdown(f"""
# Demo [Stable Diffusion 3 Medium](https://huggingface.co/stabilityai/stable-diffusion-3-medium)
Learn more about the [Stable Diffusion 3 series](https://stability.ai/news/stable-diffusion-3). Try on [Stability AI API](https://platform.stability.ai/docs/api-reference#tag/Generate/paths/~1v2beta~1stable-image~1generate~1sd3/post), [Stable Assistant](https://stability.ai/stable-assistant), or on Discord via [Stable Artisan](https://stability.ai/stable-artisan). Run locally with [ComfyUI](https://github.com/comfyanonymous/ComfyUI) or [diffusers](https://github.com/huggingface/diffusers)
""")
with gr.Row():
prompt = gr.Text(
label="Prompt",
show_label=False,
max_lines=1,
placeholder="Enter your prompt",
container=False,
)
run_button = gr.Button("Run", scale=0)
result = gr.Image(label="Result", show_label=False)
with gr.Accordion("Advanced Settings", open=False):
negative_prompt = gr.Text(
label="Negative prompt",
max_lines=1,
placeholder="Enter a negative prompt",
)
seed = gr.Slider(
label="Seed",
minimum=0,
maximum=MAX_SEED,
step=1,
value=0,
)
randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
with gr.Row():
width = gr.Slider(
label="Width",
minimum=256,
maximum=MAX_IMAGE_SIZE,
step=64,
value=1024,
)
height = gr.Slider(
label="Height",
minimum=256,
maximum=MAX_IMAGE_SIZE,
step=64,
value=1024,
)
with gr.Row():
guidance_scale = gr.Slider(
label="Guidance scale",
minimum=0.0,
maximum=10.0,
step=0.1,
value=5.0,
)
num_inference_steps = gr.Slider(
label="Number of inference steps",
minimum=1,
maximum=50,
step=1,
value=28,
)
gr.Examples(
examples = examples,
inputs = [prompt]
)
gr.on(
triggers=[run_button.click, prompt.submit, negative_prompt.submit],
fn = infer,
inputs = [prompt, negative_prompt, seed, randomize_seed, width, height, guidance_scale, num_inference_steps],
outputs = [result, seed]
)
demo.launch() |