Moooo / app.py
dghhvc's picture
Update app.py
ef65bbf verified
# app.py - Hyper-SD LoRA روی CPU — فوق سریع (۵–۱۸ ثانیه!)
import torch
from diffusers import StableDiffusionPipeline, DDIMScheduler
from huggingface_hub import hf_hub_download
import gradio as gr
# برای CPU فقط
device = "cpu"
torch_dtype = torch.float32
# لود base model (SD 1.5 برای سرعت بیشتر روی CPU — کیفیت عالی!)
pipe = StableDiffusionPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
torch_dtype=torch_dtype,
use_safetensors=True,
safety_checker=None, # برای سرعت بیشتر
)
# دانلود و لود LoRA Hyper-SD (۱ گام!)
ckpt_name = "Hyper-SD15-1step-lora.safetensors"
pipe.load_lora_weights(hf_hub_download("ByteDance/Hyper-SD", ckpt_name))
# fuse LoRA (خیلی مهمه برای سرعت!)
pipe.fuse_lora(lora_scale=1.0)
# scheduler مناسب برای Hyper-SD (DDIM برای ۱–۴ گام)
pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config)
pipe.scheduler.set_timesteps(1) # فقط ۱ گام!
# بهینه‌سازی‌های CPU
pipe.enable_attention_slicing() # حافظه کم
pipe.enable_vae_slicing() # VAE سریع‌تر
pipe.unet.to(memory_format=torch.channels_last)
pipe.to(device)
def generate(prompt, negative="", steps=1, seed=-1):
generator = torch.Generator(device=device).manual_seed(int(seed)) if seed != -1 else None
image = pipe(
prompt=prompt,
negative_prompt=negative,
num_inference_steps=steps, # فقط ۱–۴!
guidance_scale=0.0, # برای Hyper-SD معمولاً ۰ (بدون CFG)
generator=generator,
height=512, # برای CPU سریع‌تر (بعداً upscale کن)
width=512,
).images[0]
return image
# رابط گرادیو
with gr.Blocks(title="Hyper-SD روی CPU — ۵–۱۸ ثانیه!") as demo:
gr.Markdown("# Hyper-SD LoRA — سریع‌ترین مدل ۲۰۲۵ روی CPU 🚀")
gr.Markdown("**۱ گام** → **۵–۹ ثانیه** | کیفیت عالی با LoRA ByteDance")
with gr.Row():
with gr.Column(scale=2):
prompt = gr.Textbox(
label="پرامپت",
lines=3,
placeholder="مثلاً: یک اژدهای غول‌پیکر در آسمان طوفانی، هنر دیجیتال",
value="گربه فضانورد روی مریخ، سبک واقع‌گرایانه، کیفیت بالا"
)
negative = gr.Textbox(
label="نگاتیو پرامپت",
lines=2,
placeholder="تار، بدشکل، کم‌جزئیات",
value="تار، زشت، نویزدار"
)
with gr.Row():
steps = gr.Slider(1, 4, value=1, step=1, label="گام‌ها (۱ = سریع‌ترین)")
seed = gr.Number(value=-1, label="Seed (-1 = رندوم)")
btn = gr.Button("تولید تصویر ⚡", variant="primary")
with gr.Column(scale=1):
output = gr.Image(label="نتیجه", type="pil")
gr.Examples(
examples=[
["شهر سایبرپانک در شب با باران و نئون، کیفیت بالا", "تار، تاریک"],
["پرتره دختر انیمه با موهای آبی، در جنگل جادویی", ""],
["ماشین اسپورت در جاده کوهستانی، غروب آفتاب", "تار، بدشکل"],
],
inputs=[prompt, negative]
)
btn.click(fn=generate, inputs=[prompt, negative, steps, seed], outputs=output)
if __name__ == "__main__":
demo.launch()