File size: 3,943 Bytes
8ccf632 819389a 8ccf632 819389a 81b26b5 06f0278 819389a 8ccf632 819389a 6177b55 01787f6 6177b55 80a2167 6177b55 819389a 80a2167 01787f6 819389a 6177b55 819389a 6177b55 819389a 6177b55 819389a 6177b55 819389a ca256e8 6177b55 8ccf632 819389a ca256e8 |
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 |
import gradio as gr
import numpy as np
import random
import torch
import time
from diffusers import DiffusionPipeline
# Set the device and dtype
dtype = torch.float16
device = "cuda" if torch.cuda.is_available() else "cpu"
# Load the diffusion pipeline
pipe = DiffusionPipeline.from_pretrained("black-forest-labs/FLUX.1-schnell", torch_dtype=dtype).to(device)
MAX_SEED = np.iinfo(np.int32).max
MAX_IMAGE_SIZE = 2048
def infer(prompt, negative_prompt="", seed=42, randomize_seed=False, width=1024, height=1024, num_inference_steps=4, guidance_scale=7.5, progress=gr.Progress(track_tqdm=True)):
start_time = time.time()
if width > MAX_IMAGE_SIZE or height > MAX_IMAGE_SIZE:
raise ValueError("Image size exceeds the maximum allowed dimensions.")
if randomize_seed:
seed = random.randint(0, MAX_SEED)
generator = torch.Generator(device=device).manual_seed(seed)
try:
image = pipe(
prompt=prompt,
negative_prompt=negative_prompt,
width=width,
height=height,
num_inference_steps=num_inference_steps,
generator=generator,
guidance_scale=guidance_scale
).images[0]
except Exception as e:
print(f"Error generating image: {e}")
return None, seed, f"Error: {str(e)}"
if time.time() - start_time > 60:
return None, seed, "Image generation took too long and was cancelled."
return image, seed, None
examples = [
["a tiny astronaut hatching from an egg on the moon", "blurry, low quality"],
["a cat holding a sign that says hello world", "dog, text, writing"],
["an anime illustration of a wiener schnitzel", "realistic, photograph"],
]
with gr.Blocks(theme=gr.themes.Soft()) as demo:
gr.Markdown("""
# Custom Image Creator
12B param rectified flow transformer distilled from [FLUX.1 [pro]](https://blackforestlabs.ai/) for 4 step generation
[[blog](https://blackforestlabs.ai/announcing-black-forest-labs/)] [[model](https://huggingface.co/black-forest-labs/FLUX.1)]
""")
with gr.Row():
with gr.Column(scale=2):
prompt = gr.Textbox(
label="Prompt",
placeholder="Enter your prompt",
lines=3
)
negative_prompt = gr.Textbox(
label="Negative Prompt",
placeholder="Enter things to avoid in the image",
lines=2
)
run_button = gr.Button("Generate Image", variant="primary")
with gr.Column(scale=2):
result = gr.Image(label="Generated Image")
seed_output = gr.Number(label="Seed Used")
with gr.Accordion("Advanced Settings", open=False):
seed = gr.Slider(label="Seed", minimum=0, maximum=MAX_SEED, step=1, value=42)
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():
num_inference_steps = gr.Slider(label="Number of inference steps", minimum=1, maximum=50, step=1, value=4)
guidance_scale = gr.Slider(label="Guidance Scale", minimum=0.0, maximum=20.0, step=0.5, value=7.5)
gr.Examples(
examples=examples,
inputs=[prompt, negative_prompt],
outputs=[result, seed_output],
fn=infer,
cache_examples=True
)
run_button.click(
fn=infer,
inputs=[prompt, negative_prompt, seed, randomize_seed, width, height, num_inference_steps, guidance_scale],
outputs=[result, seed_output]
)
gr.Markdown("""
## Save Your Image
Right-click on the generated image and select 'Save image as' to download it.
""")
if __name__ == "__main__":
demo.launch() |