OLLAMAcontrol / app.py
sky-meilin's picture
Update app.py
b723f5d verified
Raw
History Blame Contribute Delete
3.99 kB
import gradio as gr
import random
from PIL import Image, ImageDraw, ImageFont
import io
import base64
# Deine Assets (erweitert)
images = ["file:12", "file:71"] # Cert-Vorlagen
videos = ["file:97", "file:98", "file:99"]
tasks = ["Cage anziehen", "Loser Pics", "Pegging", "Toilet-Asche", "Anschaffen", "Halsband", "Brandmark"]
def generate_cert_and_blogimage(name, bewerbung, tribut, custom_image=None):
"""Erweiterte Funktion: Cert + Blog-Image mit Upload-Option"""
# Tribut-Validierung
try:
tribut = float(tribut or 0)
except (TypeError, ValueError):
return "❌ Ungültiger Betrag.", None, None, None
if tribut < 35:
return "❌ Tribut unzureichend! Mind. 35€ für Sissy-Zertifikat.", None, None, None
# 1. SISSY CERT generieren
cert_img = Image.new("RGB", (800, 600), color="black")
draw = ImageDraw.Draw(cert_img)
font = ImageFont.load_default()
cert_text = (
f"Sissy Zertifikat\n"
f"Name: {name}\n"
f"Bewerbung: {bewerbung[:50]}...\n"
f"Goddess Annabelle\n"
f"Task: {random.choice(tasks)}"
)
draw.text((100, 100), cert_text, fill="red", font=font)
task = random.choice(tasks)
video = random.choice(videos)
# 2. BLOG-IMAGE generieren (mit Custom Upload Overlay)
if custom_image:
# Custom Bild als Basis nehmen (Resize)
blog_img = custom_image.resize((1200, 800))
draw_blog = ImageDraw.Draw(blog_img)
# Overlay: Text + Cert-Snippet
overlay_text = (
f"NEU! Sissy Cert #{name[:8]}\n"
f"Task: {task}\n"
f"Blog ready – 35€ Tribut\n"
f"GoddessAnnabelle.com"
)
draw_blog.text((50, 50), overlay_text, fill="white", font=font, stroke_width=2, stroke_fill="black")
# Kleines Cert-Snippet unten rechts einfügen
cert_thumb = cert_img.resize((200, 150))
blog_img.paste(cert_thumb, (900, 600))
else:
# Default Blog-Image aus Assets
blog_img = Image.new("RGB", (1200, 800), color="#1a0033")
draw_blog = ImageDraw.Draw(blog_img)
draw_blog.text((100, 100), f"Sissy {name} approved!\n{task} Task unlocked\n35€ BNWO Entry",
fill="magenta", font=font)
status = f"✅ Zertifikat + Blog-Image ready! Task: {task}"
return status, cert_img, video, blog_img
# Erweiterte Gradio Interface
with gr.Blocks(title="🖤 Goddess Annabelle Sissy Suite 🖤") as iface:
gr.Markdown("# Sissy Cert + Blog-Image Generator\n35€ → Zertifikat, Task-Reel **+ Social-Ready Blogbild**")
with gr.Row():
with gr.Column(scale=1):
name = gr.Textbox(label="Dein Sissy-Name", placeholder="sissy_loser_420")
bewerbung = gr.Textbox(label="Aussagekräftige Bewerbung", lines=4)
tribut = gr.Number(label="Tribut (€)", value=0, minimum=0)
custom_img = gr.Image(type="pil", label="📸 Custom Blog-Bild hochladen (optional)")
with gr.Column(scale=1):
status = gr.Textbox(label="Status", interactive=False)
cert_img = gr.Image(label="✅ Dein Sissy Cert")
video_reel = gr.Video(label="🎥 Task Reel")
blog_img = gr.Image(label="🖼️ Social/Blog-Image (1200x800 ready!)")
submit_btn = gr.Button("Generate Cert + Blog-Image", variant="primary", size="lg")
submit_btn.click(
fn=generate_cert_and_blogimage,
inputs=[name, bewerbung, tribut, custom_img],
outputs=[status, cert_img, video_reel, blog_img]
)
gr.Markdown("""
**Features:**
- Personalisierte Certs mit Tasks
- Social-ready Blog-Bilder (Instagram/Twitter/WordPress)
- Custom Upload → Overlay mit Cert/Task
- BNWO optimized! 🚀
""")
# Launch (server=False für privates Testing)
iface.launch(server_name="0.0.0.0", server_port=7860, share=False, debug=True)