import gradio as gr import numpy as np import random import torch from diffusers import DiffusionPipeline import os # Constants MAX_SEED = np.iinfo(np.int32).max MAX_IMAGE_SIZE = 2048 DEFAULT_IMAGE_SIZE = 1024 # Model setup dtype = torch.bfloat16 device = "cuda" if torch.cuda.is_available() else "cpu" huggingface_token = os.getenv("HUGGINGFACE_TOKEN") pipe = DiffusionPipeline.from_pretrained( "black-forest-labs/FLUX.1-dev", torch_dtype=dtype, token=huggingface_token ).to(device) def generate_image(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) generator = torch.Generator().manual_seed(42) image = pipe( prompt=prompt, width=width, height=height, num_inference_steps=num_inference_steps, generator=generator, guidance_scale=guidance_scale ).images[0] return image, seed css = """ body { background-color: #f4faff; color: #005662; font-family: 'Poppins', sans-serif; } .container { margin: 0 auto; max-width: 900px; padding: 20px; } .gr-button { background-color: #0288d1; color: white; border-radius: 8px; transition: background-color 0.3s ease; } .gr-button:hover { background-color: #0277bd; } .gr-box { border-radius: 12px; border: 1px solid #eeeeee; } """ with gr.Blocks(css=css, theme=gr.themes.Soft(primary_hue="blue", secondary_hue="gray")) as demo: gr.Markdown(""" # FLUX.1 [dev] | A Text-To-Image Rectified Flow 12B Transformer Enter a text prompt below to generate an image. Click 'Generate' to create your image. """) with gr.Row(): with gr.Column(scale=4): prompt = gr.Text( label="Prompt", placeholder="Enter your prompt here", lines=3 ) with gr.Column(scale=1): generate_button = gr.Button("Generate", variant="primary") result = gr.Image(label="Generated Image", type="pil") 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=DEFAULT_IMAGE_SIZE) height = gr.Slider(label="Height", minimum=256, maximum=MAX_IMAGE_SIZE, step=32, value=DEFAULT_IMAGE_SIZE) 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=[ "a galaxy swirling with vibrant blue and purple hues", "a futuristic cityscape under a dark sky", "a serene forest with a magical glowing tree", "a portrait of a smiling woman with a colorful floral crown", "a fantastical creature with the body of a dragon and the wings of a butterfly", ], inputs=prompt, outputs=[result, seed], fn=generate_image, cache_examples=True, ) generate_button.click( fn=generate_image, inputs=[prompt, seed, randomize_seed, width, height, guidance_scale, num_inference_steps], outputs=[result, seed] ) demo.launch(share=True)