File size: 3,701 Bytes
ef65bbf 17c2ee9 ef65bbf 17c2ee9 ef65bbf 7a8552a ef65bbf 79edb47 ef65bbf 17c2ee9 ef65bbf 17c2ee9 ef65bbf 17c2ee9 ef65bbf 17c2ee9 ef65bbf 7a8552a ac0bffb ef65bbf 7a8552a 17c2ee9 7a8552a ef65bbf ac0bffb ef65bbf 17c2ee9 7a8552a 17c2ee9 ef65bbf 7a8552a ef65bbf 17c2ee9 7a8552a ef65bbf 7a8552a ef65bbf 7a8552a ef65bbf 7a8552a 17c2ee9 ef65bbf 17c2ee9 ef65bbf 17c2ee9 ef65bbf 17c2ee9 7a8552a ef65bbf 7a8552a 17c2ee9 ef65bbf 17c2ee9 |
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 |
# 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() |