Spaces:
Sleeping
Sleeping
File size: 2,490 Bytes
1fc8d06 51d9f34 184daa2 d25b42d 184daa2 d25b42d 184daa2 d25b42d 51d9f34 184daa2 |
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 |
import gradio as gr
import torch
from diffusers import StableDiffusionPipeline
from PIL import Image
import qrcode
from qrcode.constants import ERROR_CORRECT_H
# -------- Stable Diffusion setup --------
device = "cuda" if torch.cuda.is_available() else "mps" if torch.backends.mps.is_available() else "cpu"
dtype = torch.float16 if device != "cpu" else torch.float32
pipe = StableDiffusionPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
torch_dtype=dtype
).to(device)
def sd_generate(prompt, steps, guidance, seed):
gen = torch.Generator(device=device).manual_seed(int(seed)) if int(seed) != 0 else None
def run():
return pipe(prompt, num_inference_steps=int(steps), guidance_scale=float(guidance), generator=gen).images[0]
# autocast only where supported
if device in ("cuda", "mps"):
with torch.autocast(device):
return run()
else:
return run()
# -------- QR code helper --------
def make_qr(url: str = "http://www.mybirdfire.com", size: int = 512, border: int = 2) -> Image.Image:
qr = qrcode.QRCode(
version=None,
error_correction=ERROR_CORRECT_H, # high EC to survive stylization later
box_size=10,
border=border
)
qr.add_data(url.strip())
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white").convert("RGB")
return img.resize((size, size), resample=Image.NEAREST)
# -------- UI --------
with gr.Blocks() as demo:
gr.Markdown("## Stable Diffusion + QR (step by step)")
with gr.Tab("Stable Diffusion (prompt → image)"):
prompt = gr.Textbox(label="Prompt", value="A fantasy castle at sunset")
steps = gr.Slider(10, 50, value=30, label="Steps", step=1)
cfg = gr.Slider(1, 12, value=7.5, label="Guidance Scale", step=0.1)
seed = gr.Number(value=0, label="Seed (0 = random)", precision=0)
out_sd = gr.Image(label="Generated Image")
gr.Button("Generate").click(sd_generate, [prompt, steps, cfg, seed], out_sd)
with gr.Tab("QR Maker (mybirdfire)"):
url = gr.Textbox(label="URL/Text", value="http://www.mybirdfire.com")
size = gr.Slider(256, 1024, value=512, step=64, label="Size (px)")
quiet = gr.Slider(0, 8, value=2, step=1, label="Border (quiet zone)")
out_qr = gr.Image(label="QR Code", type="pil")
gr.Button("Generate QR").click(make_qr, [url, size, quiet], out_qr)
if __name__ == "__main__":
demo.launch()
|