FLUX.1-dev / app.py
Dagfinn1962's picture
Update app.py
c606b4d verified
import gradio as gr
import numpy as np
import random
import spaces
import torch
from diffusers import DiffusionPipeline, FlowMatchEulerDiscreteScheduler, AutoencoderTiny, AutoencoderKL
from transformers import CLIPTextModel, CLIPTokenizer,T5EncoderModel, T5TokenizerFast
from live_preview_helpers import calculate_shift, retrieve_timesteps, flux_pipe_call_that_returns_an_iterable_of_images
dtype = torch.bfloat16
device = "cuda" if torch.cuda.is_available() else "cpu"
taef1 = AutoencoderTiny.from_pretrained("madebyollin/taef1", torch_dtype=dtype).to(device)
good_vae = AutoencoderKL.from_pretrained("black-forest-labs/FLUX.1-dev", subfolder="vae", torch_dtype=dtype).to(device)
pipe = DiffusionPipeline.from_pretrained("black-forest-labs/FLUX.1-dev", torch_dtype=dtype, vae=taef1).to(device)
torch.cuda.empty_cache()
MAX_SEED = np.iinfo(np.int32).max
MAX_IMAGE_SIZE = 2048
pipe.flux_pipe_call_that_returns_an_iterable_of_images = flux_pipe_call_that_returns_an_iterable_of_images.__get__(pipe)
#@spaces.GPU(duration=75)
@spaces.GPU(enable_queue=True)
def infer(prompt, seed=42, randomize_seed=False, width=1024, height=1024, guidance_scale=3.5, 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)
for img in pipe.flux_pipe_call_that_returns_an_iterable_of_images(
prompt=prompt,
guidance_scale=guidance_scale,
num_inference_steps=num_inference_steps,
width=width,
height=height,
generator=generator,
output_type="pil",
good_vae=good_vae,
):
yield img, seed
examples = [
"Super-Realistic potrait of Ariana Grande standing at photoshoot location, worn a detailed texture chic casual outfit, Cinematic lighting, accent lighting, 35mm lens, beautiful",
"full body pose candid photo of 20 years old english schoolgirl , petite body, perky , wearing only a sexy string and bra, light straight blond hair standing in bathroom, morning atmosphere, (Realistic fingers:0.5). vibrent colored room , The entire room is well-lit, with no shadows obscuring her features. The background is blured. masterpiece 4 K",
"A woman with long brunette hair is seated on a large tree branch in a park. She's dressed in a simple white, spaghetti strap crop top with a plunging neckline. Her legs are bent up revealing her smooth skin under her flowing white skirt. Her expression is relaxed, with a slight smile playing on her lips. The background of the image reveals a serene setting with trees and greenery. The lighting in the scene is natural, suggesting an overcast day with soft, diffused light casting gentle shadows around the woman.",
]
css="""
#col-container {
margin: 0 auto;
min-width: 520px;
max-width: 1200px;
}
"""
with gr.Blocks(css=css, theme="Yntec/HaleyCH_Theme_Orange") as demo:
with gr.Column(elem_id="col-container"):
gr.Markdown(f"""# Black-forest-labs/FLUX.1-schnell <br>
Our Easy App using the latest Flux models""")
with gr.Row():
prompt = gr.Text(
label="Prompt",
show_label=False,
max_lines=10,
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]
)
demo.launch()