AuraFlow / app.py
multimodalart's picture
Update app.py
3537b64 verified
raw
history blame contribute delete
No virus
7.9 kB
import gradio as gr
import numpy as np
import random
import spaces
from diffusers import AuraFlowPipeline
import torch
from gradio_imageslider import ImageSlider
device = "cuda" if torch.cuda.is_available() else "cpu"
#torch.set_float32_matmul_precision("high")
#torch._inductor.config.conv_1x1_as_mm = True
#torch._inductor.config.coordinate_descent_tuning = True
#torch._inductor.config.epilogue_fusion = False
#torch._inductor.config.coordinate_descent_check_all_directions = True
#pipe_v1 = AuraFlowPipeline.from_pretrained(
# "fal/AuraFlow",
# torch_dtype=torch.float16
#).to("cuda")
pipe_v2 = AuraFlowPipeline.from_pretrained(
"fal/AuraFlow-v0.2",
torch_dtype=torch.float16
).to("cuda")
pipe = AuraFlowPipeline.from_pretrained(
"fal/AuraFlow-v0.3",
torch_dtype=torch.float16
).to("cuda")
#pipe.transformer.to(memory_format=torch.channels_last)
#pipe.transformer = torch.compile(pipe.transformer, mode="reduce-overhead", fullgraph=True)
#pipe.transformer.to(memory_format=torch.channels_last)
#pipe.vae.to(memory_format=torch.channels_last)
#pipe.transformer = torch.compile(pipe.transformer, mode="max-autotune", fullgraph=True)
#pipe.vae.decode = torch.compile(pipe.vae.decode, mode="max-autotune", fullgraph=True)
MAX_SEED = np.iinfo(np.int32).max
MAX_IMAGE_SIZE = 1024
@spaces.GPU()
def infer_example(prompt, negative_prompt="", seed=42, randomize_seed=False, width=1024, height=1024, guidance_scale=5.0, num_inference_steps=28, model_version="0.2", comparison_mode=False, progress=gr.Progress(track_tqdm=True)):
generator = torch.Generator().manual_seed(seed)
image = pipe(
prompt = prompt,
negative_prompt = negative_prompt,
width = width,
height = height,
guidance_scale = guidance_scale,
num_inference_steps = num_inference_steps,
generator = generator
).images[0]
return image, seed
@spaces.GPU(duration=95)
def infer(prompt,
negative_prompt="",
seed=42,
randomize_seed=False,
width=1024,
height=1024,
guidance_scale=5.0,
num_inference_steps=28,
model_version="0.3",
comparison_mode=False,
progress=gr.Progress(track_tqdm=True)
):
if randomize_seed:
seed = random.randint(0, MAX_SEED)
generator = torch.Generator().manual_seed(seed)
if(comparison_mode):
image_1 = pipe_v2(
prompt = prompt,
negative_prompt = negative_prompt,
width=width,
height=height,
guidance_scale = guidance_scale,
num_inference_steps = num_inference_steps,
generator = generator
).images[0]
generator = torch.Generator().manual_seed(seed)
image_2 = pipe(
prompt = prompt,
negative_prompt = negative_prompt,
width=width,
height=height,
guidance_scale = guidance_scale,
num_inference_steps = num_inference_steps,
generator = generator
).images[0]
return gr.update(visible=False), gr.update(visible=True, value=(image_1, image_2)), seed
if(model_version == "0.1"):
image = pipe_v1(
prompt = prompt,
negative_prompt = negative_prompt,
width=width,
height=height,
guidance_scale = guidance_scale,
num_inference_steps = num_inference_steps,
generator = generator
).images[0]
elif(model_version == "0.2"):
image = pipe_v2(
prompt = prompt,
negative_prompt = negative_prompt,
width=width,
height=height,
guidance_scale = guidance_scale,
num_inference_steps = num_inference_steps,
generator = generator
).images[0]
else:
image = pipe(
prompt = prompt,
negative_prompt = negative_prompt,
width=width,
height=height,
guidance_scale = guidance_scale,
num_inference_steps = num_inference_steps,
generator = generator
).images[0]
return gr.update(visible=True, value=image), gr.update(visible=False), seed
examples = [
"A photo of a lavender cat",
"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: 520px;
}
"""
with gr.Blocks(css=css) as demo:
with gr.Column(elem_id="col-container"):
gr.Markdown(f"""
# AuraFlow 0.3
Demo of the [AuraFlow 0.3](https://huggingface.co/fal/AuraFlow-v0.3) 6.8B parameters open source diffusion transformer model
[[blog](https://blog.fal.ai/auraflow/)] [[model](https://huggingface.co/fal/AuraFlow)] [[fal](https://fal.ai/models/fal-ai/aura-flow)]
""")
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)
result_compare = ImageSlider(visible=False, label="Left 0.2, Right 0.3")
comparison_mode = gr.Checkbox(label="Comparison mode", info="Compare v0.2 with v0.3", value=False)
with gr.Accordion("Advanced Settings", open=False):
model_version = gr.Dropdown(
["0.2", "0.3"], label="Model version", value="0.3"
)
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=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=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,
fn = infer_example,
inputs = [prompt],
outputs = [result, seed],
cache_examples="lazy"
)
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, model_version, comparison_mode],
outputs = [result, result_compare, seed]
)
demo.queue().launch()