Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import torch | |
| from diffusers import StableDiffusionPipeline, DPMSolverMultistepScheduler | |
| # ============================================ | |
| # मॉडल लोडिंग (CPU के लिए ऑप्टिमाइज़्ड) | |
| # ============================================ | |
| model_id = "OFA-Sys/small-stable-diffusion-v0" | |
| print("मॉडल लोड हो रहा है... कृपया प्रतीक्षा करें।") | |
| # Scheduler सेट करें (कम स्टेप्स में बेहतर क्वालिटी के लिए) | |
| scheduler = DPMSolverMultistepScheduler.from_pretrained( | |
| model_id, | |
| subfolder="scheduler" | |
| ) | |
| # Pipeline लोड करें | |
| pipe = StableDiffusionPipeline.from_pretrained( | |
| model_id, | |
| torch_dtype=torch.float32, # CPU के लिए float32 ज़रूरी है | |
| scheduler=scheduler, | |
| safety_checker=None, # मेमोरी बचाने के लिए | |
| requires_safety_checker=False # Warnings हटाने के लिए | |
| ) | |
| # CPU मेमोरी ऑप्टिमाइज़ेशन | |
| try: | |
| pipe.enable_attention_slicing() | |
| pipe.enable_vae_slicing() | |
| print("मेमोरी ऑप्टिमाइज़ेशन सक्रिय।") | |
| except Exception as e: | |
| print(f"ऑप्टिमाइज़ेशन में समस्या (नज़रअंदाज़ करें): {e}") | |
| print("मॉडल तैयार है!") | |
| # ============================================ | |
| # इमेज जनरेशन फंक्शन | |
| # ============================================ | |
| def generate_image(prompt, negative_prompt, steps, guidance_scale, seed): | |
| """ | |
| प्रॉम्प्ट के आधार पर इमेज जनरेट करता है। | |
| """ | |
| # प्रॉम्प्ट खाली होने पर डिफ़ॉल्ट | |
| if not prompt or prompt.strip() == "": | |
| prompt = "a beautiful landscape, highly detailed, 4k" | |
| # सीड सेट करें | |
| if seed < 0: | |
| generator = None | |
| else: | |
| generator = torch.Generator().manual_seed(int(seed)) | |
| try: | |
| # इमेज जनरेट करें | |
| result = pipe( | |
| prompt=prompt, | |
| negative_prompt=negative_prompt if negative_prompt else None, | |
| num_inference_steps=int(steps), | |
| guidance_scale=float(guidance_scale), | |
| generator=generator, | |
| width=512, | |
| height=512 | |
| ) | |
| return result.images[0] | |
| except Exception as e: | |
| print(f"इमेज जनरेशन में एरर: {e}") | |
| return None | |
| # ============================================ | |
| # Gradio वेब इंटरफेस | |
| # ============================================ | |
| with gr.Blocks(title="Small Stable Diffusion - CPU") as demo: | |
| # हेडर | |
| gr.Markdown(""" | |
| # 🎨 Small Stable Diffusion V0 (CPU डेमो) | |
| यह **OFA-Sys/small-stable-diffusion-v0** मॉडल का उपयोग करता है। | |
| यह मॉडल स्टैंडर्ड स्टेबल डिफ्यूजन से लगभग **आधे साइज़** का है, इसलिए CPU पर भी चल सकता है। | |
| ⏱️ **ध्यान दें**: CPU पर एक इमेज जनरेट होने में **35-45 सेकंड** लग सकते हैं। | |
| """) | |
| # मुख्य लेआउट | |
| with gr.Row(): | |
| # बायां कॉलम - इनपुट | |
| with gr.Column(scale=1): | |
| prompt = gr.Textbox( | |
| label="📝 प्रॉम्प्ट", | |
| placeholder="जैसी इमेज चाहिए वैसा लिखें... (जैसे: a cat sitting on a chair, oil painting)", | |
| lines=3, | |
| value="a beautiful sunset over mountains, highly detailed, 4k" | |
| ) | |
| negative_prompt = gr.Textbox( | |
| label="🚫 नेगेटिव प्रॉम्प्ट", | |
| placeholder="जो चीज़ें नहीं चाहिए... (जैसे: blurry, low quality, ugly)", | |
| lines=2, | |
| value="blurry, low quality, distorted, ugly, bad anatomy" | |
| ) | |
| with gr.Row(): | |
| steps = gr.Slider( | |
| minimum=5, | |
| maximum=30, | |
| value=15, | |
| step=1, | |
| label="🔢 स्टेप्स", | |
| info="ज़्यादा स्टेप्स = बेहतर क्वालिटी, लेकिन ज़्यादा समय" | |
| ) | |
| guidance_scale = gr.Slider( | |
| minimum=1.0, | |
| maximum=15.0, | |
| value=7.5, | |
| step=0.5, | |
| label="🎯 गाइडेंस स्केल", | |
| info="प्रॉम्प्ट को कितनी सख्ती से फॉलो करना है" | |
| ) | |
| seed = gr.Number( | |
| label="🎲 सीड", | |
| value=-1, | |
| precision=0, | |
| info="समान परिणाम के लिए कोई नंबर डालें। -1 = रैंडम" | |
| ) | |
| generate_btn = gr.Button( | |
| "✨ इमेज जनरेट करें", | |
| variant="primary", | |
| size="lg" | |
| ) | |
| # दायां कॉलम - आउटपुट | |
| with gr.Column(scale=1): | |
| output_image = gr.Image( | |
| label="🖼️ जनरेटेड इमेज", | |
| type="pil", | |
| height=512, | |
| width=512 | |
| ) | |
| # उदाहरण प्रॉम्प्ट्स | |
| gr.Examples( | |
| examples=[ | |
| ["a red sports car on a mountain road, cinematic lighting", "blurry, low quality", 15, 7.5, 42], | |
| ["a cute puppy playing in a garden, watercolor painting", "ugly, deformed", 15, 7.5, 123], | |
| ["an astronaut riding a horse on mars, digital art", "blurry, bad anatomy", 15, 7.5, 999], | |
| ["a cozy cabin in snowy forest at night, warm lights", "low resolution, blurry", 15, 7.5, 777], | |
| ], | |
| inputs=[prompt, negative_prompt, steps, guidance_scale, seed], | |
| label="उदाहरण प्रॉम्प्ट्स - क्लिक करके ट्राई करें" | |
| ) | |
| # बटन को फंक्शन से जोड़ें | |
| generate_btn.click( | |
| fn=generate_image, | |
| inputs=[prompt, negative_prompt, steps, guidance_scale, seed], | |
| outputs=output_image | |
| ) | |
| # फ़ूटर | |
| gr.Markdown(""" | |
| --- | |
| 💡 **टिप्स**: | |
| - बेहतर क्वालिटी के लिए स्टेप्स 20-25 रखें | |
| - गाइडेंस स्केल 7-9 के बीच सबसे अच्छा काम करता है | |
| - एक ही सीड और प्रॉम्प्ट से हमेशा एक जैसी इमेज मिलेगी | |
| """) | |
| # ============================================ | |
| # ऐप लॉन्च करें | |
| # ============================================ | |
| if __name__ == "__main__": | |
| demo.queue(max_size=5).launch() |