Spaces:
Runtime error
Runtime error
| # app.py for Hugging Face Space (Stable Diffusion) | |
| import gradio as gr | |
| from diffusers import StableDiffusionPipeline | |
| import torch | |
| from PIL import Image | |
| import io | |
| import base64 | |
| # Global variables for model and device | |
| sd_pipeline = None | |
| device = "cuda" if torch.cuda.is_available() else "cpu" | |
| # Function to load the model (called once at startup) | |
| def load_sd_model(): | |
| global sd_pipeline | |
| if sd_pipeline is None: | |
| print(f"--- Loading Stable Diffusion v1.5 model on {device} ---") | |
| sd_model_id = "runwayml/stable-diffusion-v1-5" | |
| try: | |
| # Load in float16 for GPU to save VRAM, or float32 for CPU | |
| sd_pipeline = StableDiffusionPipeline.from_pretrained( | |
| sd_model_id, | |
| torch_dtype=torch.float16 if device == "cuda" else torch.float32, | |
| use_safetensors=True | |
| ) | |
| # Move to device explicitly if device_map is not used (for pipeline.to(device)) | |
| sd_pipeline.to(device) | |
| if device == "cuda": | |
| sd_pipeline.enable_attention_slicing() | |
| print("Stable Diffusion model loaded successfully!") | |
| except Exception as e: | |
| print(f"Error loading Stable Diffusion model: {e}") | |
| sd_pipeline = None | |
| raise RuntimeError(f"Failed to load Stable Diffusion model: {e}") | |
| return sd_pipeline | |
| # Function to generate an image | |
| def generate_image(prompt): | |
| global sd_pipeline | |
| if sd_pipeline is None: | |
| return "Error: Stable Diffusion model not loaded." | |
| if not prompt: | |
| return "Please provide a text description for the image." | |
| print(f"--- Generating image for prompt: '{prompt}' ---") | |
| try: | |
| # Use num_inference_steps=25 for speed, can be increased for quality | |
| image = sd_pipeline(prompt, num_inference_steps=25).images[0] | |
| print("Image generated successfully!") | |
| return image | |
| except Exception as e: | |
| print(f"Error generating image: {e}") | |
| return f"Failed to generate image: {str(e)}" | |
| # Load the model during startup of the Space | |
| load_sd_model() | |
| # Create Gradio interface | |
| iface = gr.Interface( | |
| fn=generate_image, | |
| inputs=gr.Textbox(lines=2, label="وصف الصورة (باللغة الإنجليزية)"), | |
| outputs=gr.Image(type="pil", label="الصورة المولدة"), | |
| title="مولد الصور Pi-1 (Stable Diffusion)", | |
| description="أدخل وصفًا نصيًا باللغة الإنجليزية لتوليد صورة." | |
| ) | |
| iface.launch(share=False) |