Spaces:
Runtime error
Runtime error
File size: 9,452 Bytes
6d9d748 236f099 5f87ad8 236f099 627260a c8ca415 236f099 5f87ad8 a2dd161 236f099 dc8f8ae c8ca415 a24adca 236f099 0652ed7 627260a a24adca a348ce9 aca4325 b9d7680 236f099 a348ce9 df42351 5f87ad8 236f099 dc8f8ae c8ca415 8e6df7d c8ca415 236f099 b9d7680 236f099 5f87ad8 236f099 5f87ad8 236f099 5f87ad8 236f099 c8ca415 236f099 5f87ad8 236f099 5f87ad8 236f099 1acae0b 5f87ad8 236f099 5f87ad8 236f099 5f87ad8 236f099 5f87ad8 236f099 5f87ad8 236f099 5f87ad8 236f099 b9d7680 5f87ad8 236f099 5f87ad8 236f099 b9d7680 236f099 32b462e d509a14 32b462e 9a6bfa6 5bad384 9a6bfa6 5bad384 9a6bfa6 5bad384 9a6bfa6 5bad384 9a6bfa6 5bad384 9a6bfa6 5bad384 9a6bfa6 5bad384 9a6bfa6 4a3419a 5bad384 9a6bfa6 5bad384 9a6bfa6 5bad384 b532ea0 5bad384 32b462e d509a14 32b462e afaa37c 32b462e b9d7680 d509a14 b9d7680 32b462e 8c62f71 a75afd6 4a3419a a75afd6 32b462e a103ff6 3debdb5 4a3419a a103ff6 4a3419a a2dd161 4a3419a 752f1c6 4a3419a 579821d 8ff09a6 752f1c6 32b462e |
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 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 |
import os
import gradio as gr
import numpy as np
import random
import spaces
import torch
#from diffusers import DiffusionPipeline
from diffusers import AutoPipelineForImage2Image
from huggingface_hub import InferenceClient
dtype = torch.bfloat16
device = "cuda"
#if torch.cuda.is_available() else "cpu"
#pipe = DiffusionPipeline.from_pretrained("black-forest-labs/FLUX.1-dev", torch_dtype=torch.bfloat16).to(device)
sdxl = InferenceClient(model="stabilityai/stable-diffusion-xl-base-1.0", token=os.environ['HF_TOKEN'])
print('sdxl loaded')
"kandinsky-community/kandinsky-2-2-decoder"
#pipeline2Image = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-xl-refiner-1.0", torch_dtypes=torch.bfloat16).to(device)
#pipeline2Image = DiffusionPipeline.from_pretrained("kandinsky-community/kandinsky-2-2-decoder", torch_dtypes=torch.bfloat16).to(device)
pipeline2Image = AutoPipelineForImage2Image.from_pretrained("kandinsky-community/kandinsky-2-2-decoder", torch_dtype=dtype)
pipeline2Image.enable_model_cpu_offload()
print("pipeline 2 image loaded")
MAX_SEED = np.iinfo(np.int32).max
MAX_IMAGE_SIZE = 2048
# (duration=190)
#@spaces.GPU
def infer(prompt, seed=42, randomize_seed=False, width=1024, height=1024, guidance_scale=5.0, num_inference_steps=28, progress=gr.Progress(track_tqdm=True)):
if randomize_seed:
seed = random.randint(0, MAX_SEED)
# generator = torch.Generator().manual_seed(seed)
# image = pipe(
# prompt=prompt,
# width=width,
# height=height,
# num_inference_steps=num_inference_steps,
# generator=generator,
# guidance_scale=guidance_scale
# ).images[0]
image = sdxl.text_to_image(
prompt,
guidance_scale=guidance_scale, num_inference_steps=num_inference_steps, seed=seed,width=width, height=height
)
return image, seed
examples = [
"a tiny astronaut hatching from an egg on the moon",
"a cat holding a sign that says hello world",
"an anime illustration of a wiener schnitzel",
]
css="""
#col-container {
margin: 0 auto;
max-width: 520px;
}
"""
with gr.Blocks(css=css) as demo:
with gr.Column(elem_id="col-container"):
gr.Markdown(f"""# FLUX.1 [dev]
12B param rectified flow transformer guidance-distilled from [FLUX.1 [pro]](https://blackforestlabs.ai/)
[[non-commercial license](https://huggingface.co/black-forest-labs/FLUX.1-dev/blob/main/LICENSE.md)] [[blog](https://blackforestlabs.ai/announcing-black-forest-labs/)] [[model](https://huggingface.co/black-forest-labs/FLUX.1-dev)]
""")
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):
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=32,
value=1024,
)
height = gr.Slider(
label="Height",
minimum=256,
maximum=MAX_IMAGE_SIZE,
step=32,
value=1024,
)
with gr.Row():
guidance_scale = gr.Slider(
label="Guidance Scale",
minimum=1,
maximum=15,
step=0.1,
value=3.5,
)
num_inference_steps = gr.Slider(
label="Number of inference steps",
minimum=1,
maximum=50,
step=1,
value=28,
)
gr.Examples(
examples=examples,
fn=infer,
inputs=[prompt],
outputs=[result, seed],
cache_examples="lazy"
)
gr.on(
triggers=[run_button.click, prompt.submit],
fn=infer,
inputs=[prompt, seed, randomize_seed, width, height, guidance_scale, num_inference_steps],
outputs=[result, seed]
)
# Adding image input options at the bottom
gr.Markdown("## Upload or select an additional image")
with gr.Row():
uploaded_image = gr.Image(label="Upload Image", type="pil")
image_url = gr.Textbox(label="Image URL", placeholder="Enter image URL")
use_generated_image = gr.Button("Use Generated Image")
with gr.Accordion("Advanced Settings", open=False):
seed2 = gr.Slider(
label="Seed",
minimum=0,
maximum=MAX_SEED,
step=1,
value=0,
)
randomize_seed2 = gr.Checkbox(label="Randomize seed", value=True)
with gr.Row():
width2 = gr.Slider(
label="Width",
minimum=256,
maximum=MAX_IMAGE_SIZE,
step=32,
value=1024,
)
height2 = gr.Slider(
label="Height",
minimum=256,
maximum=MAX_IMAGE_SIZE,
step=32,
value=1024,
)
with gr.Row():
strength2 = gr.Slider(
label="Strength",
minimum=.1,
maximum=1,
step=0.1,
value=.5,
)
guidance_scale2 = gr.Slider(
label="Guidance Scale",
minimum=1,
maximum=15,
step=0.1,
value=3.5,
)
num_inference_steps2 = gr.Slider(
label="Number of inference steps",
minimum=1,
maximum=50,
step=1,
value=28,
)
prompt2 = gr.Text(
label="Prompt",
show_label=False,
max_lines=1,
placeholder="Enter your prompt",
container=False,
)
run2_button = gr.Button("Run", scale=0)
additional_image_output = gr.Image(label="Selected Image", show_label=False)
def select_image(uploaded_image, image_url, use_generated=False):
if use_generated:
return result.value
elif uploaded_image is not None:
return uploaded_image
elif image_url:
try:
img = gr.Image.load(image_url)
return img
except Exception as e:
return f"Failed to load image from URL: {e}"
return None
def image2image(uploaded_image, image_url, use_generated=False):
image = select_image(uploaded_image, image_url, use_generated=use_generated)
#prompt = "one awesome dude"
#generator = torch.Generator(device=device).manual_seed(1024)
#image = pipeline2Image(prompt=prompt, image=image, strength=0.75, guidance_scale=7.5, generator=generator).images[0]
return image
use_generated_image.click(fn=lambda: image2image(None, None, True), inputs=[], outputs=additional_image_output)
uploaded_image.change(fn=image2image, inputs=[uploaded_image, image_url, gr.State(False)], outputs=additional_image_output)
image_url.submit(fn=image2image, inputs=[uploaded_image, image_url, gr.State(False)], outputs=additional_image_output)
@spaces.GPU(duration=190)
def infer2(prompt, image, seed=42, randomize_seed=False, width=1024, height=1024, strength=.5, guidance_scale=5.0, num_inference_steps=28):
if randomize_seed:
seed = random.randint(0, MAX_SEED)
generator = torch.Generator(device=device).manual_seed(seed)
image2 = pipeline2Image(prompt=prompt, image=image, strength=strength, guidance_scale=guidance_scale, num_inference_steps=num_inference_steps, generator=generator).images[0]
# generator = torch.Generator().manual_seed(seed)
# image = pipe(
# prompt=prompt,
# width=width,
# height=height,
# num_inference_steps=num_inference_steps,
# generator=generator,
# guidance_scale=guidance_scale
# ).images[0]
return image2, seed
final_image_output = gr.Image(label="Final Image", show_label=False)
gr.on(
triggers=[run2_button.click, prompt2.submit],
fn=infer2,
inputs=[prompt2, torch.from_numpy(additional_image_output), seed2, randomize_seed2, width2, height2, strength2, guidance_scale2, num_inference_steps2],
outputs=[final_image_output, seed2]
)
demo.launch()
|