Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import torch | |
| from diffusers import StableDiffusionPipeline | |
| from PIL import Image, ImageDraw, ImageFont | |
| import arabic_reshaper | |
| from bidi.algorithm import get_display | |
| import io | |
| import os | |
| st.set_page_config(page_title="Good Religion Final", layout="wide") | |
| st.title("🎬 مولد الثمنيل الاحترافي - Good Religion") | |
| def process_arabic(text): | |
| if not text: return "" | |
| reshaped = arabic_reshaper.reshape(text) | |
| return get_display(reshaped) | |
| def get_font(font_size): | |
| # محاولة إيجاد الخط في عدة مسارات | |
| font_paths = ["Amiri-Bold.ttf", "/home/user/app/Amiri-Bold.ttf", "src/Amiri-Bold.ttf"] | |
| for path in font_paths: | |
| if os.path.exists(path): | |
| return ImageFont.truetype(path, font_size) | |
| return ImageFont.load_default() | |
| def add_overlays(image, title_text, channel_name="Good Religion"): | |
| width, height = image.size | |
| draw = ImageDraw.Draw(image) | |
| # 1. إضافة اسم القناة في الزاوية اليمنى السفلى | |
| try: | |
| c_font = get_font(30) | |
| draw.text((width - 200, height - 50), channel_name, fill="white", font=c_font, stroke_width=1, stroke_fill="black") | |
| except: | |
| draw.text((width - 150, height - 50), channel_name, fill="white") | |
| # 2. إضافة العنوان العربي في المنتصف | |
| if title_text: | |
| try: | |
| t_font = get_font(80) | |
| reshaped_text = process_arabic(title_text) | |
| # حساب مكان النص في المنتصف | |
| w, h = draw.textbbox((0, 0), reshaped_text, font=t_font)[2:] | |
| draw.text(((width - w) / 2, height - 180), reshaped_text, font=t_font, fill="#FFD700", stroke_width=3, stroke_fill="black") | |
| except Exception as e: | |
| st.error(f"مشكلة في الخط العربي: {e}") | |
| return image | |
| # المدخلات | |
| prompt = st.text_input("وصف الصورة (English):", "Ancient islamic architecture, sunset") | |
| title = st.text_input("العنوان العربي:", "قصص الأنبياء") | |
| if st.button("✨ إنتاج الصورة"): | |
| with st.spinner("جاري الرسم والكتابة..."): | |
| try: | |
| model_id = "segmind/tiny-sd" | |
| pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float32) | |
| pipe = pipe.to("cpu") | |
| # توليد الصورة | |
| image = pipe(f"{prompt}, cinematic, masterpiece", num_inference_steps=20).images[0] | |
| image = image.resize((1280, 720), Image.Resampling.LANCZOS) | |
| # إضافة النصوص | |
| final_image = add_overlays(image, title) | |
| st.image(final_image, use_column_width=True) | |
| buf = io.BytesIO() | |
| final_image.save(buf, format="PNG") | |
| st.download_button("📥 تحميل الصورة", buf.getvalue(), "Good_Religion_Thumb.png") | |
| except Exception as e: | |
| st.error(f"خطأ تقني: {e}") | |