bibou.jpeg / app.py
halimbahae's picture
Update app.py
4c21da3 verified
raw
history blame
5.18 kB
import gradio as gr
import numpy as np
import random
from diffusers import DiffusionPipeline
import torch
from PIL import Image, ImageDraw, ImageFont
device = "cuda" if torch.cuda.is_available() else "cpu"
if torch.cuda.is_available():
torch.cuda.max_memory_allocated(device=device)
pipe = DiffusionPipeline.from_pretrained("stabilityai/sdxl-turbo", torch_dtype=torch.float16, variant="fp16", use_safetensors=True)
pipe.enable_xformers_memory_efficient_attention()
pipe = pipe.to(device)
else:
pipe = DiffusionPipeline.from_pretrained("stabilityai/sdxl-turbo", use_safetensors=True)
pipe = pipe.to(device)
MAX_SEED = np.iinfo(np.int32).max
MAX_IMAGE_SIZE = 3072
def infer(prompt, negative_prompt, seed, randomize_seed, width, height, guidance_scale, num_inference_steps):
# Append Moroccan and Amazigh art styles to the prompt
style_prompt = f"{prompt}, inspired by Moroccan and Amazigh arts, traditional motifs, vibrant colors, and intricate patterns."
if randomize_seed:
seed = random.randint(0, MAX_SEED)
generator = torch.Generator().manual_seed(seed)
image = pipe(
prompt=style_prompt,
negative_prompt=negative_prompt,
guidance_scale=guidance_scale,
num_inference_steps=num_inference_steps,
width=width,
height=height,
generator=generator
).images[0]
# Ensure image is in uint8 format
image = (255 * np.clip(image, 0, 1)).astype(np.uint8)
# Convert the image to PIL format for overlaying the watermark
pil_image = Image.fromarray(image)
# Add watermark
watermark_text = "Bibou.jpeg"
font = ImageFont.truetype("arial.ttf", size=30) # Adjust font and size as needed
draw = ImageDraw.Draw(pil_image)
text_width, text_height = draw.textsize(watermark_text, font=font)
margin = 10
opacity = 0.6
draw.text((pil_image.width - text_width - margin, pil_image.height - text_height - margin), watermark_text, font=font, fill=(255, 255, 255, int(255 * opacity)))
# Convert back to numpy array for Gradio display
watermarked_image = np.array(pil_image)
return watermarked_image
examples = [
"Sunset over the Atlas Mountains",
"Traditional Amazigh jewelry under the moonlight",
"Flying carpet in space",
"Unicorn riding a camel in the Sahara Desert",
"Moroccan souk floating in the sky",
]
css="""
#col-container {
margin: 0 auto;
max-width: 840px;
color: #003366;
}
"""
if torch.cuda.is_available():
power_device = "GPU"
else:
power_device = "CPU"
with gr.Blocks(css=css) as demo:
with gr.Column(elem_id="col-container"):
gr.Markdown(f"""
# bibou.jpeg
Generate Moroccan folkloric pictures, inspired by Moroccan and Amazigh arts. 🎨🎶
""")
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):
negative_prompt = gr.Text(
label="Negative prompt",
max_lines=1,
placeholder="Enter a negative prompt",
visible=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=0.0,
maximum=10.0,
step=0.1,
value=0.0,
)
num_inference_steps = gr.Slider(
label="Number of inference steps",
minimum=1,
maximum=12,
step=1,
value=2,
)
gr.Examples(
examples = examples,
inputs = [prompt]
)
run_button.click(
fn = infer,
inputs = [prompt, negative_prompt, seed, randomize_seed, width, height, guidance_scale, num_inference_steps],
outputs = [result]
)
demo.queue().launch()